ESP32/ESP01S-使用WIFI进行UDP通信, 控制继电器开合

项目简介

  • ESP32作为主机, 接收点灯科技App下发的控制命令
  • ESP8266-01S 作为从机, 使用UDP接收ESP32主机发送的命令
  • 使用点灯科技进行命令下发至ESP32主机
  • 正常情况下没有问题, 但是因为使用了UDP协议, 所以无法保证从机是否收到消息

ESP32/ESP01S-使用WIFI进行UDP通信, 控制继电器开合_第1张图片

ESP32主机代码

#define BLINKER_WIFI
#include 

#include 
#include 

char auth[] = "bf5798db6279";
char ssid[] = "209";
char pswd[] = "xinxi209";
volatile boolean sw1_st;
const char AP_NameChar[] = "ESP-AP";
const char WiFiAPPSK[] = "ESP-AP123456";
IPAddress ESP8266ip1(192, 168, 4, 2);
IPAddress ESP8266ip2(192, 168, 4, 3);
IPAddress ESP8266ip(192, 168, 4, 255);
unsigned int localPort = 8080;
unsigned int remotePort = 8080;
char incomingPacket[537];
char A;
WiFiUDP Udp;
BlinkerButton Button1("switch1");

void Button1_callback(const String &state)
{
    if (state == "on")
    {
        sw1_st = true;
        Button1.text("灯开了");
        Button1.print("on");
    }
    else if (state == "off")
    {
        sw1_st = false;
        Button1.text("灯关了");
        Button1.print("off");
    }
    Udp.beginPacket("192.168.4.2", remotePort);
    Udp.print(sw1_st);
    Udp.endPacket();
}

void setup()
{
    Serial.begin(9600);
    Serial.println();
    Serial.println("Started ap. Local ip: " + WiFi.softAPIP().toString());
    sw1_st = false;
    Blinker.begin(auth, ssid, pswd);
    WiFi.mode(WIFI_AP);
    WiFi.softAP(AP_NameChar, WiFiAPPSK);
    Udp.begin(localPort);
    Button1.attach(Button1_callback);
}

void loop()
{
    Blinker.run();
}

ESP8266-01S从机代码 

#define STASSID "ESP-AP"
#define STAPSK "ESP-AP123456"
#include 
#include 

unsigned int localPort = 8080;
unsigned int remotePort = 8080;
char incomingPacket[537];
char A;
WiFiUDP Udp;

void setup() {
    Serial.begin(9600);
    WiFi.mode(WIFI_STA);
    WiFi.begin(STASSID, STAPSK);
    while (WiFi.status() != WL_CONNECTED) {
        Serial.print(".");
        delay(500);
    }
    pinMode(0, OUTPUT);
    // 看继电器, 如果低激活就设高, 反之设低
    digitalWrite(0, HIGH);
    Serial.println();
    Serial.print("Connected! IP address: ");
    Serial.println(WiFi.localIP());
    Serial.printf("UDP server on port  ", localPort);
    Udp.begin(localPort);
}

void loop() {
    int packetSize = Udp.parsePacket();
    if (packetSize) {
        Serial.printf("Received %d bytes from %s, port %d\n", packetSize, Udp.remoteIP().toString().c_str(), Udp.remotePort());
        int len = Udp.read(incomingPacket, 536);
        if (len > 0) {
            incomingPacket[len] = 0;
            Serial.printf("UDP packet contents: %s\n", incomingPacket);
            String COM = incomingPacket;
            // 看继电器, 如果低激活就设高
            if (COM == "0") {
                digitalWrite(0, HIGH);
            } else if(COM == "1"){
                digitalWrite(0, LOW);
            }
        }
    }
}

你可能感兴趣的:(ESP32,ESP8266,udp,单片机,网络协议)