准備條件:
1、Arduino IDE
2、ESP-01S模塊
2、MQTT服務器
3、手機熱點或路由器熱點
Wi-Fi芯片 默認訂閱的主題是 “開關控制”
當你發送主題 “開關控制” 消息 “1” 時LED熄滅
其他消息時 LED都是亮的。
/* 基本的ESP8266 MQTT示例 */ #include <ESP8266WiFi.h> #include <PubSubClient.h> const char* ssid = "XXXXXX";//手機Wi-Fi熱點名 const char* password = "XXXXXX";//手機Wi-Fi熱點密碼 const char* mqtt_server = "192.168.4.1";//服務器地址 可以是域名 WiFiClient espClient; PubSubClient client(espClient); long lastMsg = 0; char msg[50]; int value = 0; int ledPin = 2; // GPIO2 of ESP8266 void setup_wifi() { delay(10); WiFi.begin(ssid, password); while (WiFi.status() != WL_CONNECTED) { delay(500); Serial.print("."); } randomSeed(micros()); } void callback(char* topic, byte* payload, unsigned int length) { Serial.print("接收消息[");Serial.print(topic);Serial.print("] "); for (int i = 0; i < length; i++) { Serial.print((char)payload[i]); } Serial.println(); if ((char)payload[0] == '1') { // 通過接收的信息 '1' 來控制開或關 digitalWrite(ledPin, HIGH); Serial.println("HIGH"); } else { digitalWrite(ledPin, LOW); Serial.println("LOW"); } } void reconnect() { String clientId = "ESP-01A-"; clientId += String(random(0xffff), HEX); if (client.connect(clientId.c_str())) { //連接成功 client.subscribe("開關控制"); client.publish("開關控制", "0"); // 連接成功發送主題和消息 } else { delay(5000); // Wait 5 seconds before retrying } } void setup() { pinMode(ledPin, OUTPUT); digitalWrite(ledPin, LOW); Serial.begin(115200); setup_wifi(); client.setServer(mqtt_server, 1883); client.setCallback(callback); } void loop() { if (!client.connected()) { reconnect(); } client.loop(); }