IDEを複数起動スケッチ例AsyncUDPServerAsyncUDPClientAsyncUDPMulticastServerまとめ概要UDPまわりの通信を調べてみました。ESP32の通信について主に有線と無線があります。有線通信SPI一番高速ですが、3線以上の通信線が必要な方法です。有線LANもSPI接続の物があります。高速通信なので、ちょっとシビアです。ESP32は親にあたるMaster側のみで利用することをおすすめします。Slaveで利用した場合には、最後の4バイトが受信できないハードウエア側のバグがあります。I2C比較的低速ですが、複数のデバイスとかんたんに通信することができます。ESP32は親にあたるMaster側のみで利用することをおすすめします。Slaveでもハードウエア的には利用可能ですが、ESP-IDF環境以外で利用している例を見たことがありません。Slaveの動作検証をしてみたいと思っています。1wire通信線が1本しかないのに通信できるプロトコルです。温度計などで使われていますが、ちょっと特殊なデバイス用です。その他パラレル通信とかいろいろありますが、独自プロトコルで汎用性はありませんので割愛します。Profile)で、シリアル通信をかんたんに無線化できます。非常にかんたんですが、テキストを送信するので冗長なプロトコルです。接続の待受をする方がSlaveで、利用する側がMasterになります。一般的にはESP32がSlave側で使っていることが多いですが、他のSPPに接続するMaster側でも利用できますので、ESP32同士をSPPで接続もできるはずです。M5StickCでGROVEのアナログ出力をBluetoothSerialで飛ばす上記が待ち受けを行うSlaveを利用した例です。M5StickC(ESP32)からBluetooth小型ポータブルレシートプリンタ「PAPERANG」を制御するこちらは外部のSPPデバイスに接続する側のMasterの例です。EnergyBLEと書かれている場合には、こっちのほうで本来のBluetoothの使い方に近いですが、かなり難しいです。こちらも待ち受ける側がSlaveで、接続する側がMasterです。M5StickC(ESP32)でダイソーのBluetoothシャッターを操作(1.0.4対応版)上記が外部のBLEデバイスを操作するMaster側の例です。keyboardを実装してプレゼン用リモコンを作るこちらが、パソコンからの接続を待ち受けてキーボードとして振る舞うSlaveの例です。Wi-FiESP32はBluetoothの他に2.4G帯のWi-Fiにも対応しています。その1ESP32を開発したEspressif社独自の通信方式です。相手のMacアドレス宛に通信をかんたんに行うことができます。普通のWi-Fiと異なりアクセスポイントに接続する必要はなく、各端末同士が直接通信を行います。プロトコル上は親子関係になっておらず、すべてのノードが同じ機能ですが、役割で束ねる場所にある端末をSlave、センサーデータなどを集める端末をControllerとよびます。TCP/IP一般的な通信で利用されるプロトコルです。Wi-FiルーターなどのWi-Fiアクセスポイントなどに接続するか、softAPを利用して自分がWi-Fiアクセスポイントになる必要があります。M5StickCのRTCをブラウザからセットする上記がsoftAPを利用してWi-Fiアクセスポイントになりつつ、ブラウザからの接続を待ち受けている例です。TCP/IPの場合には待ち受けている方をServer、接続する方をClientと呼ぶことが多いです。M5StickCのRTCをNTPサーバーからセットする上記がWi-Fiアクセスポイントに接続し、外部NTPサーバーから現在時刻を利用する例です。UDPTCP/IPと似たプロトコルですが、より単純な機能を提供しています。UDPではデータを送る機能のみを提供しており、相手に到達したのかがわかりません。TCP/IPはUDPにデータ到達性の確認や、送信失敗した場合の再送処理などを追加したものになります。そのためUDPはリアルタイム通信などには向いていますが、本当にデータが送信成功したかはわかりません。確認したい場合には、受取側が送信側に受信完了通知などを自分で送信する必要があります。UDPもTCP/IPと同じように、待ち受けている方をServer、接続する方をClientとよびます。通信をする場合には、主に送信先の選び方により3種類あります。ユニキャスト相手を指定して送信する方法。送信する前に相手を特定する情報が必要になります。ESP-NOWの場合にはMACアドレスで固定ですが、TCP/IPやUDPの場合にはIPアドレスになります。IPアドレスはWi-Fiアクセスポイントなどにより変わる可能性があるので注意が必要です。ブロードキャスト近くにいる端末全員にデータを送信する方法です。ESP-NOWの場合には端末同士のWi-Fi電波が届く範囲になります。TCP/IPやUDPの場合には環境により異なりますが、同じWi-Fiアクセスポイントに接続している端末が多くの場合受信します。ブロードキャストで近くにいる端末に通信を行い、相手を特定したところでユニキャストに移行するなどの方法もあります。ブロードキャストのみで大量通信を行うと、受信側に不要なデータが飛んでくる可能性があるので注意しましょう。マルチキャストマルチキャストはちょっとわかりにくい通信方式で、送信したマルチキャストのIPアドレスで待ち受けている端末に送信を行います。マルチキャストは特定のマルチキャストIPアドレスを事前に共有しておき、そのIPアドレスに送信すると、受信設定をしていた端末全員に対して送信がされます。ブロードキャストは同じネットワークの人全員に届いてしまいますが、マルチキャストでは必要な複数の端末のみに一斉送信をすることが可能です。{}今回はWindowsのモバイルホットスポットという機能を利用して、パソコンをWi-Fiアクセスポイントにしました。接続している端末のIPアドレスとMACアドレスがわかるので、非常に便利です。ネットワーク名と、ネットワークパスワードを変更し、実験で利用する端末で一度実行しておきます。一度実行することで、次回から指定無しでWi-Fi接続することができますので、便利な機能です。通信のテストをする場合には、最低2台の端末が必要になります。IDEも2つ以上起動したほうが便利です。通常に起動すると、2台別々のポートに接続できないので、上記の方法を利用して通常起動と、preferences.txtを切り替えた2台目用などを準備しておくとかなり便利です。UDPのスケッチ例のServer側のスケッチです。"***********";上の方にあった上記2行を消してあります。password);また、もともとはWiFi.begin()の引数を渡してありましたが、無指定に変更して、最後に接続したときのSSIDとKEYを利用するようにしました。処理的にはWi-Fiアクセスポイントに接続し、udp.listen(1234)にて1234ポートで待ち受けを行っています。ポート番号を変更することで、複数の用途で待ち受けをすることができます。packetを引数としたコールバック関数を定義して、UDPパケットを受信したら呼び出しています。loop()の中でudp.broadcast()を送信しているので、自分が送信した通信も大量に受信しています。1234);}こちらもServerと同じくSSIDとKEYの指定を消しています。Server側を起動して、シリアルコンソールに出力されたIPアドレスを調べます。{そして、Client側の上記の行を、調べたIPアドレスに書き換えます。IPアドレスは.(ドット)区切りの文字列ですが、関数の引数は,(カンマ)区切りなので気をつけてください。here?上記がServer側のシリアルコンソールの抜粋です。192.168.137.104がServerで、192.168.137.167がClient側です。ServerからServer、ClientからServerへのユニキャストと、ServerとClientからのブロードキャストが確認できます。here?");}こちらもServerと同じくSSIDとKEYの指定を消しています。{上記で239.1.2.3というマルチキャストIPアドレスで、待ち受けをしています。マルチキャストで利用できるIPアドレスは複数あるので、同じIPを複数の端末で待ち受けすることで、特定の端末グループにだけ一斉送信することが可能です。here?");送信は上記でしています。このサンプルはudp.listenMulticast()でマルチキャストしたudpに送信していますので、自分もマルチキャストを受信しています。1234)と、マルチキャスト宛に送信すると、自分は受信しなくて、複数の端末に一斉送信するような使い方ができると思います。まとめマルチキャストはWebカメラの画像を特定マルチキャストIPアドレス宛に送信しておき、受信したい端末がそのマルチキャストIPアドレスを受信すれば、何台が受信しても送信側の負荷は上がらない場合などに利用されます。通常はあまり使わないので、基本はユニキャストですが、最初のマッチングだけブロードキャストを少し使うなどの方法がが好ましいと思います。リアルタイム性の高いデータを高速通信する場合にはUDPが適していますが、それ以外の利用法であればTCP/IPを利用したほうが、通信が安定しています。かんたんなのがBluetoothSerialのSPPですが、1台のパソコンから複数台のESP32にSPP接続などをすると、ラグが大きくなるので注意してください。ESP-NOWはWi-Fiアクセスポイントが必要ないのでお手軽ですが、UDPと同じく安定性が保証されていないので気をつけてください。BLEは鬼門なので、極力使わないほうが幸せになれます。AM試してないんですが、ESP32はPHY(LAN8720)をつなぐとEthernetが使えるようです。PMesp-atファームウェアでマルチキャストを試しましたが、ユニキャストしか受信しないようです。コメントをキャンセルメールアドレスが公開されることはありません。date*管理者承認後にページに追加されます。公開されたくない相談はその旨本文に記載するかTwitterなどでDM投げてください。スパム対策として、日本語が含まれない投稿は無視されますのでご注意ください。その1ESP32のGPIO入力について関連記事はこちらです。関連記事はこちらです。Themegraphy。