در این نوشتار بهتون نشون میدیم که چجوری میشه با استفاده از پروتکل MQTT دادهها رو از Arduino UNO WiFi Rev2 به دستگاههای دیگه ارسال کنین و بالعکس.
قراره تنظیماتی انجام بدیم تا به کمک اون و با استفاده از پروتکل MQTT دادهها رو از بورد آردوینو به صورت بی سیم به سایر بوردها ارسال کنیم. دستگاه فرستنده پیامی رو برای سرویس واسط (broker) منتشر میکنه و در ادامه دستگاه گیرنده میتونه به اون دسترسی داشته باشه.
دادههایی که ما قراره ارسال کنیم مقادیر تصادفیِ خروجیهای آنالوگ هستن اما به سادگی میشه با حسگر جایگزینشون کرد. در این مقاله آموزشی، از واسط test.mosquitto.org استفاده میکنیم که یک سرویس متنباز و رایگان هست.
در این پروژه از کتابخانههای ArduinoMqttClient و WiFiNINA استفاده میکنیم.
سختافزار و نرمافزارهای موردنیاز
- Arduino IDE (آنلاین یا آفلاین)
- کتابخانه ArduinoMqttClient
- کتابخانه WiFiNINA
- دو عدد بورد Arduino UNO WiFi Rev2
معرفی پروتکل MQTT
پروتکل MQTT اولین بار در سال 1378 معرفی شد؛ این پروتکل یک سیستم انتشار و اشتراک سبکه. این سیستم بیشتر مناسب دستگاههایی با پهنای باند پایین محسوب میشه؛ در اینجور مواقع میتونیم به کمک این پروتکل و از طریق اینترنت فرمانها، مقادیر حسگر و پیامهایی رو ارسال کنیم.
کارکرد این پروتکل به این شکله که یک گره (node) برای مثال، یک بورد آردوینو مجهز به ماژول بی سیم یک اطلاعاتی به واسط ارسال میکنه. واسط یک نوع سرور واسط هست که اطلاعاتی که بهش ارسال شده رو در موضوع (topic) ذخیره میکنه. موضوع معرف نوع دادههایی هست که ذخیره کرده و برای مثال میتونه به صورت«رطوبت زیرزمین» یا «دمای پذیرایی» باشه. در ادامه، یک گره دیگه از واسط میتونه در این دادهها (ثبت نام) subscribe کنه و بدین طریق دادهها از طریق اینترنت از گره A به گره B ارسال میشن.
این عمل رو میشه به روشهای مختلف و بسته به نوع واسط و تنظیماتی که استفاده میکنیم با تعداد لایههای امنیتی متفاوتی انجام بدیم. برای مثال، اگر با دادههای غیرحساس مثل دمای یک محیط خاص سروکار داریم، لازم نیست نگران باشیم کی به این دادهها دسترسی پیدا میکنه. اما گاهی اوقات هم پیش میاد که باید از دادهها، مثل سرویسهای پیامرسان شبکههای اجتماعی، محافظت کنیم.
یک روش برای محافظت از این نوع دادهها استفاده از توکن هست؛ استفاده از توکن در هنگام کار با سرویسهای مختلف اینترنت اشیاء خیلی رایجه.
برای مثال، اگر میخوایم چیزی رو برای واسط منتشر کنیم، تمامی کسانی که آدرس برای مثال، randombroker.org/randomtopic رو دارن میتونن در اون ثبت نام کنن. اما اگر به هر دو طرف یک توکن خاص اضافه کنیم، کسی نمیتونه به اون اطلاعات دسترسی پیدا کنه. برای مثال، این توکنها میتونن به صورت Z6ACuLwr5T باشن که حدس زدنش کار آسونی نیست.