送信ダイバーシティ

送信ダイバーシティ

WiFiLTE/5G等に広く利用されている送信ダイバーシティ技術を概説する。

参考論文

Comparative Study of Open-loop Transmit Diversity Schemes for Four Transmit Antennas in Coded OFDM Systems

CSD/CDD (Cyclic Shift Diversity, Cyclic Delay Diversity )

 CSD/CDDは、1受信/n送信の場合に効果があるダイバーシティである。  原理として、送信アンテナそれぞれに対して任意の遅延を加える事により受信側で同位相合成する事で受信SNを向上する手法となる。  但し、チャネルが既知である事が前提となるため、TDD等の時分割復信において受信側からの信号から推定したチャネル情報を利用し、各送信アンテナへ重みをかけて送信する必要がある。WiFiやTD-LTEで利用されている方式となる。  尚、遅延量はシンボル間干渉を起さない程度の遅延とする必要がある。

Alamouti STBC

STBCは http://www.radio3.ee.uec.ac.jp/D_ronbun/sasaki@.pdf 3.3に詳しい。

参考

  • 送信ダイバーシティはCDD(Cyclic Delay Diversity,=Cyclic Shift Diversity )が2000年に特許出願され11aと11gに導入され、次いでSTBCが11nに導入された。
  • 過度の符号間干渉(ISI)を引き起こさないように、ガードインターバル(GI)の制限内に収まるように選択される。

STBC

WiFiの新しい道

気になる会社(下記) が目に留まり、Mesh WiFi Networkを追憶していた。
どこでもWi-Fi化 置くだけ基地局で簡単拡張! | 古川 浩 | TEDxFukuoka - YouTube

思い出せるWiFiの狙いは3つ。

  1. ESP32の独自規格である802.11 LR
  2. ESP-Mesh によるメッシュネットワーク
  3. 干渉除去による全二重WiFi通信

Pixel3aもESP32と同様なSoftAP(親機 兼 子機)が使えるため、スマートフォンを繋ぎMesh化する事もできる。 チャネルは制御プロトコルで各機器毎に設定し、同一干渉は勿論、近接機器ではチャネル間隔を離すのだ。

M5StackとSIM7080GでHTTP通信

ATコマンドで通信

LTE CAT-M接続とPing

SIMCOM社のSIM7080Gでさくらセキュアモバイルの通信テスト | Next Step SIM7080G Cat-M/NB-IoT HAT - Waveshare Wiki

の記事を参考とさせて頂きました。

MQTT通信

 次回記載します。

TCPとHTTP通信

TCP通信のATコマンドは TCP/IP testing with Simcom SIM7070/SIM7080 Modules | M2MSupport.net のソースを参考とした。

大まかに下記を行う。

  1. TCP接続
  2. HTTP GETコマンドを送信
  3. HTTP結果を受け取り
  4. TCPをクローズする

HTTP通信を行うATコマンドを記載しておく。

直接HTTP通信

M5Stack UnitCatM を Seeeduino XIAO で制御 - IoT - HomeMadeGarbage 様が参考になります。

ATコマンド一覧

AT+CPSI Inquiring UE System Information

+CPSI: Systemmode,OperationMode,MCC-MNC,TAC,SCellID,PCellID,FrequencyBand,earfcn,dlbw,ulbw,RSRQ,RSRP,RSSI,RSSNR
//一例  +CPSI: LTE CAT-M1,Online,440-10,0x9000,152121616,78,EUTRAN-BAND1,276,4,4,-15,-109,-80,10

f:id:jijiken0417:20211128215522p:plain

Power Saving Mode

マシンコム端末向けに消費電力を低減する技術としてPSM(Power Saving Mode)がRelease 12仕様で策定された。PSMは、間欠受信を行わず、無線の機能をほぼOFFにすることで消費電力を大幅に削減できる。一方で、端末向けの着信は周期的に行われる位置登録の契機(通常54分)でしか行えないという課題があった。そこで、着信間隔を短くすることも実現する技術として、待受け中の間欠受信周期を既存の最大2.56秒よりさらに大きくし、最大43分の間欠受信周期を設定できるextended DRX(Discontinuous Reception)※10が策定された。 3.1 新サービス創造のための新技術 | 企業情報 | NTTドコモ

間欠受信はAT+CPSMS (Power Saving Mode Setting) で行える。 詳しい設定方法は次回調査する。

