ESP32を使ったSTM32のTCP通信(WiFi)受信編

無線モジュールESP32を使って Nucleo(STM32) を無線 (WiFi) 化し、TCPサーバーを構成します クライアント側 であるPCやスマホのターミナルアプリからマイコン側に文字列のコマンドコードを送ってリモートコントロールするアプリを紹介します。 無線モジュールESP32については「ESP32でNucleo(STM32)を簡単にWiFi対応に」で詳細を解説しています。

めかのとろ

TCPサーバーを構成してPC、スマホなどクライアントのターミナルアプリで接続するところまでは 「ESP32を使ったSTM32のTCP通信(WiFi)送信編」と 共通です。

めかのとろ

クライアント側からのコマンドコードによりマイコンをコントロールするには文字コードの受信処理およびコードに応じて処理させたい内容を追加すればよいのです。

めかのとろ

ESP32 とターミナルアプリを接続して ”depfields”の9文字を入力してEnterキを押すと、改行コードを含めて11文字を送信したことになります。 ターミナルをローカルエコーに設定していると入力した文字が現れます。

めかのとろ

TCPサーバー側ではクライアント側からの文字を受信すると"+IPD,0,11:depfields"と表示されます。+IPDは受信データであることを示し、コネクションIDが0に文字列と改行コードを含んだ合計11文字を受信したことを意味しています 。応答文字列には改行コードCR+LFが含まれています。

文字列受信
めかのとろ

上述のPCのターミナルソフトからの操作を Nucleo(STM32) に置き換えたESP32とマイコン間での通信をする場合のアプリを紹介します。あらかじめ、登録しておいたコード"ABC"と受信コードが一致・不一致で処理を分けるアプリです。 受信コードを含む文字列は終端が分かるように入力コードには"@"を最後に含めています。

データ受信の流れ
めかのとろ

PCやスマホなどのTCP通信ターミナルでESP32でWiFi化したNucleo(STM32)のTCPサーバー側に接続した状態で"ABC@"を入力します。ESP32では文字列を受信すると”+IPD,0,6:ABC@" をUART通信で文字列の応答として返すのでSTM32側でコード部分"ABC"を取り出せばよいのです。 

受信処理
めかのとろ

受信コードが取得できればあとはシリアル通信と同様にアプリ側で処理したい内容を作成すればよいわけです。
例えば、コードを"ON"や"OFF"などに登録しておき、これらと一致した場合にそれぞれ処理を分ければソフトウェアスイッチとしてリモートコントロールできるようになります。
 

データ受信処理
コラム

ESP32との文字列受信は一度分かってしまえば簡単なようですが、多少クセはあります。これらを理解していると柔軟に対処できるようになりますので色々発展させてみてください。一部記載しておきます。
■ ATコマンドを送る度にある程度の待ち時間が必要なこと
■ 応答文字列のまえに改行コードCR+LFが含まれること(このために終端文字にCRを指定できない)
■ ATコマンドを送ると必ずなんらかの応答があること
受信に割り込みを使用する場合にATコマンドを使用するとESP32からの応答が割り込みとして反応してしまうため注意が必要です。