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

项目简介

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

ESP32主机代码

#define BLINKER_WIFI
#include <Blinker.h>

#include <WiFi.h>
#include <WiFiUDP.h>

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 <ESP8266WiFi.h>
#include <WiFiUdp.h>

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

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值