การ Publish ข้อมูล (ส่งข้อมูล):
void publishData() {
float temperature = readTemperature();
String payload = String(temperature);
client.publish("home/temperature", payload.c_str());
Serial.println("Published: " + payload);
}
ฟังก์ชันนี้จะอ่านค่าอุณหภูมิและส่งไปยัง Topic "home/temperature" ผ่าน Broker
อุปกรณ์ ESP32 ที่ทำหน้าที่รับข้อมูลจาก MQTT Broker
การ Subscribe ข้อมูล (รับข้อมูล):
void callback(char* topic, byte* payload, unsigned int length) {
String message = "";
for (int i = 0; i < length; i++) {
message += (char)payload[i];
}
Serial.println("Received: " + message);
// ประมวลผลข้อมูลที่ได้รับ
}
void setup() {
client.setCallback(callback);
client.subscribe("home/command");
}
ฟังก์ชัน callback จะถูกเรียกทุกครั้งที่มีข้อมูลใหม่เข้ามาใน Topic ที่ Subscribe ไว้
🔄 ตัวอย่างการใช้งานจริง
สถานการณ์: ควบคุมไฟ LED ผ่าน MQTT
- 📱 แอปมือถือ Publish คำสั่ง "ON" หรือ "OFF" ไปยัง Topic "home/led"
- 📡 ESP32 Subscribe Topic "home/led" และรอรับคำสั่ง
- 💡 เมื่อได้รับคำสั่ง ESP32 จะเปิดหรือปิด LED ตามคำสั่ง
- 📊 ESP32 Publish สถานะกลับไปยัง Topic "home/led/status"
⚙️ Quality of Service (QoS) Levels
-
QoS 0: ส่งครั้งเดียว ไม่รับประกัน (เร็วที่สุด)
-
QoS 1: ส่งอย่างน้อย 1 ครั้ง รับประกันว่าถึง (แนะนำ)
-
QoS 2: ส่งครั้งเดียวแน่นอน (ช้าที่สุดแต่แม่นยำ)