2

آموزش برنامه نویسی آردوینو

زمانی که صحبت از اینترنت اشیاء ( IoT ) به میان می آید اتصال اشیاء و دستگاه ها به یکدیگر و پیام رسانی بین دستگاه ها مهم ترین مسئله پیش روست. ارتباطات دستگاه ها در IoT نسبت به ارتباطات دیگر بسیار متفاوت است.

در مبحث اینترنت اشیاء تعداد بسیار زیاد دستگاه ها از یک سو و مصرف کم انرژی از سوی دیگر باعث شده تا پروتکل های رایج TCP/IP در شبکه های کامپیوتری کارآمدی لازم را نداشته باشند. در ادامه پروتکل ارتباطی MQTT که یکی از محبوب ترین پروتکل های IoT و ارتباطات M2M است را تشریح خواهم نمود.

پروتکل MQTT یک پروتکل ارتباطی استاندارد Publish/Subscribe برای ارتباطات M2M و IoT است که در سالهای اخیر به علت مزیت های برجسته اش بسیار مورد توجه قرار گرفته است.

پروتکل MQTT

پروتکل MQTT چگونه بوجود آمد؟

پروتکل MQTT برای نخستین بار توسط شرکت IBM در دهه ۹۰ میلادی اختراع و توسعه داده شد. واژه MQTT از حروف آغازین کلمات عبارت Message Queue Telemetry Transport اقتباس شده است.

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

همه ی این ویژگی ها باعث شده است تا در سالهای اخیر که اینترنت اشیا به شدت مورد توجه قرار گرفته است پروتکل MQTT به شدت مورد استقبال فعالان این صنعت قرار گیرد. لازم به ذکر است که پروتکل MQTT در اواخر سال ۲۰۱۴ میلادی به یک استاندارد آزاد و اوپن سورس OASIS تبدیل شد و هم اکنون با کتابخانه های متن باز مختلفی که برای این پروتکل ارائه شده است توسط بسیاری از زبان های برنامه نویسی پشتیبانی می شود.

چرا استفاده از پروتکل MQTT در IoT پرطرفدار شده است؟

برای درک محبوبیت پروتکل MQTT ابتدا باید کمی با چالش های موجود در صنعت IoT آشنا شویم. از آنجا که در اینترنت اشیا ممکن است هزاران دستگاه در محدوده یک ساختمان به یکدیگر متصل شوند و ممکن است بسیاری از این دستگاه ها به صورت بی سیم و با استفاده از باتری به شبکه متصل شوند مباحثی مانند میزان مصرف انرژی، پیکر بندی ارتباطات و توسعه و تغییرات مباحث بسیار چالش برانگیزی به شمار می روند.

Publish/Subscribe به چه معناست؟

همانطور که گفته شد پروتکل MQTT یک پروتکل Pub/Sub است. پروتکل هایی مانند HTTP یعنی همان پروتکل ارتباطی که هم اکنون شما از طریق آن به این مطلب دسترسی پیدا کرده اید برخلاف MQTT یک پروتکل Request/Response است. به این معنی که شما یا کامپیوترتان دقیقا می دانید چه صفحه ای از کدام سایت را میخواهید مشاهده کنید. به عنوان مثال برای دیدن این صفحه، مرورگر شما با یک IP مشخص یک درخواست به آدرس Http://diginic.net/fa/what-is-mqtt-protocol ارسال نموده است. سرور پس از دریافت این درخواست ارتباط بین دو رایانه را برقرار می کند و محتویات صفحه را به کامپیوتر شما ارسال می کند و ارتباط کامپیوتر شما با سرور پس از انتقال محتویات قطع می شود تا زمانی که شما مجددا درخواستی به این سایت ارسال کنید.

بر خلاف ارتباطات Request/Response که مستلزم ارتباط مستقیم بین سرور و کلاینت است ارتباطات Publish/Subscribe با یک واسطه که به نام Broker شناخته می شود برقرار می شوند. این مزیت باعث می شود تا منتشر کنندگان ( Publishers ) و مصرف کنندگان ( Subscibers ) اطلاعات نیازی به شناخت مستقیم یکدیگر نداشته باشند. دستگاه های موجود بر روی شبکه MQTT می توانند پابلیشر یا سابسکرایبر یا هردو باشند. آنها بدون اینکه هیچ اطلاعی از حضور دیگر دستگاه ها بر روی شبکه داشته باشند اطلاعات مورد نظرشان را در قالب Topic های مختلف به بروکر ارسال یا از آن دریافت می کنند.

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

تاپیک در ام کیو تی تی چیست؟

تاپیک ( Topic ) یک روش برای دسته بندی اطلاعات و publisher ها و subscriber های مرتبط با آن دسته بندی توسط بروکر است. تاپیک ها را میتوان به پوشه های مختلف موجود در کامپیوتر تشبیه نمود. یک بروکر می تواند Topic ها و SubTopic های متعددی داشته باشد.

