📡 MQTT با ESP32: داشبورد اینترنت اشیاء به زبان ساده
در وبسرور ESP32 گوشی مستقیم به برد وصل میشد. ولی در خانهی هوشمند واقعی دهها دستگاه داریم و همه باید با هم حرف بزنند. راه رایجش MQTT است: یک «پستخانه» وسط (به آن بروکر میگویند) که همه پیامهایشان را به آن میدهند و از آن میگیرند.
سه کلمه که باید بدانی
- موضوع (topic): اسم صندوقپستی، مثل
home/ledیاhome/temp. با/دستهبندی میشود. - انتشار (publish): فرستادن یک پیام روی یک موضوع، مثلاً عدد دما روی
home/temp. - اشتراک (subscribe): «هر پیامی روی این موضوع آمد به من هم بده».
home/+یعنی هر موضوعِ یکسطحی زیر home وhome/#یعنی همهی زیرشاخهها.
کد ESP32 با PubSubClient
#include <WiFi.h>
#include <PubSubClient.h>
WiFiClient espClient;
PubSubClient client(espClient);
void callback(char* topic, byte* payload, unsigned int length) {
String msg = "";
for (unsigned int i = 0; i < length; i++) msg += (char)payload[i];
if (msg == "ON") digitalWrite(4, HIGH);
if (msg == "OFF") digitalWrite(4, LOW);
}
void setup() {
pinMode(4, OUTPUT);
WiFi.begin("MyHome", "12345678");
while (WiFi.status() != WL_CONNECTED) delay(200);
client.setServer("broker.local", 1883);
client.setCallback(callback);
}
void loop() {
if (!client.connected()) {
if (client.connect("esp32-kid")) client.subscribe("home/led");
}
client.loop(); // hands new messages to callback()
client.publish("home/knob", String(analogRead(34)).c_str());
delay(1000);
}
نکتههایی که بچهها روی برد واقعی گیر میکنند
client.loop()را فراموش نکن. بدون آن پیامهای رسیده هیچوقت بهcallbackنمیرسند. شبیهساز هم دقیقاً همینطور رفتار میکند.- اول وایفای، بعد MQTT. تا وایفای وصل نشده،
connectشکست میخورد. - payload رشته نیست. یک آرایهی بایت با طول
lengthاست؛ برای همین با حلقه بهStringتبدیلش میکنیم. - اسم کلاینت یکتا باشد. دو برد با یک اسم، مدام همدیگر را از بروکر بیرون میکنند.
در شبیهساز
پروژهی آمادهی اینترنت اشیاء با MQTT را باز کن و اجرا کن، بعد تب «اینترنت اشیاء» زیر کد را بزن. آخرین عدد هر موضوع را به شکل کارت میبینی، برای موضوعهایی که برد به آنها گوش میدهد دکمهی ON و OFF داری، و همهی پیامها در یک فهرست میآیند. بروکر داخل خود شبیهساز است و به اینترنت واقعی وصل نمیشود؛ وقتی برد واقعی خریدی، فقط آدرس setServer را به یک بروکر واقعی عوض کن.
مقالههای دیگر
🤖
آردوینو چیست؟ راهنمای کامل برای شروع از صفر
⚡
بهترین شبیهساز مدار آنلاین فارسی — چرا شبیهساز، و چرا تینکرکد فارسی؟
💡