【L-RTK】M5Stack_Serial2接続で手間取った<DefaultではSerial2しか使えない>

表題jpgファイル
M5StackでWIFI接続で取得したCQ出版のNTRIP casterからのRTCMデータをGNSSチップF9Pにシリアル送信するプログラム作りましたがSerial1が動かなくて手間取りました。M5Stackは、Serial2しかデフォルトでもってませんでした。それを知るのに、
半日かかってしまいました。
私はシリアルが2個以上ついているマイコンしか経験がなくて、M5Stackがシリアル1個でがっかりしました。
要するに、M5Stackは、Defaultでは
Serial2しか使えないということです。
●どうしてもSerial1とSerial2を使いたい場合
【Serial1は、他のGPIOに切り替えれば使えるようになります】
デフォルト以外で使うのでどこかの機能をつぶしてしまう弊害があります。(M5Stackは多機能なため)
ご自分で使う機能かどうか確認して使ってみてください。Core2で使えそうなピンは8ピン存在します。
①Core2の場合はGPIO19とGPIO27なら弊害なさそうです
Serial1.begin(115200, SERIAL_8N1,19, 27);//RX19,TX27 で動きます。
サンプルPgm core2用です。Basicでは27が空いてないので別のピンをさがしてください。
https://gist.github.com/dj1711572002/5ca7d7a53062fa6e000336eb96340b40

②Basicの場合は、GPIO2とGPIO5なら弊害なさそうです。
Serial1.begin(115200, SERIAL_8N1,2, 5);//RX2,TX5 で動きます。
サンプルPgm Basic用です。
https://gist.github.com/dj1711572002/c21b81b7fe416df9bafb9b3d405604d5
●M5Stack Serial接続表 (Basic,Core2,ESP32DevkitC)
下記Excelファイルは、Core2,Basic,EPS32の使えるシリアル表です。
ご自分のメモ用にお使いください
Excelファイル:M5Stacks-ESP32_Mbus_Serial1_PINS
Basic jpgファイル                                         Core2jpgファイル
   

EPS32DEvkitC jpg  迷ったら元祖ESP32のGPIOを確認します


※ESP32DEvKitCの詳細記事はこちら
参考にさせていただいているサイトLangShip様M5Stack Core2のGPIO調査 | Lang-ship

結局 自由度を求めていくとM5Stackでは不足するのでESP32DevkitCがあれば便利です
自由度は元祖ESP32が最も良くて、M5Stackは、ESP32に各種デバイスを付加してケーシングしたシステムですので、自由に使うと付加したデバイスを減らすか場合によっては、使えないことがあるという理屈です。M5のコンセプトはRapid Prototypingなので想定された用途内で迅速に試作できることが売りのシステムです。
=>ESP32(M5Stack)では、Serial1が存在しているのですがFlashMemoryのGPIOにDefaultで割り付けられています。そのため、私を含めて多くのユーザーはSerial1はどう使えるのか不明でした。
M5社も詳しい説明してないし。元祖Espressif社の仕様書もIO_MUXの表記がややこしくて難解です。
※その後ESP32を使う機会があったのでシリアルをまとめて調査しました。
M5CPUのオリジナルESP32DevkitCのシリアルが使えるピンを調べました(12ピン使えます)詳細記事
それを基に、M5StackCore2のMbusでのシリアルが使えるピンも調べてみました。(8ピン使えます)

※2021/7/21 あれもこれもやりたい場合、元祖ESP32なら、自由にSerial1,2のピンアサイン選択できます。Serial1,2接続まとめ表を作りました。Excel保存版です。
ESP32DevkitCのシリアル1,2で使えるGPIO_PIN表作った<12ピン使える>

※どうしてもM5Stackでシリアルを複数使いたい場合
①Qiitaでソフトウェアシリアルを使うやり方を公開されてます。ソフトウェアシリアルのデータ落ちの信頼性を実使用するプログラムで実装評価してから使われたほうがいいです。ハードウェアシリアルだと4σ以下のデータ落ちの信頼性があります。
M5StackではSoftwareSerialを使おう

②不便を覚悟なら、USBシリアルをやめてSerial1として使う手段もありますが、デバッグ作業が非常に面倒な作業になります。(昔のマイコンプログラム作業を思い出す)

