ارتباط MQTT با Esp8266 با استفاده از Arduino

در این پروژه ، ما از یک بروکر رایگان و محبوب Eclipse MQTT استفاده می کنیم و نحوه اتصال دستگاه IoT (در پروژه ی ما ، ماژول NodeMCU) به بروکر MQTT و انتقال داده ها بین بروکر MQTT و NodeMCU را یاد می گیریم.

MQTT

پروتکل MQTT چیست؟

 

قبل از ادامه کار ، بهتر است دید روشنی در مورد پروتکل MQTT داشته باشیم. این یک پروتکل پیام سبک است که از روش انتشار/اشتراک استفاده می کند و پیام ها را بین چندین دستگاه ترجمه می کند. با استفاده از پروتکل MQTT ، ما همچنین می توانیم داده ها را ارسال یا دریافت کنیم . این پروتکل نسبت به پروتکل های مشابه مانند HTTP سریعتر است. به غیر از این ، مزایای بسیاری نسبت به پروتکل های دیگر دارد مانند حجم بسیار کم آن ، بنابراین حافظه اضافی مصرف نمی کند علاوه بر این ، دارای یک پروتکل امنیتی قوی نیز می باشد.

MQTT چگونه کار می کند؟

برای درک عملکرد پروتکل MQTT ، باید سه چیز را درک کنیم.

کلاینت MQTT:

کلاینت MQTT هر دستگاهی (می تواند یک میکروکنترلر یا سرور باشد) است که عملکردهای MQTT را اجرا می کند و با یک سرور مرکزی که به عنوان “بروکر” شناخته می شود ارتباط برقرار می کند. بروکر ارتباط داده ها را بین کلاینت متصل انجام می دهد.

PUBLISHER MQTT:

هنگامی که کلاینت می خواهد اطلاعاتی را ارسال کند ، کلاینت به عنوان “نشردهنده یاPublisher ” شناخته می شود. نشر دهنده اطلاعات مربوط به یک موضوع خاص را منتشر می کند. “topic” مسیری است که در آن می توانیم پیامها را منتشر یا مشترک کنیم. سپس بروکر اطلاعات منتشر شده توسط کاربر را برای کلاینت ارسال می کند.

SubscriberMQTT:

Subscriber MQTT موضوعات بروکر MQTT را که پیام های آن توسط بروکر ارسال شده را می خواند.

بروکر Eclipse Mosquitto:

Eclipse Mosquitto یک بروکر منبع باز MQTT است که سبک است و برای استفاده در دستگاه iot جهت ارتباط مناسب است. پروتکل MQTT یک روش سبک برای انتقال اطلاعات با استفاده از مدل انتشار/اشتراک ایجاد می کند.

راه اندازی بروکر Eclipse Mosquitto:

برای برقراری ارتباط با بروکر ، ابتدا باید آن را تنظیم کنیم. در این پروژه ، یک برنامه Android برای انتشار و اشتراک اطلاعات با Broker استفاده می کنیم.برای راه اندازی مراحل زیر را طی می کنیم:
مرحله 1:

در این پروژه ، از برنامه ای به نام ” client MQTT” استفاده می کنیم که شبیه تصویر زیر است.

 

MQTT-Client

گام 2:

روی علامت “+” کلیک می کنیم تا یک بروکر جدید ایجاد کنیم. وقتی روی دکمه کلیک می شود ، یک صفحه جدید مطابق شکل زیر ظاهر می شود.

Eclipse-Mosquitto-Broker

 

مرحله 3:

پس از آن ، اطلاعات بروکر باید در قسمت مورد نیاز پر شود. ابتدا بر روی گزینه “Enabled” که در برنامه نشان داده شده است کلیک می کنیم. در این پروژه ، از بروکرEclipse MQTT استفاده می شود ،فیلدها را به صورت زیر پر می کنیم:

 نام دلخواه :nick name

host: mqtt.eclipse.org

port: 1883

 شناسه دلخواه:client id

فیلدهای دیگر ضروری نیستند و می توان آنها را خالی گذاشت. پس از اتمام ، آنرا ذخیره می کنیم.

Eclipse-Mosquitto-Broker-Setup

 

فرآیند راه اندازی برنامه اندروید به پایان رسید و اکنون به سمت سخت افزار کارها می رویم.

المان های مورد نیاز:

NodeMCU
LED
Breadboard
Connecting wires
Programming cable

دیاگرام Eclipse MQTT Test Circuit :

Eclipse MQTT Test -Circuit

کد آردوینو ESP8266 برای برقراری ارتباط با بروکر MQTT:

اگر برای اولین بار کد را در NodeMCU بارگذاری می کنید ، ابتدا باید Arduino IDE را راه اندازی کنید. برای انجام این کار ، فقط دستورالعمل ساده زیر را دنبال کنید.

ابتدا Arduino IDE را باز کرده و سپس به مسیر File> Preferences> Settings بروید.

Setting-up-Arduino-IDE

 

در مرحله بعد ، URL زیر را کپی کرده و در قسمت “URL Board Board Additional” قرار دهید و روی “Ok” کلیک کنید.

https://arduino.esp8266.com/stable/package_esp8266com_index.json

