ESP-WROOM-02 間でUDP通信
ESP-WROOM-02 を2つ使ってUDP通信する場合の覚え書きメモ
クライアント側はボタン4つ
サーバー側はボタンに対応するLED4つを光らせます
動作確認動画
ESP-WROOM-02 間でUDP通信
以下ソースコード
クライアント側
#include <ESP8266WiFi.h> #include <WiFiClient.h> #include <WiFiUDP.h> // UDP settings WiFiUDP UDP; // WiFi settings IPAddress HOSTIP (192, 168, 4, 1); IPAddress myIP(192, 168, 4, 2); const char *ssid = "*"; const char *password = "*"; const int btn1 = 4; const int btn2 = 5; const int btn3 = 12; const int btn4 = 2; const int ledPin = 16; const int wifiStatusPin = 13; void connectWiFi() { WiFi.begin(ssid, password); WiFi.config(myIP, WiFi.gatewayIP(), WiFi.subnetMask()); Serial.println("start_connect"); while (WiFi.status() != WL_CONNECTED) { delay(500); Serial.print("."); } Serial.println("CONNECTED!"); digitalWrite(wifiStatusPin, HIGH); } void setup() { Serial.begin(115200); pinMode(ledPin, OUTPUT); pinMode(wifiStatusPin, OUTPUT); pinMode(btn1, INPUT_PULLUP); pinMode(btn2, INPUT_PULLUP); pinMode(btn3, INPUT_PULLUP); pinMode(btn4, INPUT_PULLUP); delay(500); digitalWrite(ledPin, HIGH); Serial.println("-"); Serial.println("start"); WiFi.mode(WIFI_STA);//重要! UDP.begin(893); connectWiFi(); } void sendWiFi(char byteData[]) { if (UDP.beginPacket(HOSTIP, 893)) { UDP.write(byteData); UDP.endPacket(); Serial.println(byteData); } } void loop() { char b[4]; b[0] = (digitalRead(btn1)) ? '1' : '0'; b[1] = (digitalRead(btn2)) ? '1' : '0'; b[2] = (digitalRead(btn3)) ? '1' : '0'; b[3] = (digitalRead(btn4)) ? '1' : '0'; Serial.println(b); sendWiFi(b); delay(17); end_loop(); } void end_loop(){ if (WiFi.status() != WL_CONNECTED) { WiFi.disconnect(); digitalWrite(wifiStatusPin, LOW); Serial.println("disconnect!"); connectWiFi(); } }
サーバー側
#include <ESP8266WiFi.h> #include <WiFiClient.h> #include <WiFiUDP.h> // Variable setting char WiFibuff[4]; // UDP setting WiFiUDP UDP; // WiFi setting IPAddress myIP(192, 168, 4, 1); const char *ssid = "*"; const char *password = "*"; //led const int ledPin = 16; const int led1 = 4; const int led2 = 5; const int led3 = 12; const int led4 = 2; void setup() { Serial.begin(115200); pinMode(ledPin, OUTPUT); pinMode(led1, OUTPUT); pinMode(led2, OUTPUT); pinMode(led3, OUTPUT); pinMode(led4, OUTPUT); WiFi.mode(WIFI_AP); WiFi.softAP(ssid, password); WiFi.config(myIP, WiFi.gatewayIP(), WiFi.subnetMask()); UDP.begin(893); digitalWrite(ledPin, HIGH); Serial.println("UDP.begin!"); } void rcvWiFi() { UDP.read(WiFibuff, 4); Serial.print(WiFibuff); UDP.flush(); } void loop() { if (UDP.parsePacket() > 0) { rcvWiFi(); if(WiFibuff[0] == '0') { digitalWrite(led1, HIGH); } else { digitalWrite(led1, LOW); } if(WiFibuff[1] == '0') { digitalWrite(led2, HIGH); } else { digitalWrite(led2, LOW); } if(WiFibuff[2] == '0') { digitalWrite(led3, HIGH); } else { digitalWrite(led3, LOW); } if(WiFibuff[3] == '0') { digitalWrite(led4, HIGH); } else { digitalWrite(led4, LOW); } } }