0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

お題は不問!Qiita Engineer Festa 2024で記事投稿!
Qiita Engineer Festa20242024年7月17日まで開催中!

M5Stamp C3U MateのBLE通信とHWCDCシリアル通信時のタイムアウト対策

Last updated at Posted at 2024-07-16

概要

 M5Stamp C3U MATE2台を使いBLE通信にてPC側からの要求に対してSever側のデータを
 Client側で1秒毎に受信する プログラムをC#で作成した際、受信エラー(タイムアウト)
 となることが多々 あり調べてみました。

<接続概略>
 PCソフト(C#)⇔シリアル通信(HWCDC)⇔Client側M5Stamp⇔BLE通信⇔Sever側M5Stamp

調べたこと

 1.PCからの要求はSeverに到達していて問題は無さそう。
 2.Severからの送信はClientまでは到達してる。
 3.ClientからHWCDCを通してのPCへの送信で問題がありそう。
 4.ClientのUART⇒外部UART⇔USB変換を使うと問題は発生しない。
 5.USBシリアル変換IC搭載のM5Stamp C3 MATEでは問題が発生しない。

M5Stamp C3UではUSBシリアル変換ICを搭載しておらずMCUに直接USBが接続
されています。試しにUSBシリアル変換ICを搭載したM5Stamp C3 MATEをClient側に
使用したところ問題無く送受信できることが分かりました。
また「HWCDC.cpp」ドライバには色々と問題がありそうで 修正版を試したりしましたが
解決できませんでした。

解決策

https://github.com/espressif/arduino-esp32/issues/7779
こちの記事を見ていてHWCDCを通しての送信タイムアウトエラーが関係していそう
でしたので送信タイムアウト時間を設定、バッファも少し大きめに設定、
更に、送信完了待ちを設定したところ PC側での 受信エラーが無くなりました。
タイムアウト時間については送信~受信までで通常50mSec前後、時々最大で160mSec程度
を要していたため余裕を持った300mSecに設定しました。
プログラムとしては1秒毎にデータが取得できれば問題無いためこれでOKとします。
安定した通信を行うためにはUSBシリアル変換IC搭載機種、若しくは外部UART-USB変換を
選定すべきかとも思います。
ちなみにM5StampS3もUSBシリアル変換ICが搭載されておらず同様の問題が発生しますが、
こちらも同じ設定を行うことで安定した送受信が確認できました。

この問題解決まで2カ月ほどかかりました・・。やれやれ。(^^♪

// HWCDCシリアル設定
 Serial.setTxTimeoutMs(300);  //追加
 Serial.setRxBufferSize(100); //追加
 Serial.setTxBufferSize(100); //追加
 Serial.begin(115200);

// BLE受信⇒シリアル送信
 if(receivedflg==true){
    Serial.print(rx_Str);
    Serial.flush(); //追加 送信完了待ち 
    receivedflg = false;
 }
 

参考サイト

 

0
0
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
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?