Board-Manager-URLدر مرحله بعد ، به Tools> Board> Boards Manager بروید. در این پنجره ESP8266 را در کادر جستجو کنید. سپس آخرین نسخه را انتخاب کرده و روی install کلیک کنید.

Arduino-IDE-Board-Manager

در نهایت ، پس از اتمام نصب به مسیر tools<boards بروید و NodeMCU 1.0(ESP-12E Module) را انتخاب کنید. اکنون می توانید NodeMCU را با Arduino IDE برنامه ریزی کنید.

در مرحله اول ، کتابخانه ی”ESP8266WiFi.h” را برای استفاده از ESP8266 و کتابخانه ی”PubSubClient.h” را برای MQTT قرار داده ایم.

سپس برای wifi نام کاربری و گذرواژه انتخاب می کنیم.

ما برای این پروژه از سرور Eclipse MQTT استفاده کرده ایم ، به همین دلیل آدرس سرور به عنوان “mqtt.eclipse.org” ذکر شده است. اما اگر قصد دارید از هر سرور دیگری مانند Mosquitto ، Adafruit استفاده کنید ، می توانید آدرس سرور و شماره پورت خود را جایگزین آن کنید.

در مرحله بعد WiFiClient و PubSubClient ایجاد شده که در طول برنامه استفاده می شود.

در قسمت ()setup  ، ابتدا ()WiFi.begin رافراخوانی می کنیم ، با استفاده از این روش ESP را به HotSpot دلخواه می تواینم متصل کنیم.

در مرحله بعد ، ما با استفاده از روش ()WiFi.statusاتصال شبکه را تست می کنیم. پس از اتصال موفقیت آمیز ، پیامی بر روی Serial Monitor با SSID شبکه متصل , چاپ می شود.

در حال حاضر ، ما باید یک بروکر ایجاد کنیم. اگر می خواهیم پیام ها را از سرور دریافت کنیم ، باید یک تابع callback ایجاد کنیم. برای این منظور ، ما از روش setCallback (callback) استفاده می کنیم.

اکنون ، ما از تابع connect (clientID) برای اتصال به کلاینت ESP8266 استفاده کرده ایم. در اینجا clientID باید منحصر به فرد باشد. اگر متصل است ، پیام “connected” را در سریال مانیتور نشان می دهد.

در مرحله بعد ،() client.subscribe ، یک تابع MQTT داخلی را فرا می خوانیم که برای subscribe در یک موضوع خاص استفاده می شود. برای این پروژه ، از “esp/test” به عنوان topic استفاده کرده ایم.

اکنون ، تابع MQTTcallback فراخوانی می شود تا بررسی کند که آیا اطلاعات به روز شده در دسترس است یا خیر. در صورت وجود داده های جدید  تابع داده های دریافتی را بررسی می کند. و پیامی را در سریال مانیتور با پیام اصلی و نام موضوع آن  چاپ می کند.

در مرحله بعد ، ما پیامها را به یک رشته تبدیل می کنیم ، به طوری که می توان آن را با هم مقایسه کرد در این پروژه ، یک LED با استفاده از دستورات MQTT روشن یا خاموش می شود .

در این پروژه ، وضعیت یک دکمه چک می شود ، اگر دکمه فشار داده شود ، پیامی به عنوان “esp/test1” مطابق شکل زیر منتشر می شود.

تست MQTT با ESP8266 با استفاده از آردوینو:

 

MQTT-with-ESP8266-using-Arduino

برای آزمایش نهایی ، از برنامه Android استفاده می کنیم که قبلاً تنظیم کرده بودیم.

برنامه client MQTT را باز کنید و مطمئن شوید که تلفن همراه شما به اینترنت متصل است ما یک رشته “Hello from ESP8266“را از ماژول ESP ارسال می کنیم که در داخل برنامه Android منعکس می شود و یک نوتیفیکیشن دریافت می کنیم. در مرحله بعد ، یک رشته را از برنامه Android ارسال می کنیم که LED متصل به برد ESP8266 را روشن کند.

مرحله 1:

روی گزینه Saved MQTT در App ، که قبلاً ایجاد کردیم کلیک می کنیم.صفحه ای ظاهر می شود که در آن از شما خواسته می شود

Subscribe to a Topic“. ما قبلاً موضوع را به عنوان “esp/test1” تعیین کردیم بنابراین ، در برنامه Android ، esp/test1” را می نویسیم. روی subscribe کلیک کنید ، با این کار صفحه ای مانند زیر به شما نشان داده می شود ، جایی که مانند عبارت”پیام دریافت نشده است” ازtopic نوشته شده .

 

MQTT

اکنون ، روی کلیدی را که به nodeMCU متصل است فشار دهید. پیام“Hello from ESP8266”را روی گوشی می بینیم.

MQTT

مرحله ی دوم موضوع را publish می کنیم.

روی up arrow در برنامه کلیک می کنیم و صفحه زیر باز میشود.

MQTT

اکنون ، در قسمت ” topicesp/test و در قسمت پیام ، “on” یا “off” را بنویسید تا LED به ترتیب روشن و خاموش شود. به عنوان مثال ، اگر “on” در topic پابلیش شود ، LED روشن می شود و اگر “off” در topic پابلیش شود ، LED خاموش می شود.

کد کامل آردوینو