استفاده از پروتکل MQTT برای اینترنت اشیاء (IOT)
MQTT یک پروتکل ماشین به ماشین (M2M) برای اتصالات اینترنت اشیاء (IOT) است که به کمک سنسور، ارتباط برقرار میکند.
معماری ساختار MQTT شامل یک سرور مرکزی یا واسطه است که به شکل توپولوژی ستارهای با یک یا چند دستگاه ارتباط برقرار میکند. پایه ارتباطات بر اساس پیامها و تاپیکهایی است که به یک گره (دستگاه) ارسال میشود. دراینبین دیگر گرهها (دستگاهها) نیز میتوانند با اشتراکگذاری آن پیام را دریافت کنند. سرور مرکزی مسئول مدیریت شبکه و انتقال پیامها است. ارتباطات میتواند یک به یک یا گروهی باشد. هدف از این پروژه ساخت یک آداپتور IOT است که به همهی دستگاههای عمومی بدون احتیاج به wifi اجازه میدهد تا بهعنوان یک گره IOT شناخته شوند. تنها شرط موردنیاز دارا بودن یک پورت سریال است. جهت پیادهسازی یک سیستم با حداقل جزئیات، ما باید در مورد چگونگی کار یک سرور مرکزی (کارگزار) نیز بدانیم. گرهها بر پایهی یک ماژول ESP-03 و سرور مرکزی بر روی یک ماژول رزبری پای اجرا میشود. در تصویر شماره یک، میتوانید بلوک مربوط به دیاگرام سیستم را مشاهده کنید.پروتکل MQTT:
یک دفتر کار را تصور کنید؛ شما به چندین دستگاه با یک واحد مرکزی نیاز دارید. دستگاههایی مانند ترموستات، آلارم یا دستگاههای مختلفی که باهم مرتبطاند ( مانند یک لامپ با سوئیچ قطع و وصل). ما به یک پروتکل ارتباطی نیاز داریم که بین همهی این دستگاهها مشترک باشد. در میان پروتکلهای موجود، MQTT به دلایل زیر انتخاب شده است:- متنباز بودن
- سازگاری با تمام دستگاهها (اندروید، لینوکس)
- پیادهسازی سادهی سیستم
- هر دستگاهی میتواند دادهها را فراخوانی و منتشر کند.
- هر دستگاهی میتواند یک تاپیک را برای دیگر دستگاهها منتشر کند.
- دادههای منتشرشده توسط یک سرور مرکزی که کارگزار نامیده میشود مدیریت میشوند. درواقع کارگزار مسئول توزیع و دریافت دادههاست.
- دادهها و سلسلهمراتب آن توسط علامت “/” از یکدیگر جدا میشوند.
1 | Floor3/Room2/Temperature |
کارگزار (Server):
این قسمت از سیستم باید همواره از تاپیکهایی که دستگاهها منتشر میکنند مطلع باشد و آن را بین همهی دستگاههایی که مرتبط با تاپیک فوق هستند، توزیع کند. در بین تمامی کارگزارهای در دسترس، ما کارگزار Mosquitto را به دلایل زیر انتخاب کردیم:- متنباز بودن
- نصب و مدیریت آسان
- موجود بودن برای رزبری پای، به این دلیل که باید بهصورت 24 ساعته در دسترس باشد. به نظر میرسد که استفاده از یک دستگاه باقدرت پایین انتخاب خوبی باشد.
1 | $ sudo apt-get install mosquitto mosquitto-clients python-mosquitto |
1 | $ mosquitto_sub -d -t test |
1 | $ mosquitto_pub -d -t test -m Hello |
1 | Client mosqsub/22163-raspberry received PUBLISH (d0, q0, r0, m0, 'test', ... (5 bytes)) Hello |
آداپتور اینترنت اشیاء IOT
استفاده از پروتکل MQTT برای اینترنت چیزها (IOT):
یکی از موارد مهم این است که آداپتوری که استفاده میکنیم باید به یک اینترنت بیسیم متصل بوده و از لحاظ موقعیت، در دسترس تمامی گرهها باشد. بهعنوان هسته اصلی آداپتور IOT، به دلایلی که در پایین ذکرشده، ما یک دستگاه ESP-03 را بر پایه یک تراشه ESP8266 انتخاب کردیم:- اندازهی کوچک
- هزینه بسیار پایین
- امکانات وای فای
- رابط سریال
- وابسته بودن به یک خانواده بزرگ (که درنتیجه دستگاه بهراحتی قابل تعویض است.)
- برنامهنویسی ساده به کمک Arduino IDE
سختافزار:
اشکال مهم ESP-03 این است که اتصالات آن از نوع 2.54 نیست. که مانع از اتصال به یک PCB با یک اتصال استاندارد میشود. راهحل اجراشده در تصویر دو قابلمشاهده است. ما یک سیم به هرکدام از پینها لحیم کردیم که خم شدن آنها باعث میشود تا به یک هدر 2.54 تبدیل شوند. ESP-03 میتواند بهصورت متصل یا غیر متصل برنامهریزی شود. همچنین جایگاه عمودی ESP-03 کمک میکند تا سطح مورداستفاده PCB کاهش یابد. پینها باید به مقدار حداقل ممکن برای اپلیکیشنها مورداستفاده قرار گیرند. در تصویر سه، پینهای خروجی اصلی ESP-03 و آرایش نهایی آداپتور IOT را میتوانید ببینید. ایضاً میبینید که 12 پین هدر مورداستفاده قرار گرفته است. برای برنامهریزی آداپتور ما به یک فلش USB بهعنوان مبدل سریال نیاز داریم. با در نظر گرفتن اینکه ESP-03 از جریان برق 3.3V استفاده میکند. (و نه 5V) سیگنالهای Rx و Tx باید با ولتاژ فوق سازگار شود. به این منظور ما از یک کابل FTDI 5V استفاده کردیم و ولتاژ موردنظرمان را تغییر دادیم. میزان ولتاژ Rx وقتیکه از کابل FTDI استفاده میکنیم باید کاهش یابد. به همین دلیل ما از دو مقاومت تقسیمکننده ولتاژ استفاده کردیم. از سوی دیگر سیگنال Tx با استفاده از کابل FTDI باید از 3.3 به 5 ولت افزایش یابد. در تئوری، به این کار نیازی نیست. زیرا 3.3 ولت از 2.5 ولت بالاتر است. ارزش کابل FTDI “1” در نظر گرفته میشود. شماتیک دیاگرام فوق را ببینید. بورد فوق بهراحتی بر روی یک پوسته نصب میشود.- نصب نرم افزار Arduino IDE:
- راهاندازی IDE و پیدا کردن کامپایلر سازگار با ESP8266:
1 | http://arduino.esp8266.com/versions/2.0.0/package_esp8266com_index.json |
- نصب کامپایلر سازگار با ESP8266:
- نصب کتابخانه MQTT:
- بارگیری و کامپایل کردن طرح ارائه شده mqtt.ino:
- پس از راهاندازی، به روتر متصل شوید. SSID و پسورد آن در قسمت کد نمایش داده میشود.
- سپس، جهت برقراری ارتباط با کارگزار(server) اقدام کنید. آدرس IP آن در قسمت کد مشخص است.
- جهت دریافت اشتراک از شبکه منتظر بمانید و برای انتشار تاپیکها به سراغ سریال پورت بروید.
1 | :[Command];[Parameter1];[Parameter2]CRLF |
1 | :publish;topic;payload |
1 | :publish;Floor3/Room2/Temperature;22.3 |
1 | :subscribe;topic |
1 | :subscribe;Floor3/Room2/AirConditioner |
1 | :callback;topic;payload |
1 | :callback;Floor3/Room2/AirConditioner;OFF |
پیام های وضعیت:
آداپتور IOT، اطلاعاتی که در مورد پیشامدهای موجود هستند را به دستگاههای عمومی ارسال میکند. این پیامها، خارج از پروتکل MQTT هستند اما فرمت یکسانی دارند. پیامها عبارتند از: START شروع برنامه ESP-03 بهصورت بوت WIFI-ON روشن کردن وای فای و برقرار شدن ارتباط با روتر. MQTT-ON روشن شدن MQTT و برقرار شدن ارتباط با کارگزار. MQTT-ERR خطا در برقراری ارتباط با کارگزار. پس از گذشت 5 ثانیه مجدد تلاش کنید. Error فرمان ناشناخته دریافت شده است. Ping60 هر 60 ثانیه ارسال میشود، بهعنوان ناظر. بازبینی: بهمنظور بررسی عملکرد صحیح آداپتور IOT، آن را از طریق کانال سریال به کامپیوتر متصل کنید. مانند آنچه بر روی Arduino IDE دیده بودید، یک سریال کنسول بر روی کامپیوترتان آغاز بهکار میکند. ماژول آداپتور IOT را بدون فشار دادن دکمه PROGRAM راهاندازی کنید. برنامه شروع به کار خواهد کرد و اگر همهچیز بهدرستی کار کند، کنسول پیغام زیر را به نمایش میگذارد:1 | :status;Start :status;WiFi_ON :status;MQTT_ON |
1 | :aaa |
1 | :status;<span class="hljs-built_in">Error</span> |
1 | $ mosquitto_sub -d -t test |
1 | :publish;test;Hello |
1 | :subscribe;mytopic |
1 | $ mosquitto_pub -d -t mytopic -m mymessage |
1 | :callback;mytopic;mymessage |
ارتقاء:
یکی از امکانها برای بهبود توانایی، اضافه کردن دستورهای جدید جهت نمایان ساختن روتر ، SSID و پسورد و یا آدرس IP کارگزار است که بهجای کدهای ثابت میتوانند مورداستفاده قرار بگیرند. این پروژه جهت کمک به دیگر مدارها و تبدیل آنها به یک عضو از اینترنت اشیاء (IOT) در نظر گرفته شده است. اما ESP-03 این قابلیت را دارد تا اگر پینهای (L/O) محدود آن برای یک برنامه خاص کافی باشند، خود بهعنوان یک ماژول مستقل عمل کند. در غیر این صورت ما به یک ماژول مشابه با تعداد پین بیشتر، مانند ESP-12 نیاز خواهیم داشت.برنامهها:
حال، ما امکانات بیشماری داریم. استفاده از یک پروتکل استاندارد به ما این اجازه را خواهد داد تا دستگاههای متفاوت با برنامههای متفاوت و در مکانهای متفاوت را به یکدیگر متصل کنیم. بهعنوان مثال، برنامههایی با سیستمعامل اندروید موجود هستند که به ما اجازه میدهند تا تاپیکهایی را منتشر کنیم یا با آنها مشترک شویم. و همانطور که ما به یک شبکه با اینترنت متصل میشویم، باکمی دستکاری سیستم روتر میتوانیم به دستگاههای اینترنت اشیاء، از هرجایی در جهان دسترسی داشته باشیم.Mqq Schematic
MQTT IOT
سلام این لینک را بینید دقیق همین مقاله
http://electronika.ir/fa/%D8%A2%D9%85%D9%88%D8%B2%D8%B4/%D8%A7%D9%84%DA%A9%D8%AA%D8%B1%D9%88%D9%86%DB%8C%DA%A9-%D8%AF%DB%8C%D8%AC%DB%8C%D8%AA%D8%A7%D9%84/670-%D9%BE%D8%B1%D9%88%D8%AA%DA%A9%D9%84-mqtt-%D9%88-%D8%A7%DB%8C%D9%86%D8%AA%D8%B1%D9%86%D8%AA-%D8%A7%D8%B4%DB%8C%D8%A7%D8%A1-iot.html
بله دبدم متاسفانه بدون دادن هیج لینکی به منبع سیسوگ اون را نشر دادند
سلام
ممنونم واسه این همه مطالب مفیدتون. واقعا عالیه
من در رابطه با این مطلب چند تا سوال داشتم:
1 – اگه این پروتکل روی سرور نصب بشه تا به صورت آنلاین ارتباط برقرار بشه، ما فقط باید ادرس اون سرور رو بزاریم داخل برنامه یا نیاز به تغییرات دیگه ای هم داره؟
2 – سرور میتونه هروقت اطلاعاتی واسه ارسال داشت به میکرو بفرسته یا میکرو باید درخواستی واسه دریافت اطلاعات ارسال کنه؟
من تازه میخوام IOT یاد بگیرم و خیلی از اصلاحات واسم غریبه و دقیق متوجه نشدم
سلام
مقالات زیر رو مطالعه بفرمایید احتمالا جواب سوالاتتون رو پیدا میکنید
چطور به شبکه اینترنت اشیاء وصل شویم ؟
پروتکل MQTT چگونه کار میکند؟
coap چیست؟
سلام وقتتون بخیر، من یک پروژهدارم که باید با آردوینو و ماژول اینترنت و پروتکل mqtt یک لامپی رو از هر جایی روشن و خاموش کنم، برای قسمت mqtt نمیدونم چه کاری باید بکنم، شما می تونید کمک کنید؟
سلام دوست عزیز
خوب این کاری که میخواید انجام بدید کار پیچیده ای نیست ؛ اول لازمه این کار اینه که mqtt رو بشناسید و بتونید باهاش کار کنید ، قبلا در سایت سیسوگ پروتکل mqtt رو معرفی کردیم که میتونید اونو توی مقاله “پروتکل MQTT چگونه کار میکند؟”
مطالعه کنید
اگر سوالی بود حتما مطرح کنید.
با سلام
ممنون از ارائه مطالب خوبتون
توی اکثر جاهای این مطلب به جای IoT نوشتین LoT !
سلام دوست عزیز.
خیلی ممنون از تذکرتون.
متن اصلاح شد.
موفق باشید.
یک جاهایی نوشته توی باکس هایی که مربوط به کد هست به هم ریخته
لطفا اصلاح کنین
تشکر از مطالبتون
خواهش میکنم دوست عزیز
مطلب رو اصلاح کردیم