【L-RTK】M5Stack_Serial2接続で手間取った<シリアルは1個しか使えない>

M5StackでWIFI接続で取得したCQ出版のNTRIPサーバーからのRTCMデータをF9Pに送信するプログラム作りました。
単純な話しなので、慣れているmbedだったら10分以内に完了するのですがM5Stackでは半日かかってしまいました。

 

●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となるので注意です。

体に装着するには、未だいろいろ工夫しないとダメなので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接続で手間取った<シリアルは1個しか使えない>”

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

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

コメントを残す

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