M5stamp pico serial.print()出力されない問題
M5stamp picoの機能確認をしていたのですが、setup
ルーチンのSerial.print()
が出力されない問題に悩んでいました。シリアルの速度などの設定問題であれば、loop
ルーチンも出力されないので解決しやすいのですが。
setup
内は出力されないけれどもloop
内では出力されるという問題の解決です。
問題をコードで整理する
以下のコードをmakeして動かすと出力は以下のとおりです。
1
2
3
4
5
6
7
8
9
10
11
12
13
| #include <M5Atom.h>
void setup() {
M5.begin();
Serial.begin(115200);
Serial.print("Setup routine\n");
}
void loop() {
Serial.print("Loop routine\n");
delay(1000);
}
|
1
2
3
4
5
6
7
8
| --- Available filters and text transformations: colorize, debug, default, direct, esp32_exception_decoder, hexlify, log2file, nocontrol, printable, send_on_enter, time
--- More details at https://bit.ly/pio-monitor-filters
--- Miniterm on COM5 115200,8,N,1 ---
--- Quit: Ctrl+C | Menu: Ctrl+T | Help: Ctrl+T followed by Ctrl+H ---
Loop routine
Loop routine
Loop routine
Loop routine
|
setup
ルーチン内のSerial.print()
が出力されません。
Syntax的にも問題なく、バイナリーもちゃんと作成され書き込みも問題ありません。
解決方法は、ちょっとした呪文でした
コードに以下の一行を追加すると解決しました。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
| #include <M5Atom.h>
void setup() {
M5.begin();
Serial.begin(115200);
delay(8000); # <----- この行を追加
Serial.print("Setup routine\n");
}
void loop() {
Serial.print("Loop routine\n");
delay(1000);
}
|
出力も期待通りです。setup
内のSerial.print()
が出力されています。
1
2
3
4
5
6
7
8
| --- Available filters and text transformations: colorize, debug, default, direct, esp32_exception_decoder, hexlify, log2file, nocontrol, printable, send_on_enter, time
--- More details at https://bit.ly/pio-monitor-filters
--- Miniterm on COM5 115200,8,N,1 ---
--- Quit: Ctrl+C | Menu: Ctrl+T | Help: Ctrl+T followed by Ctrl+H ---
Setup routine
Loop routine
Loop routine
Loop routine
|
考察
これまでM5stack,M5stickC plusでも似たようなコードを動かしましたが、問題なく出力されていました。M5stamp pico固有の問題なのか、このロット固有の問題なのかはわかりません。
PCのシリアルポートとの通信確立に待ち時間の呪文が必要なようです。
delay()
の長さは、1000msという説がありましたが、現在の環境では80000ms以上必要なようです。リセットのタイミングで出力されない場合もあるので、さらなる呪文が必要なのかもしれません。
先人のM5stampお試しblog等を眺めてたところ長いdelay()
を挿入している方を見つけて、試してみた結果です。なぜこの呪文が必要かなのかはわかりません。Serial.print()
に戻り値があれば、もう少し調べられますがないようです。
まとめ
M5stamp picoのSerial.print()
表示されない問題は解決しました。なぜこの呪文が必要なのかはわかりません。