ESP8266 实际应用

📅 2026/8/4 3:18:04 👁️ 阅读次数 📝 编程学习
ESP8266 实际应用

ESP8266 实际应用

发送部分

// 原来
sprintf(buffer, "%s%02d%02d%02d%02d%02d", "T", Temperature, Humidity, smoke, Light, soil);
printf("%s", buffer);	// 加 \r\n 表示一条指令传输完毕
sprintf(buffer, "%s%02d%02d%02d%02d%02d\r\n", "T", Temperature, Humidity, smoke, Light, soil);
printf("%s", buffer);	

接收指令

X11 = 切换模式
A11=开风扇  A22=关风扇
B11=开灯    B22=关灯
C11=开水泵  C22=关水泵
D11=开报警  D22=关报警

代码实现

image-20260505180114451

esp8266代码

#include <ESP8266WiFi.h>
#include <PubSubClient.h>const char* WIFI_SSID     = "???";
const char* WIFI_PASSWORD = "???????????";
const char* MQTT_SERVER   = "???????";
const int   MQTT_PORT     = 1883;
const char* MQTT_CLIENTID = "?????";
const char* MQTT_SUB_TOP  = "test/chat1";   // 订阅(下发指令)
const char* MQTT_PUB_TOP  = "test/chat2";   // 发布(上传数据)WiFiClient espClient;
PubSubClient client(espClient);// MQTT收到消息 → 转发给单片机
void callback(char* topic, byte* payload, unsigned int length) {for (int i = 0; i < length; i++) {Serial.write((char)payload[i]);}Serial.write('\r');Serial.write('\n');
}void reconnect() {while (!client.connected()) {if (client.connect(MQTT_CLIENTID)) {client.subscribe(MQTT_SUB_TOP);} else {delay(5000);}}
}void setup() {Serial.begin(115200);       // 与单片机同波特率WiFi.begin(WIFI_SSID, WIFI_PASSWORD);while (WiFi.status() != WL_CONNECTED) delay(500);client.setServer(MQTT_SERVER, MQTT_PORT);client.setCallback(callback);
}void loop() {if (WiFi.status() != WL_CONNECTED) {WiFi.reconnect();delay(3000);return;}if (!client.connected()) reconnect();client.loop();// 单片机发来数据 → 上传 MQTTif (Serial.available()) {String data = Serial.readStringUntil('\n');if (data.length() > 3) {client.publish(MQTT_PUB_TOP, data.c_str());}}
}
单片机 ESP8266
3.3V 3.3V
GND GND
TX RX
RX TX

image-20260505180413125