M5StackBasicは、シリアルはSerial2しか自由に使えないのですが、M5StickCからはSerial1,2とも自由に使えるようになってました。
=>後日M5Atomもやってみます。多分同じだと思います。
=>2021/7/21追記 ESP32DevKitCでSerial1使えるピン調べました。12ピンもありました。拡張性は元祖ESP32が一番ですね。 ESP32DevkitCのシリアル1,2で使えるGPIO_PIN表作った<12ピン使える>
今までM5シリーズは全部同じかと思っていたけどどんどん改善されているようで良かったです。
12月再開した、RTK-MovingBaseシステム開発でM5Atomを5個使って無線と有線通信する構成になりました。無線はESP-NOWで実績があるのですが、有線でM5同士で通信し合うの初めてなので基礎実験しました。
=>Serial(USBType-C)+Serail1(EXTピン)+Serial2(Groveコネクタ)と全部使って実験しましたので、将来にわたって、保存版となります。
■学習の師匠は、おなじみLANGSHIP様の解説です。いつも感謝してます。
https://lang-ship.com/blog/work/m5stickc-uartserial/
初めての方はこちらのページが丁寧に解説されてますので、こちらで学習されてください。
■M5StickC2個間でSeria1-Serial2を使った実験1~4の条件
①結線
EXTピン同士はクロス結線になってます。Groveはストレートです。
これによってプログラム内のシリアル定義が違ってきます。
③実験に使ったプログラム
簡単なシリアルですが、ピン定義とSerial番号を混同してしまいそうです。
条件表を見ながらプログラムを組むと間違いにくいです。
GISTに置いてあります。
例:実験4の母艦用
Serialの宣言文が注意です。Serial(USB)です。Serial1とSerial2は任意のGPIOピンに割り付けできます。
ここでは、BYTE通信なのでSerial.write,Serial.readを使ってますが、SerialのAPI仕様にはいろいろな受信命令があります。Arduinoが基本ですので
Arduinoの命令をやってみて、動作しなかったら、ググって探す以外にないです。Arduinoの正式なシリアル解説ページは下記です。
https://www.arduino.cc/reference/en/language/functions/communication/serial/
//M5StickC_Serial1-2_JIkken4-EXT-Grove_Seial1-2_COM4.ino #include <M5StickC.h> int i; // COM5=>COM4=>COM5 LoopBackvoid setup() { M5.begin();Serial1.begin(115200, SERIAL_8N1,0,26); // RX06 TX26 EXT_IO Serial2.begin(115200, SERIAL_8N1, 33, 32);// RX32 TX33 Grove }void loop() {//COM5からGrove-Serial2受信する if (Serial2.available()) { int inByte = Serial2.read(); Serial.print(“Grove-Serial2_Receive from COM5:”); Serial.println(inByte); //EXT-Serial1からCOM5へ返信 Serial1.write(inByte); } } |
●以後
M5Atomで実験してみた、同じことを確認したらRTK MovingBaseシステムへ組み込みます。
ソフトバンク系ALESのNTRIP接続サービスを使うためには、VRS接続をしなければならないのですがMovingbaseモードを使っているとF9PからNMEAデータが出力されないので、VRSができなくなりましす。
そこで、工夫して、MovingBaseの出力データのNAV-PVTのバイナリから緯度経度データを抽出してNTRIPを担当しているM5Atomへシリアル接続して流して、GGAに加工してソフトバンクALESのNTRIPサーバーへ
流すことで、VRS接続ができるようになると思います。このやり方がよいかどうか、ALES社のご指導もいただきながら確認して2021年1月中には完成させたいと思ってます。本記事は、その一番最初の基礎実験です。