در مبحث اینترنت اشیا با دو نوع داده سرو کار داریم. یکی دادههای سبک و دیگری دادههای سنگین، از لحاظ حجم ارسال میباشند. تمایل بر این است که دادهها به سمت سبک شدن پیش بروند. هرچه بستههای داده ارسالی سبکتر باشد، سرعت انتشار آن بیشتر خواهد بود. پروتکل MQTT در این حوزه بسیار پرکاربرد است. به دلیل امنیت، سرعت ارسال و حجم کم بستههای ارسالی میباشد. پیش از این در پستهای مختلفی راجع به MQTT صحبت کردیم. از جمله مدیریت وسایل برقی با برد Wemos توسط پروتکل MQTT نرم افزار Node Red ولی در این پست راجع به دو موضوع مهم MQTT صحبت خواهیم کرد. آن هم ارسال و دریافت داده یا به تعریفی دیگر Publish و Subscribe در بستر MQTT میباشد.. پروتکل MQTT به دلیل دارا بودن امنیت و سرعت انتقال بسیار زیاد، از جمله پروتکلهای محبوب در انتقال دیتا میباشد. در این پروژه توسط پروتکل ارتباطی MQTT ارتباط بین دو رزبری پای Raspberry Pi برقرار میشود. در ادامه با مرجع تخصصی رزبری پای به زبان فارسی، دیجی اسپارک همراه باشید.
MQTT در Node-Red
پروتکل MQTT به نوعی سریع و کم حجم و دارای امنیت قابل توجهی است. در پروژه های اینترنت اشیا این سه دلیل بخش مهمی از یک پروژه را شامل میشود. دیتا با سرعت بسیار بالا، امنیت قابل توجه و کمترین حجم داده Publish و Sunscribe شده و نمایش داده میشود. نود MQTT به صورت پیشفرض در لیست نودهای نرم افزار Node-Red قرار گرفته شده است.
- MQTT in
نود MQTT in به عنوان ورودی mqtt در Broker عمل کرده و نقش Subscribe در پیامهای یک تاپیک مشخص را بر عهده دارد. این نود در شاخه input قرار دارد.
- MQTT out
نود MQTT out به عنوان نود خروجی mqtt در broker عمل کرده و نقش Publish در پیامهای یک تاپیک مشخص بر عهده دارد. این نود در شاخه output قرار دارد.
در تصویر زیر به راحتی میتوانید عملکرد نودهای MQTT در Node-Red را تحلیل کنید. چنانچه سوالی در این بخش دارید، از طریق بخش نظرات همین آموزش مطرح کنید. من تلاش میکنم در سریعترین زمان ممکن پاسخ سوال شما را بدهم.
تبادل اطلاعات با MQTT دو برد مختلف
پروتکل MQTT ارتباط ماشین تو ماشین یا همان M2M را بین دو سخت افزار مختلف برقرار میسازد. انتخاب سخت افزار بر اساس نیاز پروژ مشخص میشود و با استفاده از Node-Red به هر سخت افزاری دسترسی پیدا خواهید کرد. جهت تست پروژه در این آموزش از دو رزبری پای استفاده میشود. در پروتکل MQTT تاپیک نقش اساسی انتقال دهنده پیام به واسط را ایفا میکند. به این صورت که برای هر دیتا یک تاپیک منحصر به فرد در نظر گرفته و در MQTT آن را تعریف میکنیم. اگر از رزبری پای و نود رد Node-Red استفاده کنیم در تنظیمات نود، تاپیک Topic را نوشته و تایید میکنیم. در صورتیکه از آردوینو Arduino استفاده شود، توسط کتابخانه MQTT در کدهای برنامه، تاپیکها بر اساس نوع دیتا تعریف میشود. نقطه اشتراک ارتباط Node-Red با آردوینو همان تاپیک Topic است که توسط ما در برنامه مشخص میشود. با توجه به این توضیحات، به راحتی میتوانید از سخت افزارهایی مانند آردوینو Arduino، برد Nodemcu و یا Wemos جهت اجرای این آموزش استفاده نمایید. رزبری پای به عنوان Broker و یا همان واسطه عمل کرده و سخت افزارهای دیگر نقش Client جهت Publish و Subscribe دیتا را بر عهده خواهند گرفت.
اتصالات
در این پروژه از دو رزبری پای و دو ال ای دی استفاده میکنیم.
- پایه مبثت هر دو ال ای دی را به پایه GPIO17 و GPIO18 اتصال دهید.
- پایه کوتاه GND ال ای دی را به پایه های GND رزبری پای اتصال دهید.
تاپیک Topic در MQTT
جهت ارسال دیتا در پروتکل MQTT بایستی تاپیک بر هر خروجی تعریف شود. به عنوان مثال یک سنسور دما و رطوبت را در نظر بگیرید. این سنسور دو پارامتر مختلف یعنی دما و رطوبت را اندازه گیری کرده، سپس پردازش و ارسال میکند. حال جهت ارسال داده دما و داده رطوبت در پروتکل MQTT بایستی دو تاپیک جداگانه برای هر داده تعریف شود. به عنوان مثال از GetTemperature برای دریافت داده دما و GetHumidity برای دریاقت داده رطوبت استفاده کردهام. سپس در کد برنامه آردوینو و یا در صورت استفاده از Node-Red در تنظیمات آن لحاظ میشود. در این آموزش ما از دو ال ای دی LED استفاده خواهیم کرد. بنابراین دو تاپیک مجزا برای ال ای دی ها تعریف میکنیم.
- led1
- led2
حال نود MQTT in و نود MQTT out را از منو نودهای Node-Red وارد صفحه کنید. با توجه به اینکه دو خروجی داریم، از هر نود Node، دو عدد نیاز داریم.
از سرور رایگان mqtt.eclipse.org:1883 استفاده شده است. در قسمت Topic دو تاپیک led1 و led2 تعریف میکنیم.
در mqtt out هم مانند قبل تاپیک ها را مشخص کنید.
نود inject
از نود inject جهت ارسال دیتا به ال ای دیها استفاده شده است. با کلیک بر روی Node inject با مقدار ۱ ال ای دیها روشن و با کلیک بر روی Node inject با مقدار ۰ ال ای دیها خاموش میشود.
نود change
از نود change جهت کانفیگ شدن دیتا و ارسال دیتای صحیح در خروجی استفاده میشود.
تنظیمات MQTT در Node-Red
همانند تصویر زیر نودها را به یکدیگر اتصال داده و سپس Deploy کنید. چنانچه درباره هر کدام از این نودها سوال دارید، از طریق بخش نظرات مطرح کنید.
با کلیک بر روی هر ورودی ال ای دی رزبری مقابل آن روشن و خاموش میشود. دقت داشته باشید MQTT in هر تاپیک به پین GPIO مربوط به آن متصل شده است. با توجه به اینکه هر دو برد رزبری پای به شبکه اینترنت متصل هستند. اطلاعات در بستر پروتکل MQTT به بروکر Eclipse ارسال شده و سپس از آنجا به برد رزبری پای گیرنده ارسال میشود.
وسایل مورد نیاز
چنانچه در مراحل راه اندازی و انجام این پروژه با مشکل مواجه شدید، بدون هیچ نگرانی در انتهای همین پست، به صورت ثبت نظر سوالتان را مطرح کنید. من در سریعترین زمان ممکن پاسخ رفع مشکل شما را خواهم داد. همچنین اگر ایرادی در کدها و یا مراحل اجرایی وجود دارند میتوانید از همین طریق اطلاع رسانی کنید.
در پایان نظرات و پیشنهادات خود را با ما درمیان بگذارید و با اشتراک گذاری این آموزش در شبکه های اجتماعی , از وبسایت دیجی اسپارک حمایت کنید.
بسیار عالب بود کاش میشد در مورد ارتباط sim800lویا ماژول سیم کارت با سرورmqtt مطلبی منتشر کنید چون مثل espنمونه زیاد نداره
با سلام
از توجه شما ممنونم.
درخواست شما بررسی و در صورت امکان آموزش داده خواهد شد.
با سلام وخسته نباشید
اول به دلیل آموزش حتی یک کلمه به شما دوستان عزیز خسته نباشد میگم و این دو سه خط را فقط به عنوان نقد خدمتتان عرض میکنم.تقریبا دو ماه قبل سفری چند هفته به شهر ونکور کانادا داشتم.اونجا بوسیله یکی از دوستان صمیمی که داخل شرکت جنرال الکتریک شعبه کانادا کار میکرد یه چند ساعتی رفتم داخل شرکت.ضمینه کاری IOT بود.جالبه که نه اسم رزبری بود ونه آردوینو.یه برد سخت افزاری بود برپایه ARM NXP به اسم IMX6 ودر ضمینه نرم افزار یه برنامه اپن سرس تحت اوبونتو بود به اسمYOCTO وجالبه که وقتی اسم رزبری و اردوینو را آوردم گفتن که اینها صرفا تفریح وفان دبیرستانی و نه حتی دانشگاهی هستن.بازم این نکته را بگم که این متن را نه بخاطر بی احترامی به زحمتهای شما وهمکاران عزیز بلکه صرفا به خاطر این میگم که سعی کنیم بریم به سمت علم و تکنولوژی روز و قابل استفاده در صنعت
با سلام
جناب آقای قهرمانی از توجه شما سپاسگزارم. همچنین بابت به اشتراک گذاری تجربهتان تشکر میکنم. در خصوص استفاده از بردهای الکترونیکی در پروژههای مختلف که جنبه تجاری هم دارند، انتخابهای فراوانی وجود دارند. همانطور که تولید کنندگان مختلفی در بدست آوردن سهم بازار Embedded سیستمها در تلاش هستند. بردهای آردوینو و رزبری پای هم عضوی از این بازار گسترده هستند. طبیعتا تیم دیجی اسپارک نمیتواند به تنهایی روی تمامی بردهای این حوزه کار کند. ولی در تلاش هستیم تا انواع مختلفی از این بردها را به علاقمندان معرفی کرده و روش استفاده از آنها را هم آموزش بدهیم.
با تشکر از شما
سلام ممنون از مطلب خوبتون،
برای ارتباط Esp8266 با برنامه اندروید، باید از چه کتابخونه ای استفاده کنیم؟
در طرف اندروید چجوری باید اطلاعات رو بخونیم؟
با سلام
این مورد توسط بنده تست نشده است.