📨 درس 88: MQTT: پیامرسان اشیا
دستگاهها با «موضوع»ها حرف میزنند: منتشر کن، مشترک شو و به پیامها جواب بده.
سطح: پیشرفته · زمان: حدود 22 دقیقه · مفاهیم: MQTT، بروکر، موضوع
قدمهای این درس
- MQTT چطور کار میکند؟
- قدم ۱ — مدار
- قدم ۲ — PubSubClient
- اشتباه رایج — client.loop را فراموش کردن
- چالش
نمونهای از کد این درس
// ESP32 + MQTT: publish the knob, obey "home/led". Open the «اینترنت اشیاء» tab.
#include <WiFi.h>
#include <PubSubClient.h>
const int LED = 4;
const int POT = 34;
WiFiClient espClient;
PubSubClient client(espClient);
unsigned long lastSend = 0;
void callback(char* topic, byte* payload, unsigned int length) {
String msg = "";
for (unsigned int i = 0; i < length; i++) msg += (char)payload[i];
Serial.println(String(topic) + " -> " + msg);
if (msg == "ON") digitalWrite(LED, HIGH);
if (msg == "OFF") digitalWrite(LED, LOW);
}
void reconnect() {
while (!client.connected()) {
Serial.println("Connecting to broker...");
if (client.connect("esp32-room1")) { // a unique client id
client.subscribe("home/led");
client.publish("home/status", "online");
} else {
delay(1000);
}
}
}
void setup() {
Serial.begin(115200);
pinMode(LED, OUTPUT);
WiFi.begin("MyHome", "YOUR_PASSWORD");
while (WiFi.status() != WL_CONNECTED) delay(200);
client.setServer("broker.local", 1883);
client.setCallback(callback);
}
void loop() {
if (!client.connected()) reconnect();
client.loop(); // let messages in and out
if (millis() - lastSend > 2000) {
lastSend = millis();
int percent = map(analogRead(POT), 0, 4095, 0, 100);
client.publish("home/knob", String(percent).c_str());
}
}
چرا این درس؟
دورهی تینکرکد فارسی تعاملی است: هر قدم را خودت داخل شبیهساز انجام میدهی — مدار واقعی میچینی، کد واقعی اجرا میکنی و نتیجه را همان لحظه میبینی. این درس روی درسهای قبلی ساخته شده، پس اگر تازه شروع کردهای از درس ۱ بیا!
این درس را رایگان در شبیهساز شروع کن 🎓