📡 ماموریت ۹۳: انتشار با MQTT
PubSubClient با WiFiClient؛ setServer("broker.local", 1883)، وصل شو و هر ثانیه client.publish("home/knob", ...) کن. client.loop را فراموش نکن.
سطح: چالشی ⭐⭐⭐ · مود: آردوینو — با کد
هدفها
- ☐ یه برد (آردوینو یا ESP32) روی صحنه باشه
- ☐ یه ESP32 روی صحنه باشه
- ☐ کلاینت MQTT
- ☐ بروکر تنظیم بشه
- ☐ پیام منتشر بشه
- ☐ شبیهسازی در حال اجرا
قطعههای لازم
- ESP32 DevKit
- پتانسیومتر
💡 گیر کردی؟ داخل شبیهساز راهنما را ببین، و اگر باز هم نشد دکمهی «برام حلش کن» مدار را برایت میچیند تا ببینی چطور کار میکند.
جواب کامل
اول خودت امتحان کن! بعد جواب را ببین 👀
سیمکشی
- ESP32 DevKit (VCC33) ⟷ پتانسیومتر (VCC)
- ESP32 DevKit (D34) ⟷ پتانسیومتر (WIPER)
- پتانسیومتر (GND) ⟷ ESP32 DevKit (GND1)
کد
// ESP32 MQTT: publish the knob (0..100 %) every second
#include <WiFi.h>
#include <PubSubClient.h>
WiFiClient espClient;
PubSubClient client(espClient);
const int POT = 34;
unsigned long lastSend = 0;
void setup() {
Serial.begin(115200);
WiFi.begin("MyHome", "12345678");
while (WiFi.status() != WL_CONNECTED) delay(200);
client.setServer("broker.local", 1883);
}
void loop() {
while (!client.connected()) {
Serial.println("connecting to MQTT...");
if (!client.connect("esp32-knob")) delay(1000);
}
client.loop();
if (millis() - lastSend > 1000) {
lastSend = millis();
int percent = map(analogRead(POT), 0, 4095, 0, 100);
client.publish("home/knob", String(percent).c_str());
Serial.println(percent);
}
}
ماموریتهای مشابه
⚡
ماموریت ۹۲: مقدار زنده با WebSocket
💾
ماموریت ۹۴: ذخیرهی تنظیمات در حافظهی فلش
🧾
ماموریت ۹۱: API با JSON
🎯
ماموریت ۹۵: کنترل تناسبی سروو
📚 برای یاد گرفتن پایهها سری به دورهی آموزش آردوینو بزن · 🎯 همهی ماموریتها