f:id:jijiken0417:20211128214924p:plain https://m5stack.oss-cn-shenzhen.aliyuncs.com/resource/docs/datasheet/unit/sim7080g/en/SIM7070_SIM7080_SIM7090%20Series_AT%20Command%20Manual_V1.04.pdf

Extender DRX

無線品質

SNR

RSRP-99dBmだが、SNRが4dB(12*2 - 20)とかなり低い。 環境雑音が高い、またはモジュールの内部雑音が高いせいか? 後者だと問題。

+CPSI: LTE CAT-M1,Online,440-10,0x176F,43981314,152,EUTRAN-BAND1,276,4,4,-10,-99,-75,12

M5Stack Howto

UiFLOW

micropython modules

UiFLOWを書き込んだM5StickCの画面からuser appモードにして、シリアルからhelp('modules') を実行。

M5StickC

>>> help('modules')
IoTcloud/AWS      hats/_servos      math              units/_dds
IoTcloud/Ali      hats/_speaker     max30100          units/_dual_button
IoTcloud/Azure    hats/_tof         menu/__init__     units/_earth
IoTcloud/Tencent  hats/_yun         menu/app          units/_env
IoTcloud/__init__ hmac              menu/cloud        units/_env2
IoTcloud/blynk    i2c_bus           menu/setup        units/_env3
MediaTrans/TimerCam                 inisetup          menu/startup      units/_ext_io
MediaTrans/__init__                 libs/__init__     menu/wifi         units/_fader
MicroWebSrv/__init__                libs/bmm150       micropython       units/_fan
MicroWebSrv/microWebSocket          libs/bmp280       neopixel          units/_finger
MicroWebSrv/microWebSrv             libs/config       network           units/_gesture
MicroWebSrv/microWebTemplate        libs/dht12        ntptime           units/_gps
ThirdParty/myCobot/myCobotPro       libs/easyIO       ntptime           units/_hall
__main__          libs/echo         simpleOTA         units/_heart
_boot             libs/emoji        sys               units/_imu6886
_flow             libs/imu          uarray            units/_ir
_onewire          libs/ir/ir_rx/__init__              ubinascii         units/_joystick
_thread           libs/ir/ir_rx/nec ucollections      units/_laserrx
_uasyncio         libs/ir/ir_rx/print_error           ucryptolib        units/_lasertx
_webrepl          libs/ir/ir_tx/__init__              uctypes           units/_lcd
apa106            libs/ir/ir_tx/nec uerrno            units/_light
base64            libs/m5mqtt       uhashlib          units/_makey
btree             libs/microcoapy/__init__            uhashlib          units/_mqtt_eth
builtins          libs/microcoapy/coap_macros         uheapq            units/_ncir
cmath             libs/microcoapy/coap_option         uiflow            units/_oled
collections/__init__                libs/microcoapy/coap_packet         uio               units/_op
collections/defaultdict             libs/microcoapy/coap_reader         ujson             units/_pahub
collections/deque libs/microcoapy/coap_writer         umqtt/__init__    units/_pbhub
deviceCfg         libs/microcoapy/microcoapy          umqtt/robust      units/_pir
display           libs/mlx90640     umqtt/simple      units/_relay
esp               libs/modbus/__init__                unit              units/_relay4
esp32             libs/modbus/master/__init__         units/VFunction/__init__            units/_rfid
espnow            libs/modbus/master/uModBusConst     units/VFunction/_apriltag_code      units/_rgb
flashbdev         libs/modbus/master/uModBusFunctions units/VFunction/_bar_code           units/_rgb_multi
flow/__init__     libs/modbus/master/uModBusSerial    units/VFunction/_color_track        units/_rotary_encoder
flow/adaptation   libs/modbus/master/uModBusTCP       units/VFunction/_dm_code            units/_servo
flow/ezdata       libs/modbus/slave/__init__          units/VFunction/_face_detect        units/_thermal
flow/flowDeinit   libs/modbus/slave/exceptions        units/VFunction/_jpeg_transfer      units/_tof
flow/m5cloud      libs/modbus/slave/functions         units/VFunction/_line_tracker       units/_tracker
flow/m5ucloud     libs/modbus/slave/redundancy_check  units/VFunction/_motion             units/_tvoc
flow/protocol     libs/modbus/slave/route             units/VFunction/_qr_code            units/_uhf_rfid
framebuf          libs/modbus/slave/rtu               units/VFunction/_tag_reader         units/_ultrasonic
gc                libs/modbus/slave/utils             units/VFunction/_target_track       units/_uwb
hardware/__init__ libs/mstate       units/VFunction/_v2_code_detector   units/_v_function
hardware/_led     libs/numbers      units/VFunction/_v2_color_tracker   units/_vibrator
hardware/axp192   libs/nvs          units/VFunction/_v2_face_detector   units/_vmeter
hardware/bm8563   libs/paj7620u2    units/VFunction/_v2_face_recognition                  units/_watering
hardware/button   libs/pca9685      units/VFunction/_v2_lane_line_tracker                 units/_weight
hardware/mpu6050  libs/pid          units/VFunction/_v2_motion_tracker  uos
hardware/sh200q   libs/power        units/VFunction/_v2_object_recognition                urandom
hardware/speaker  libs/qmp6988      units/VFunction/_v2_online_classifier                 ure
hat               libs/servo        units/VFunction/_v2_shape_detector  urllib/parse
hats/_RS485       libs/sh1107       units/VFunction/_v2_target_tracker  urllib/urequest
hats/_adc         libs/sh200q       units/_ID         uselect
hats/_beetlec     libs/sht30        units/_IR_NEC     usocket
hats/_bugc        libs/simcom/__init__                units/_ISORS485   ussl
hats/_cardKB      libs/simcom/common                  units/_LoRaWAN    ustruct
hats/_dac         libs/simcom/gps   units/_NBIoT      utils
hats/_env         libs/simcom/gsm   units/_RS485      utime
hats/_env2        libs/simcom/lte   units/_RTC8563    utimeq
hats/_env3        libs/simcom/nb    units/_accel      uwebsocket
hats/_finger      libs/speak        units/_acsocket   uzlib
hats/_joyC        libs/timeSchedule units/_adc        vl53l0x
hats/_joystick    libs/time_ex      units/_ameter     warnings
hats/_ncir        libs/urequests    units/_angle      wav/chunk
hats/_pir         libs/vl53l0x      units/_bps        wav/wav_player
hats/_powerc      m5stack           units/_button     wav/wave
hats/_puppy       m5uart            units/_cardKB     wifiCfg
hats/_roverc      m5ui              units/_color      wifiWebCfg
hats/_servo       machine           units/_dac

