NodeMCU เป็น Subscribe เชื่อมกับ MQTT Broker (Raspberry Pi)

จากบทความที่แล้วได้แสดงวิธีการใช้ NodeMCU เป็น Publish ในการติดต่อกับ MQTT Broker กันมาแล้ว คราวนี้เราจะมากล่าวถึงการทำในฝั่ง Subscribe กันบ้าง

Code Program

#include <ESP8266WiFi.h>
#include <PubSubClient.h>
// Update these with values suitable for your network.
const char* ssid = “YOUR AP SSID”;
const char* password = “YOUR AP PASSWORD”;
// Config MQTT Server
#define mqtt_server “m12.cloudmqtt.com”
#define mqtt_port YOURMQTTPORT
#define mqtt_user “TEST”
#define mqtt_password “12345”
#define LED_PIN 2 
WiFiClient espClient;
PubSubClient client(espClient);
void setup() { 
pinMode(LED_PIN, OUTPUT);
 Serial.begin(115200); 
delay(10);
 Serial.println(); 
Serial.print(“Connecting to “);
Serial.println(ssid);
 WiFi.begin(ssid, password); 
 while (WiFi.status() != WL_CONNECTED) { 
delay(500);
Serial.print(“.”);
}
 Serial.println(“”); 
Serial.println(“WiFi connected”);
Serial.println(“IP address: “);
Serial.println(WiFi.localIP());
 client.setServer(mqtt_server, mqtt_port); 
client.setCallback(callback);
}
void loop() { 
if (!client.connected()) {
Serial.print(“Attempting MQTT connection…”);
if (client.connect(“ESP8266Client”, mqtt_user, mqtt_password)) {
Serial.println(“connected”);
client.subscribe(“/ESP/LED”);
} else {
Serial.print(“failed, rc=”);
Serial.print(client.state());
Serial.println(“ try again in 5 seconds”);
delay(5000);
return;
}
}
 client.loop();
}
void callback(char* topic, byte* payload, unsigned int length) {
Serial.print(“Message arrived [“);
Serial.print(topic);
Serial.print(“] “);
String msg = “”;
int i=0;
while (i<length) msg += (char)payload[i++];
if (msg == “GET”) {
client.publish(“/ESP/LED”, (digitalRead(LED_PIN) ? “LEDON” : “LEDOFF”));
Serial.println(“Send !”);
return;
}
digitalWrite(LED_PIN, (msg == “LEDON” ? HIGH : LOW));
Serial.println(msg);
}

ตัวอย่าง Message ที่ส่ง

[Topic] = [Value]

  • bedroom/temperature = 30
  • bedroom/switch/light = 0
  • kitchen/temperature = 32
  • kitchen/switch/light = 0
  • livingroom/temperature = 31
  • livingroom/humidity = 60
  • livingroom/switch/light = 1

เพิ่มเติม

ดูได้ที่นี่