5
7

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

M5Stackシリーズでシリアル通信(送信・受信)

Last updated at Posted at 2021-07-04

M5Stackとシリアル通信

M5StackはESP32というWiFiもBluetoothも使える優れモノチップが搭載されている為、「通信はネット・リモート経由で!Bluetoothで!」といったところに走ってしまいがちですが、結局バッテリーが小さい等の都合で母体に繋げて動作させる場合は、**「USB(給電+シリアル通信)」**って解もあっていいと思います。

といっても、M5Stackでシリアル通信って当たり前すぎて逆に詳しく書かれていないのかなと感じまして、こちらに残しておきたいと思います。

シリアル通信確認方法

  1. ツール>シリアルモニタでシリアルモニタが開きます。(予め通信ポートは設定しておく)
    スクリーンショット 2021-07-05 000921.png

  2. ウィンドウの上部に文字列を入力し、EnterでPCから送信(M5Stackは受信)、下部にM5Stackから送信されたデータが受信されます。
    スクリーンショット 2021-07-05 001616.png

通信方法

では、Arduinoでは良く書かれている手法(のちょっとアレンジを加えたやり方)をご紹介。
その前にArduinoと異なるポイントとして

  • Serial.begin();は書かない。(既にライブラリ側で開いているのでエラーになります)
  • Stringオブジェクトのreplace()関数等は戻り値ではなくそのものの値が反映される。

注意点でした。

送信

送信は簡単です。

  // text = 
  Serial.println(text);

text に文字列をセットします。

受信

受信は少し工夫しています。待ち受けないといけないのでloop内に実装します。

loop()内に実装
  if (Serial.available()) {
    String text = Serial.readStringUntil(0x0a);
    if (text.length() > 0 && text.startsWith("*")) {
      text.trim();
      text.replace("*","");
      // = text
    }
  }  

改行(LF)のキャラクターまで受信を待つ仕組みになっています。
もう一つのやり方(readString)だと、1行につき文字列が送られるのを1秒待つことになります。
1秒の数字は変えられますが、じゃあどこまで減らせるかと考えると、終了文字列を決めてその文字列がやってきたら即次の処理に移せた方が理想かと思われます。

"*"の文字列で始まったときの処理はloop関数内にて待機させる際に、重複して読み込まれてしまう可能性があります。重複2回目のデータは不完全な文字列となるので、リードエラーを防ぐ為に実施しています。

という事で、結果シリアル通信でPCから送信する(M5Stack側で受信される)データは

*blahblahblah<改行>

という感じになります。結果(textの値)はblahblahblahがセットされますが、上記の例ではもちろんデータ内に*の文字列が使えなくなります。
使いたい場合はプログラムの文字列を別なものに変えると良いでしょう。

実際に通信してみて

  • 1度に通信できる文字列は詳しく計測していませんが、150~160文字ぐらいの様です。
  • 上記の手法だと、待ち受け時間が短縮される為、実装処理に時間をかけなければ、高速にデータやり取りができると思います。
5
7
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
7

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?