送信ダイバーシティ
送信ダイバーシティ
WiFiやLTE/5G等に広く利用されている送信ダイバーシティ技術を概説する。
参考論文
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
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 のソースを参考とした。
大まかに下記を行う。
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
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) で行える。 詳しい設定方法は次回調査する。
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
プロセス間通信
概要
PythonのSignal Handlerを調べているとInter thread communicationという単語が気になった。
Inter thread communicationはスレッド間通信であり、WikiPediaを見る限りプロセス間通信 - Wikipediaと同じだ。
WikiPediaのIPC(Inter Process Communication)の一覧を示す。
シグナルもプロセス間通信に該当する。使う場合は「非同期シグナル安全」な関数を利用する、それ以外では排他処理する必要がある。
UiFLOWのmicroWebSrvでWebAPI作成
概要
UiFLOWのmicroPythonにてM5StickC上にWebAPIを実装し、遠隔からサーボモータをコントールする。
動作の様子
UiFLOWでhttp getでサーボモータ動かす仕組み作ってた。これでWale On Lanの無いサーバーの遠隔電源ON/OFFする…。 pic.twitter.com/Nro2VyLjS8
— kenji (@uecken) October 7, 2021
コード
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)
参考
詰まったところ
- USB接続でM5C単体の5Vピンからサーボモータの電源を取ると、電流不足のためかリセットを繰り返してしまった。
- M5Stack社製の白い18650Cのリチウムバッテリーから電源を取ると動作したため、一先ずこれにした。
- 同じ理由のためかM5 Atomでも動作しなかった。今度tailバッテリーを付けてみて試したい。
所感
遠隔電源ON/OFFできない機器はこれを使うのが良い・・・?