●M5Stack複数シリアルを使う場合の注意
Arduinoだとハードシリアルは1個しかないので悩まずのソフトシリアルになるのですが、ESP32ベースのM5Stackは、3個シリアルがついています。
しかし、自由に使えるのは、1個しかありませんでした。これを知るのに
2時間くらい浪費しました。ドキュメンテーションがきちんと整備されてないM5Stackの悪さがもろでてきました。これでは、メジャーにはなれません。知らないで終われば、M5Stackは使えないと捨ててしまうところでした。
参考にさせていただいた記事は複数あります。
QIITAの記事:
https://qiita.com/zasshyu6/items/ce6afd3efe71a60ac15c

M5Stackのシリアル1はない:https://boiledorange73.hatenablog.com/entry/2018/11/08/181752

上記記事を理解して備忘録残しておきます。
①M5STACKのシリアル接続の備忘録

CPU
名称
Pgm
名称
GPIO名称  コメント ArduinoIDEでの定義
UART0 Serial0 RX:GPIO01
TX:GPIO03
USBシリアルで使われているので、
USBシリアルを使わない場合は使える
Serial.begin(baurate)
UART1 Serial1 内部SDフラッシュに接続されていて使えないので指定しないこと
UART2 Serial2 RX:GPIO16
TX:GPIO17
唯一自由に使えるシリアルポート Serial2.begin(baurate,SERIAL_8N1,16,17)
config条件とGPIO番号を付け加える

これで結線します。

※Xbeeコネクタの場合は、XbeeのTXはF9PのRXとなります。XbeeのRXがF9PのTXとなるので注意です。

※私の使い方  ーTPOに合わせてCPUを使いこなすー
M5StackではMBUSの制限があって拡張性が劣るので、シリアルポート用途では使いません。M5Stackは、無線通信で、データ収集して、データ表示,ログに使ってます。スマホより小型でプログラムが簡単で、綺麗な画面表示ができるメリットが気に入ってます。下記LINKをご覧いただければM5StickC,M5Atomのほうが拡張性が優れていることが明白です。M5Atom千円ですので、あれこれ迷う前に発注してしまったほうが時間に無駄ないです。
私は、M5Atom lite16個,M5StickC6個,M5StackBasci1個,M5StackCore2 1個体制で電子工作してます。しかし、高速SPIデバイス接続の場合はM5シリーズでは不具合が発生するので、ARMの信頼性あるCPU STM32のNucleoシリーズで対応してます。私は、ESP32は、シビアなデバイスの制御では使ってません。
M5StickCならSeria1,Serial2実験 
M5Atom liteの全ピンUART実験しました。

2021年1月25日追記
しばらくぶりでM5StackのSDカード使っていたら、WEBサーバーへデータをアップロードしてファイル保存する方法のプログラム見つけたので試してみたら結構速くて使えました。M5系からデータをPCへ渡すのにWEBサーバー保管はPCからでもスマホからでもアクセスの汎用性があるので将来性があると思います。まずは、M5StackでWEBサーバーのアップロードする基礎実験して速度を測定してみました。

【M5】M5StackからWebサーバーへ測定データを送信して保管した<115200bps付近の速度出る>

※2020年12月追記
M5StickCでは、Serial1とSrial2も自由に使える仕様になっていることを確認いたしました。M5Stackの出番が減ってきてます。今一番使っているのはM5Atom liteでESP-NOWとシリアル接続です。参考記事保存版作りました。
カテゴリーはM5_ESP32です。

【M5】M5Stick2個間でSerial1-Serial2通信実験<全シリアル網羅>

 

※2020年12月19日追記 この1年半で、M5シリーズStack1個+StickC5個+Atomlite5個で合計11個所有となりました。
シリアル接続とESP-NOWを組み合わる使い方です。最新の接続例をRTK2021カテゴリーに掲載しました。図が判り易いと思います。
F9P RTK始めて1年経過して2シーズン目となりました。SimpleRTK2B heading Kitをもう1セット購入して、F9P4個
体制となりました。スキーの両足でheading測定をするためです。アンテナ2個をスキーの前後のとりつけて、BOXを体にとりつけて、合計アンテナ4個、BOX2個のシステムとなるのでコンパクト化が大きな課題となります。1月からスキー場でフィールドテストを繰り返して両足MovingBase測定でよいデータと動画がとれるかトライしていく予定です。新システムにマイコンは、M5Atomを4個M5Stack1個を使いたいと構想してます。NTRIP接続Wifi用に1個、MovingBase無線出力用に1個で1BOXに2個、合計4個に2BOXから発信されるMovingBaseデータをまとめて受信ログするためのM5Stack1個でマイクロSDにログします。
無線規格はESP-NOWを使いますが、BlueTooth、Xbeeよりエラー率が一桁少なく安定した無線規格です。今回、フィールドで使うのは初めてですが、短距離なので、大丈夫だと思います。接続作業の備忘録です。

