5.2 KiB
کنترل چراغ خواب خود از طریق اینترنت - Wio Terminal
در این بخش از درس، شما به دستورات ارسال شده از یک MQTT broker به Wio Terminal خود اشتراک خواهید داد.
اشتراک در دستورات
مرحله بعدی اشتراک در دستورات ارسال شده از MQTT broker و پاسخ دادن به آنها است.
وظیفه
اشتراک در دستورات.
-
پروژه چراغ خواب را در VS Code باز کنید.
-
کد زیر را به انتهای فایل
config.h
اضافه کنید تا نام موضوع برای دستورات تعریف شود:const string SERVER_COMMAND_TOPIC = ID + "/commands";
SERVER_COMMAND_TOPIC
موضوعی است که دستگاه برای دریافت دستورات LED به آن اشتراک خواهد داد. -
خط زیر را به انتهای تابع
reconnectMQTTClient
اضافه کنید تا هنگام اتصال مجدد MQTT client به موضوع دستورات اشتراک داده شود:client.subscribe(SERVER_COMMAND_TOPIC.c_str());
-
کد زیر را زیر تابع
reconnectMQTTClient
اضافه کنید.void clientCallback(char *topic, uint8_t *payload, unsigned int length) { char buff[length + 1]; for (int i = 0; i < length; i++) { buff[i] = (char)payload[i]; } buff[length] = '\0'; Serial.print("Message received:"); Serial.println(buff); DynamicJsonDocument doc(1024); deserializeJson(doc, buff); JsonObject obj = doc.as<JsonObject>(); bool led_on = obj["led_on"]; if (led_on) digitalWrite(D0, HIGH); else digitalWrite(D0, LOW); }
این تابع به عنوان callback توسط MQTT client فراخوانی میشود زمانی که پیامی از سرور دریافت میکند.
پیام به صورت آرایهای از اعداد صحیح ۸ بیتی بدون علامت دریافت میشود، بنابراین باید به آرایهای از کاراکترها تبدیل شود تا به عنوان متن پردازش شود.
پیام شامل یک سند JSON است و با استفاده از کتابخانه ArduinoJson رمزگشایی میشود. ویژگی
led_on
از سند JSON خوانده میشود و بسته به مقدار آن LED روشن یا خاموش میشود. -
کد زیر را به تابع
createMQTTClient
اضافه کنید:client.setCallback(clientCallback);
این کد
clientCallback
را به عنوان callback تنظیم میکند تا زمانی که پیامی از MQTT broker دریافت شود فراخوانی شود.💁 هندلر
clientCallback
برای تمام موضوعاتی که به آنها اشتراک داده شده فراخوانی میشود. اگر بعداً کدی بنویسید که به چندین موضوع گوش دهد، میتوانید موضوعی که پیام به آن ارسال شده را از پارامترtopic
که به تابع callback ارسال میشود دریافت کنید. -
کد را به Wio Terminal خود آپلود کنید و از Serial Monitor برای مشاهده سطح نور ارسال شده به MQTT broker استفاده کنید.
-
سطح نور تشخیص داده شده توسط دستگاه فیزیکی یا مجازی خود را تنظیم کنید. خواهید دید که پیامها دریافت میشوند و دستورات در ترمینال ارسال میشوند. همچنین خواهید دید که LED بسته به سطح نور روشن و خاموش میشود.
💁 میتوانید این کد را در پوشه code-commands/wio-terminal پیدا کنید.
😀 شما با موفقیت دستگاه خود را برای پاسخ دادن به دستورات از یک MQTT broker کدنویسی کردید.
سلب مسئولیت:
این سند با استفاده از سرویس ترجمه هوش مصنوعی Co-op Translator ترجمه شده است. در حالی که ما تلاش میکنیم دقت را حفظ کنیم، لطفاً توجه داشته باشید که ترجمههای خودکار ممکن است شامل خطاها یا نادرستیها باشند. سند اصلی به زبان اصلی آن باید به عنوان منبع معتبر در نظر گرفته شود. برای اطلاعات حساس، توصیه میشود از ترجمه حرفهای انسانی استفاده کنید. ما مسئولیتی در قبال سوء تفاهمها یا تفسیرهای نادرست ناشی از استفاده از این ترجمه نداریم.