M5Tough

>>> help('modules')
IoTcloud/AWS      inisetup          micropython       units/_ameter
IoTcloud/Ali      libs/__init__     module            units/_angle
IoTcloud/Azure    libs/bmm150       modules/_baseX    units/_bps
IoTcloud/Tencent  libs/bmp280       modules/_cellular units/_button
IoTcloud/__init__ libs/config       modules/_goPlus   units/_cardKB
IoTcloud/blynk    libs/dht12        modules/_goPlus2  units/_color
MediaTrans/AudioPlay                libs/easyIO       modules/_gps      units/_dac
MediaTrans/MicRecord                libs/echo         modules/_grbl     units/_dds
MediaTrans/TimerCam                 libs/emoji        modules/_lego     units/_dual_button
MediaTrans/__init__                 libs/imu          modules/_legoBoard                  units/_earth
MicroWebSrv/__init__                libs/ir/ir_rx/__init__              modules/_lidarBot units/_env
MicroWebSrv/microWebSocket          libs/ir/ir_rx/nec modules/_lorawan_network            units/_env2
MicroWebSrv/microWebSrv             libs/ir/ir_rx/print_error           modules/_lorawan_p2p                units/_env3
MicroWebSrv/microWebTemplate        libs/ir/ir_tx/__init__              modules/_m5bala   units/_ext_io
__main__          libs/ir/ir_tx/nec modules/_plus     units/_fader
_boot             libs/m5mqtt       modules/_pm25     units/_fan
_flow             libs/microcoapy/__init__            modules/_rotaryencoder              units/_finger
_onewire          libs/microcoapy/coap_macros         modules/_servo    units/_gesture
_thread           libs/microcoapy/coap_option         modules/_servo2   units/_gps
_uasyncio         libs/microcoapy/coap_packet         modules/_stepMotor                  units/_hall
_webrepl          libs/microcoapy/coap_reader         modules/_stepMotorDriver            units/_heart
apa106            libs/microcoapy/coap_writer         neopixel          units/_imu6886
base64            libs/microcoapy/microcoapy          network           units/_ir
ble/Blynk/BlynkLib                  libs/mlx90640     ntptime           units/_joystick
ble/Blynk/__init__                  libs/modbus/__init__                ntptime           units/_laserrx
ble/Blynk/blynkBLE                  libs/modbus/master/__init__         rtch              units/_lasertx
ble/__init__      libs/modbus/master/uModBusConst     simpleOTA         units/_lcd
ble/ble_advertising                 libs/modbus/master/uModBusFunctions sys               units/_light
ble/ble_uart      libs/modbus/master/uModBusSerial    uarray            units/_makey
ble/blynk         libs/modbus/master/uModBusTCP       ubinascii         units/_mqtt_eth
btree             libs/modbus/slave/__init__          ubluetooth        units/_ncir
builtins          libs/modbus/slave/exceptions        ucollections      units/_oled
cmath             libs/modbus/slave/functions         ucryptolib        units/_op
collections/__init__                libs/modbus/slave/redundancy_check  uctypes           units/_pahub
collections/defaultdict             libs/modbus/slave/route             uerrno            units/_pbhub
collections/deque libs/modbus/slave/rtu               uhashlib          units/_pir
comx/LoRaWAN      libs/modbus/slave/utils             uhashlib          units/_relay
comx/__init__     libs/mpu6050      uheapq            units/_relay4
comx/lte          libs/mstate       uiflow            units/_rfid
comx/nbiot        libs/numbers      uio               units/_rgb
comx/sim7600      libs/nvs          ujson             units/_rgb_multi
comx/sim7600c1    libs/paj7620u2    umqtt/__init__    units/_rotary_encoder
comx/simcom_common                  libs/pca9685      umqtt/robust      units/_servo
deviceCfg         libs/pid          umqtt/simple      units/_thermal
display           libs/qmp6988      unit              units/_tof
esp               libs/servo        units/VFunction/__init__            units/_tracker
esp32             libs/sh1107       units/VFunction/_apriltag_code      units/_tvoc
espidf            libs/sh200q       units/VFunction/_bar_code           units/_uhf_rfid
espnow            libs/sht30        units/VFunction/_color_track        units/_ultrasonic
face              libs/simcom/__init__                units/VFunction/_dm_code            units/_uwb
faces/_calc       libs/simcom/common                  units/VFunction/_face_detect        units/_v_function
faces/_encode     libs/simcom/gps   units/VFunction/_jpeg_transfer      units/_vibrator
faces/_finger     libs/simcom/gsm   units/VFunction/_line_tracker       units/_vmeter
faces/_gameboy    libs/simcom/lte   units/VFunction/_motion             units/_watering
faces/_joystick   libs/simcom/nb    units/VFunction/_qr_code            units/_weight
faces/_keyboard   libs/timeSchedule units/VFunction/_tag_reader         uos
faces/_rfid       libs/time_ex      units/VFunction/_target_track       urandom
flashbdev         libs/timezone     units/VFunction/_v2_code_detector   ure
flow/__init__     libs/urequests    units/VFunction/_v2_color_tracker   urllib/parse
flow/adaptation   libs/vl53l0x      units/VFunction/_v2_face_detector   urllib/urequest
flow/ezdata       lodepng           units/VFunction/_v2_face_recognition                  uselect
flow/flowDeinit   lvesp32           units/VFunction/_v2_lane_line_tracker                 usocket
flow/m5cloud      lvgl              units/VFunction/_v2_motion_tracker  ussl
flow/m5ucloud     m5stack           units/VFunction/_v2_object_recognition                ustruct
flow/protocol     m5stack_ui        units/VFunction/_v2_online_classifier                 utils
framebuf          m5uart            units/VFunction/_v2_shape_detector  utime
fs_driver         m5ui              units/VFunction/_v2_target_tracker  utimeq
gc                machine           units/_ID         uwebsocket
hardware/__init__ math              units/_IR_NEC     uzlib
hardware/axp192   max30100          units/_ISORS485   warnings
hardware/bm8563   menu/__init__     units/_LoRaWAN    wav/chunk
hardware/button   menu/app          units/_NBIoT      wav/wav_player
hardware/microphone                 menu/cloud        units/_RS485      wav/wave
hardware/speaker  menu/setup        units/_RTC8563    wifiCfg
hmac              menu/startup      units/_accel      wifiWebCfg
i2c_bus           menu/ucloud       units/_acsocket
imagetools        menu/wifi         units/_adc

