📨 درس 88: MQTT: پیام‌رسان اشیا

دستگاه‌ها با «موضوع»ها حرف می‌زنند: منتشر کن، مشترک شو و به پیام‌ها جواب بده.

سطح: پیشرفته · زمان: حدود 22 دقیقه · مفاهیم: MQTT، بروکر، موضوع

قدم‌های این درس

  1. MQTT چطور کار می‌کند؟
  2. قدم ۱ — مدار
  3. قدم ۲ — PubSubClient
  4. اشتباه رایج — client.loop را فراموش کردن
  5. چالش

نمونه‌ای از کد این درس

// 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());
  }
}

چرا این درس؟

دوره‌ی تینکرکد فارسی تعاملی است: هر قدم را خودت داخل شبیه‌ساز انجام می‌دهی — مدار واقعی می‌چینی، کد واقعی اجرا می‌کنی و نتیجه را همان لحظه می‌بینی. این درس روی درس‌های قبلی ساخته شده، پس اگر تازه شروع کرده‌ای از درس ۱ بیا!

این درس را رایگان در شبیه‌ساز شروع کن 🎓

درس‌های دیگر دوره

⚡

درس 87: به‌روزرسانی زنده با WebSocket

💾

درس 89: ذخیره‌ی فایل روی حافظه‌ی ESP32