【RTK2021】F9P出力にM5ATOM lite をシリアル接続して無線通信<ESP-NOW安定してる>

 

体に装着するには、未だいろいろ工夫しないとダメなので12月いっぱいかかりそうです

➁シリアル2の動作確認プログラム
 シリアル2動作確認のみのプログラムです。USBに接続したTeratermでキーボードから入力した文字をM5.stackとSerial2用のTeratermに表示します。

#include <M5Stack.h>

#define BUFFER_SIZE 256

#define LCDHIGH 240
#define LCDWIDTH 320

void setup() {

// initialize the M5Stack object
M5.begin();

//serial Setup
//serial = GPIO 1,3 USB to UART
//serial1 = GPIO 28,29 connect to SD card reader
//serial2 = GPIO 16,17 Extern I/O pin

//serial default setting,8 data bit,No parity,1 stop bit.
Serial.begin(115200);
Serial2.begin(115200,SERIAL_8N1,16,17);//*******(baudrate,config,RX,TX)*******

// Lcd display setup
M5.Lcd.fillScreen(BLACK);
M5.Lcd.setCursor(0,LCDWIDTH / 3);
M5.Lcd.setTextColor(WHITE);ll

M5.Lcd.setTextSize(3);
M5.Lcd.printf(“Start M5stack!!”);
delay(5000);
M5.Lcd.fillScreen(BLACK);
M5.Lcd.setCursor(0,0);
M5.Lcd.setTextColor(WHITE);
M5.Lcd.setTextSize(1);
}

void errorEnd(){
M5.Lcd.fillScreen(BLACK);
M5.Lcd.setCursor(0,0);
M5.Lcd.setTextColor(WHITE);
M5.Lcd.setTextSize(5);
M5.Lcd.printf(“Buffer over flow!”);
for(;;);
}

void loop() {
unsigned char readBuffer[BUFFER_SIZE];
int serialLength;
boolean ba,bb,bc;
boolean ba_1,bb_1,bc_1;
serialLength = Serial.available();
if(serialLength > BUFFER_SIZE -1)errorEnd();
if(serialLength > 0){
Serial.readBytes(readBuffer,serialLength);
readBuffer[serialLength] = ‘\0’;
M5.Lcd.printf(“%s\n\r”,readBuffer);
Serial2.printf(“%s\n\r”,readBuffer);//*******add*******
}

}

●移動局 NTRIPサーバー受信用プログラムにSERIAL2を追加して動作させました。
左がUSBから出力されているNMEA GPGGAとGPRMCの2個のセンテンスを出力します。
右がSerial2へは、M5StackからのRTCM3受信データが入てきます。

●以後
 これで移動機がcm精度で動作するかFIELDで確認しないとわかりませんのでやってみます。

●M5シリーズ(M5Stack,M5StickC,M5ATOM,SPISFFS,ESP-NOW)の記事全部はここにあります

 

●2020年お盆休み
M5シリーズでSPIFFSの使い方を学習しました。

【M5】M5StickCでSPIFFS動作実験<書き込み遅い16byte/msec>

 

 

2 thoughts on “【L-RTK】M5Stack_Serial2接続で手間取った<DefaultではSerial2しか使えない>”

  1. すでにご存知かもしれませんが、Serial1も、Serial1.begin( 0, SERIAL_8N1, 26, 13);の形式でピンを設定すれば、自由に使えます。

    1. 小林様コメントありがとうございます。USBを使わない場合は使えますが、多くの使い方がUSBシリアルでモニターデバッグなどしながらなので、1個しか使えないという表現をしてます。ご指導宜しくお願いいたします。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です