项目简介
- ESP32作为主机, 接收点灯科技App下发的控制命令
- ESP8266-01S 作为从机, 使用UDP接收ESP32主机发送的命令
- 使用点灯科技进行命令下发至ESP32主机
- 正常情况下没有问题, 但是因为使用了UDP协议, 所以无法保证从机是否收到消息
![](https://img-blog.csdnimg.cn/7cdd6199469b43dd874797183b4a80fa.png)
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);
}
}
}
}