SIM7080GのAPN設定

更新日 2011/11/13

概要

 M5Stack社のCAT-Mモジュール「SIM 7080G」を購入したのでAPN設定を行い、UI FLOWからHTTP通信できるか確認する。  結果、APN設定はできたが、UIFLOWのUnitではHTTP通信できない。  UiFLOWでCAT-M Unitが実装されていないため

試験系

SIM7080G --- USBシリアル変換 --- PC

条件

APN:iijmio

主要設定

AT+CGDCONT=1,"IP","iijmio.jp"
AT+CNCFG=1,1,"iijmio.jp","mio@iij","iij",3
AT+COPS=1,2,"44010"
AT+CGAUTH=1,3,"iij","mio@iij"
AT+SNPING4="google.com",3,16,1000
AT+CNACT=0,1

//3行目以降は不要?

所感

 CAT-M Unitが実装されるとHTTPもできるか?  とりあえずMQTTかCoAPサーバーを立てて通信してみたい。

CoAPはRFC 7252で上がっている、UDPを使ったM2M向けのプロトコルです。マイコンのような低消費電力、ROM/RAMの容量をターゲットにしています。 IoT向けプロトコル(?)〜MQTT/CoAP / 開発者向けブログ・イベント | GMO Developers

参考

https://qiita.com/kaz19610303/items/83f2b722fc1264888fab https://qiita.com/kkkrikurikun/items/de29f383c886ab39234e https://www.iijmio.jp/hdd/guide/apn.html https://homemadegarbage.com/catm04 https://m5stack.oss-cn-shenzhen.aliyuncs.com/resource/docs/datasheet/unit/sim7080g/en/SIM7070_SIM7080_SIM7090%20Series_AT%20Command%20Manual_V1.04.pdf

