📡 پروژه‌ی اینترنت اشیا با MQTT روی ESP32

✍️ تیم ووکوی فارسی ·

وب‌سرورهایی که تا اینجا ساختیم فقط داخل همان شبکه‌ی وای‌فای کار می‌کنند و هر وسیله باید آدرس IP برد را بداند. در پروژه‌های واقعی اینترنت اشیا، ده‌ها وسیله باید با هم حرف بزنند. راه‌حل محبوب، MQTT است. در این آموزش ESP32 با MQTT عدد یک ولوم را می‌فرستد و از روی داشبورد فرمان روشن و خاموش LED می‌گیرد. این پروژه را، مثل نمونه‌هایی که در ووکوی (Wokwi) دیده‌ای، در شبیه‌ساز ESP32 فارسی امتحان می‌کنیم که یک داشبورد MQTT داخلی هم دارد.

MQTT چطور کار می‌کند؟

MQTT مثل یک گروه پیام‌رسان است. وسط کار یک «کارگزار» یا بروکر هست. هر وسیله پیامش را با یک «موضوع» یا تاپیک به بروکر می‌دهد (publish) و هر کس آن تاپیک را دنبال کرده باشد (subscribe)، پیام را می‌گیرد. هیچ‌کس لازم نیست آدرس بقیه را بداند.

تاپیکچه کسی می‌فرستدمحتوا
home/knobESP32درصد ولوم، هر ثانیه
home/ledداشبوردON یا OFF
home/statusESP32online بعد از وصل شدن

قطعه‌ها و سیم‌کشی

کد کامل

#include <WiFi.h>
#include <PubSubClient.h>

const char* ssid = "Wokwi-GUEST";      // simulator network
const char* password = "";             // no password
const char* broker = "broker.local";   // the simulator's built-in broker

const int LED = 4;
const int KNOB = 34;

WiFiClient espClient;
PubSubClient client(espClient);
unsigned long lastSend = 0;

// Runs when a message arrives on a topic we subscribed to.
void callback(char* topic, byte* payload, unsigned int length) {
  String message = "";
  for (unsigned int i = 0; i < length; i++) message += (char)payload[i];
  Serial.println("message on " + String(topic) + ": " + message);
  if (message == "ON") digitalWrite(LED, HIGH);
  if (message == "OFF") digitalWrite(LED, LOW);
}

void reconnect() {
  while (!client.connected()) {
    Serial.println("connecting to MQTT...");
    String id = "esp32-" + String((uint32_t)ESP.getEfuseMac(), HEX);
    if (client.connect(id.c_str())) {
      client.subscribe("home/led");
      client.publish("home/status", "online");
    } else {
      delay(1000);
    }
  }
}

void setup() {
  Serial.begin(115200);
  pinMode(LED, OUTPUT);
  WiFi.begin(ssid, password);
  while (WiFi.status() != WL_CONNECTED) delay(200);
  Serial.println("Wi-Fi connected");
  client.setServer(broker, 1883);
  client.setCallback(callback);
}

void loop() {
  if (!client.connected()) reconnect();
  client.loop();                       // let PubSubClient do its work
  if (millis() - lastSend > 1000) {
    lastSend = millis();
    int percent = map(analogRead(KNOB), 0, 4095, 0, 100);
    client.publish("home/knob", String(percent).c_str());
  }
}

توضیح بخش‌های مهم

امتحانش کن

مثال آماده در تینکرکد فارسی: اینترنت اشیاء با MQTT (ESP32). وقتی اجرایش کنی، زبانه‌ی «اینترنت اشیاء» زیر کد، پیام‌های هر تاپیک را نشان می‌دهد و دکمه‌هایی برای فرستادن ON و OFF دارد. نسخه‌ی درسی‌اش پیام‌رسان MQTT است و توضیح قدم‌به‌قدم در درس «MQTT: پیام‌رسان اشیا». خواندن مثال‌ها رایگان است و اجرای ESP32 با اشتراک Plus. یک مقاله‌ی مفهومی‌تر هم در وبلاگ تینکرکد فارسی هست.

اشکال‌های رایج

حالا می‌توانی چند حسگر و چراغ را با MQTT به هم وصل کنی، یا همه را در یک صفحه جمع کنی: داشبورد خانه‌ی هوشمند روی گوشی. پروژه‌های بیشتر در وای‌فای و اینترنت اشیا.

پروژه‌ی MQTT ESP32 را باز کن 📡

مقاله‌های مرتبط

🏠

داشبورد خانه‌ی هوشمند روی گوشی با ESP32

📌

پین اوت ESP32 به زبان ساده: جدول کامل پایه‌های DevKit سی‌پایه و این‌که کدام‌ها امن‌اند

🛠️

نصب ESP32 در آردوینو IDE: از آدرس Board Manager تا درایور CP2102 و CH340 و اولین آپلود

📟

راه‌اندازی LCD I2C با میکروپایتون روی رزبری پای پیکو (درایور i2c_lcd)

همه‌ی آموزش‌های ESP32 و اینترنت اشیا ← · همه‌ی مقاله‌ها