ESP32同士によるwifiUDP通信
こんにちは。
久しぶりの投稿となりました。
今回はESP32を2つ使って、wifiUDP通信でデータを送ってみました。
自分の備忘録的な意味合いのほうが大きいため、あまり参考にはならないかもしれませんが、よければご覧ください。
今回使ったESP32です。
どちらも秋月電子で売ってるdevkitですが、写真右側のは新しいほうのESP32-WROOM-32Dですね。まぁ何が違うのかさっぱりわからないんですが...
左側のほうをアクセスポイント(サーバ)とし、右側のほう(クライアント)でアクセスするようにしました。
今回参考にさせて頂いたサイト様は以下の2つです。
サーバ側
【ESP32】ESP32とスマホを接続してWiFiUDP通信する方法 - ソースに絡まるエスカルゴ
クライアント側
ESP32でUDP通信やってみた(ESP32インストール手順解説あり) - Qiita
まず、サーバ側(文字データ受け取り側)です。
#include <WiFi.h> #include <WiFiUdp.h> const char ssid[] = "ESP32_wifi"; // SSID const char pass[] = "esp32pass"; // password const int localPort = 10000; // ポート番号 const IPAddress ip(192, 168, 4, 1); // IPアドレス(ゲートウェイも兼ねる) const IPAddress subnet(255, 255, 255, 0); // サブネットマスク WiFiUDP udp; void setup() { Serial.begin(115200); WiFi.softAP(ssid, pass); // SSIDとパスの設定 delay(100); // 追記:このdelayを入れないと失敗する場合がある WiFi.softAPConfig(ip, ip, subnet); // IPアドレス、ゲートウェイ、サブネットマスクの設定 Serial.print("AP IP address: "); IPAddress myIP = WiFi.softAPIP(); Serial.println(myIP); Serial.println("Starting UDP"); udp.begin(localPort); // UDP通信の開始(引数はポート番号) Serial.print("Local port: "); Serial.println(localPort); } void loop() { if (udp.parsePacket()) { char i = udp.read(); //ceramie追記 askiiから文字列へ Serial.println(i); // UDP通信で来た値を表示 } }
ほとんどそのままですが、そのままでは10進数のASKIIコードで表示されてしまうため、char型変数に一回代入してます。
次に、クライアント側(文字データ送信側)です。
#include <WiFi.h> #include <WiFiUdp.h> const char ssid[] = "ESP32_wifi"; // SSID const char pass[] = "esp32pass"; // password static WiFiUDP wifiUdp; static const char *kRemoteIpadr = "192.168.4.1"; //送信先のIPアドレス static const int kRmoteUdpPort = 10000; //送信先のポート static void WiFi_setup() { static const int kLocalPort = 5000; //自身のポート WiFi.begin(ssid, pass); while( WiFi.status() != WL_CONNECTED) { delay(500); } wifiUdp.begin(kLocalPort); } static void Serial_setup() { Serial.begin(115200); Serial.println(""); // to separate line } void setup() { Serial_setup(); WiFi_setup(); } void loop() { wifiUdp.beginPacket(kRemoteIpadr, kRmoteUdpPort); wifiUdp.write('a'); //10進数のaskiiで送信される wifiUdp.endPacket(); delay(3000); }
こちらはほとんど変えていません。
SSIDとパスワードとIPアドレスとポートを入力しただけです。
一応、この2つのコードをそのまま書き込めば動くはずです。
クライアント側のloopの中にあるwifiUdp.write('a');でaを送信してます。
現状では1文字しか送れてません。
サーバ側をシリアルモニタで確認して、aが3秒経過ごとに送られてきたら成功です。
ESP32はサーバ側→クライアント側の順でリセットして使ってください。
それでは!