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=关报警
代码实现

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();
// 单片机发来数据 → 上传 MQTT
if (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 |

浙公网安备 33010602011771号