ESP8266をSTM32からATコマンドで操作し、WiFiルータ経由でPCの仮想シリアルポートにデータを送り付けるプログラムを作っています。
しばしばESP8266からSEND_OKが返って来ないことがあり、この現象を起こらなくさせたいです。何かいい知恵はないでしょうか?
接続
STM32 <--UART--> ESP8266 <--WiFi(TCP/IP)--> AP <--有線LAN--> PC(仮想シリアルポート) --> Terminalアプリなど
- UART:460800baud
- AP:木造2階建ての戸建ての1階にAP、2階にESP8266。直線距離で10mくらいか?
- 仮想シリアルポート:HW Virtual Serial Port ver3.1.2
- Terminalアプリ:TeraTerm ver4.105 or 自作データ受信アプリ
動作状態
1回のデータ送信は以下の手順で行われる。
0. STM32 -> ESP8266 AT+CIPSEND=1124
0. ESP8266 -> STM32 OK >
0. STM32 -> ESP8266 [1124byteのバイナリデータ]
0. ESP8266 -> STM32 Recv 1124 bytes
50~100msの間がある(WiFiでデータ転送中と思われる)
0. ESP8266 -> STM32 SEND OK
1~5は通常、70~120msかかり、これを200ms間隔で実施する。5の応答が時間内に行われない場合は最大400ms待つ。
エラー状態
- 上記のシーケンスのうち、5の応答が400ms以内に行われずエラーになる。
- エラーは通信を開始してから数秒で発生することもあれば、10分程度かかることもある。
- TerminalアプリにTeraTerm、自作アプリのいずれを使用してもエラー発生状態は変わらない。
- Terminalアプリを使用しなくてもエラー発生状態は変わらない(ひたすら仮想シリアルポートのバッファにデータがたまる)。
- エラー発生状態はテスト時刻によらない(電子レンジが動いていると落ちるなどはないと思われる)
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。