به عنوان مثال فرض کنید برای کنترل تهویه مطبوع یک خانه یک تاپیک تحت عنوان /sensors برای اطلاعات سنسور ها ایجاد می کنیم. می توانیم SubTopic هایی مانند room، Kitchen و livingroom در این تاپیک ایجاد کنیم و برای هر یک از suptopic ها چند subtopic دیگر مانند temperature و humidity ایجاد کنیم.

حال سنسور دمای اتاق، دمای اتاق را به این صورت به بروکر MQTT ارسال می نماید.

mqttserver/sensors/room/temperature

سرور با دریافت اطلاعات متوجه می شود اطلاعات دریافت شده باید در دسته سنسور ها > اتاق > دما قرار داده شود.

حال فرض کنید کولر اتاق می خواهد دمای اتاق را دریافت کند و بر اساس آن خاموش و روشن کند. کولر زمانی که به شبکه متصل می شود درخواستی برای subscibe در topic مربوط به /sensors/room/temperature به بروکر ارسال می کند و اصطلاحا در این تاپیک سابسکرایب می نماید. بروکر از این پس هربار داده ای مربوط به این تاپیک دریافت کند، یک نسخه از آن اطلاعات را برای کولر که یکی از subsriber های این تاپیک است ارسال می کند.

در حالی که در ارتباطات Request/Response برای چنین کاری کولر باید هر چند ثانیه یا چند دقیقه یکبار درخواستی برای دریافت دما به سرور ارسال می نمود تا سرور دمای مربوط به آن قسمت را در اختیارش قرار دهد. اما در پروتکل های Pub/Sub نیازی نیست هر چند ثانیه یکبار درخواستی به بروکر ارسال شود. یکبار در زمان ایجاد ارتباط درخواست subsribe ارسال می شود و از آن پس هر زمان که داده ی جدیدی دریافت شود بروکر به صورت اتوماتیک آن داده را برای دستگاه ها ارسال می کند.

Publish/Subscribe کمک می کند تا دستگاه ها ترافیک کمتری مصرف کنند و نیازی به ایجاد ارتباطات مداوم با سرور نداشته باشند.

هدر های سبک

در حالی حجم هدر پروتکل هایی مانند HTTP چندین هزار بایت است ( KB ) هدر های پروتکل MQTT تنها ۲ بایت حجم دارند! این حجم پایین هدر یک مزیت فوق العاده برای صرفه جویی در مصرف ترافیک و انرژی مورد نیاز دستگاه فراهم می کند و از سوی دیگر کمک می کند تا دستگاه ها با کانکشن های با پهنای باند کم بتوانند به سرعت با یکدیگر تبادل اطلاعات نمایند.

در اکثر موارد اطلاعاتی که سنسور ها و دستگاه های IoT ارسال می کنند حجمی در حد چند بایت دارد. به عنوان مثال یک سنسور دمای دقیق ممکن است هربار یک عدد ۲ بایتی را ارسال نماید و یقینا منطقی نیست زمانی که اطلاعات ما چند بایت است از هدر های چند کیلوبایتی برای ارسال داده ها استفاده کنیم.

بهترین پروتکل برای IoT

جمع بندی

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

لازم است ذکر نمایم که هدف از این مطلب اثبات برتری MQTT نسبت به HTTP یا هیچ یک از پروتکل های دیگر نیست. مقایسه MQTT و HTTP بی شباهت به مقایسه جت اسکی به نفت کش نیست که بحث کردن در مورد برتری های نفت کش نسبت به جت اسکی یا برعکس بحث درستی نخواهد بود زیرا هر یک برای کار متفاوتی اختراع شده اند و هر یک کار خود را به خوبی انجام می دهند. آنچه مهم است شناخت نقاط قوت و ضعف پروتکل ها و استفاده از مناسبترین پروتکل برای کاری است که قصد انجام آن را داریم.

در نهایت امیدوارم این مطلب توانسته باشد اطلاعات مفیدی در مورد پروتکل MQTT در اختیار شما قرار داده باشد و از اینکه وقت خود را صرف مطالعه این مطلب نموده اید از شما متشکرم. در پایان خواهشمندم نظرات ارزشمند خود را در مورد آنچه مطالعه فرمودید از طریق قسمت نظرات موجود در پایین همین صفحه برای ما ارسال نمایید.

2 نظرات
  1. علی می گوید

    از معدود مقالات داخلی با محتوای عالی.
    ممنون

  2. محسن می گوید

    سلام
    تا الان هرچی مطلب از سایتتون گرفتم عالی بوده
    کاربردی و کامل. ممنون از لطف شما

ارسال یک پاسخ

آدرس ایمیل شما منتشر نخواهد شد.