ESP-WROOM-02 間でUDP通信

ESP-WROOM-02 を2つ使ってUDP通信する場合の覚え書きメモ

クライアント側はボタン4つ
f:id:tc96:20160914130215j:plain

サーバー側はボタンに対応するLED4つを光らせます
f:id:tc96:20160914125600j:plain

動作確認動画

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); }
  }
}