プロセス間通信

概要

 PythonSignal Handlerを調べているとInter thread communicationという単語が気になった。
 Inter thread communicationはスレッド間通信であり、WikiPediaを見る限りプロセス間通信 - Wikipediaと同じだ。  WikiPediaのIPC(Inter Process Communication)の一覧を示す。
 シグナルもプロセス間通信に該当する。使う場合は「非同期シグナル安全」な関数を利用する、それ以外では排他処理する必要がある。

UiFLOWのmicroWebSrvでWebAPI作成

概要

 UiFLOWのmicroPythonにてM5StickC上にWebAPIを実装し、遠隔からサーボモータをコントールする。

動作の様子

コード

from m5stack import *
from m5ui import *
from uiflow import *
from MicroWebSrv.microWebSrv import MicroWebSrv
import wifiCfg
import ubinascii
wifiCfg.autoConnect(lcdShow = False)
ip = wifiCfg.wlan_sta.ifconfig()  
label0 = M5TextBox(10, 25, ip[0], lcd.FONT_Default, 0xFFFFFF, rotate=0)

import hat
hat_servo_0 = hat.get(hat.SERVO)

@MicroWebSrv.route('/set0deg')
def handlerFuncGet(httpClient, httpResponse) :
  print("In GET-TEST HTTP set0deg")
  hat_servo_0.write_angle(0)

@MicroWebSrv.route('/set90deg')
def handlerFuncGet(httpClient, httpResponse) :
  print("In GET-TEST HTTP set90deg")
  hat_servo_0.write_angle(90)

'''
@MicroWebSrv.route('/post-test', 'POST')
def handlerFuncPost(httpClient, httpResponse) :
  print("In POST-TEST HTTP")
  hat_servo_0.write_angle(90)
'''

mws = MicroWebSrv()      # TCP port 80 and files in /flash/www
mws.Start(threaded=True) # Starts server in a new thread

def buttonA_wasPressed():
  # global params
  hat_servo_0.write_angle(0)
  pass
btnA.wasPressed(buttonA_wasPressed)

def buttonB_wasPressed():
  # global params
  hat_servo_0.write_angle(90)
  pass
btnB.wasPressed(buttonB_wasPressed)

参考

GitHub - jczic/MicroWebSrv: A micro HTTP Web server that supports WebSockets, html/python language templating and routing handlers, for MicroPython (used on Pycom modules & ESP32)

詰まったところ

  • USB接続でM5C単体の5Vピンからサーボモータの電源を取ると、電流不足のためかリセットを繰り返してしまった。
  • M5Stack社製の白い18650Cのリチウムバッテリーから電源を取ると動作したため、一先ずこれにした。
  • 同じ理由のためかM5 Atomでも動作しなかった。今度tailバッテリーを付けてみて試したい。

所感

 遠隔電源ON/OFFできない機器はこれを使うのが良い・・・?