MQTT آموزش رزبری پای اینترنت اشیا IOT خانه هوشمند رزبری پای پروژه رزبری پای

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

نوشته شده توسط پریسا پوربلورچیان

در مبحث اینترنت اشیا IOT ، امنیت و شخصی سازی دیتا و کم حجم بودن اطلاعات ارسالی و دریافتی از اهمیت ویژه‌ای برخوردار است. در این آموزش شما را با پروتکل MQTT آشنا خواهم کرد. MQTT مخفف MQ Telemetry Transport  می‌باشد. به طور کلی MQTT را یک پروتکل پیام رسان به صورت Publish/subscribe بین چند دستگاه مختلف می‌توان نامید. از ویژگی‌های MQTT می‌توان به امنیت بالا، سرعت بالا و حجم کم پهنای باند مصرفی اشاره کرد. کلاینت‌ها در شبکه از طریق یک سرور (دریافت و فیلتر پیام) مشترک اطلاعات را منتشر کرده و سپس به اشتراک می‌گذارند. به عنوان مثال در یک پروژه کامندها (command) برای کنترل به عنوان خروجی ارسال می‌شوند، سپس اطلاعات خوانده شده و انتشار داده می‌شوند. در ادامه با مرجع تخصصی اینترنت اشیا دیجی اسپارک همراه باشید.

 

در این آموزش میخواهیم یک خروجی را از طریق پروتکل MQTT کنترل کنیم. اطلاعات از پنل فرمان با پروتکل MQTT به سرور ارسال شده و سپس از سرور با همان پروتکل MQTT به MCU ارسال می‌شوند. در این آموزش از دو نرم افزار Node-RED استفاده می‌کنیم. Node-RED گیرنده حتما به رزبری پای نیاز دارد ولی Node-RED فرستنده می‌تواند روی یک سرور مجازی یا کامپیوتر شخصی ما نصب باشد. در حالت فرستنده به Node خروجی MQTT و در برد رزبری پای به Node ورودی MQTT نیاز داریم. این خروجی را می‌توانیم به هریک از پین‌های رزبری پای Raspberry Pi که نیاز داریم اتصال دهیم. در این آموزش من یک ال ای دی را به صورت نمادین از یک وسیله برقی مدیریت می‌کنم. کافیست شما بجای ال ای دی از ماژول رله استفاده کنید؛ تا وسایل برقی را مدیریت کنید.

 

راه اندازی MQTT در Node-RED

برای مدیریت ال ای دی من از پین ۱۱ (GPIO17) برای خروجی LED استفاده کرده‌ام. سپس از طریق MQTT دیتا را روی سرور ارسال خواهم کرد. همانطور که گفته شد، نیاز به یک Node-RED فرستنده و گیرنده خواهیم داشت. در ابتدا تنظیمات فرستنده و سپس گیرنده را انجام خواهیم داد.

 

تنطیمات Node-RED فرستنده

با Node inject مقادیر ورودی جهت مدیریت LED را وارد می‌کنیم. دو عدد Node inject را وارد صفحه می‌کنیم. برای ارسال فرمان، به نود Node MQTT out (خروجی) نیاز داریم. همانند تصویر زیر وارد صفحه و اتصالات را برقرار می‌کنیم.

کنترل وسایل الکترونیکی از راه دور بدون برنامه نویسی با پروتکل MQTT دانشجوکیت

تنطیمات نود inject را روی عدد، یکی را ۱ و دیگری را ۰ قرار می‌دهیم. در آموزش کنترل وسایل الکترونیکی از راه دور شیوه ی تنظیمات این نود کامل توضیح داده شده است. حال ۲ نود inject را به نود MQTT out همانند تصویر زیر اتصال دهید. در ادامه تنظیمات هر یک از Node ها را بررسی خواهیم کرد.

 

تنظیمات نود خروجی Node MQTT out

بر روی نود کلیک کنید. سپس آدرس سرور را به eclips تغییر دهید: iot.eclips.org:1883 ، حال در قسمت تاپیک اسم مورد نظر خود را تایپ کرده و تنها دقت داشته باشید که برای معرفی تاپیک باید از اسلش ( / ) بین کلمات استفاده نمایید. من در اینجا اسم تاپیک را parisa/LED انتخاب کردم.

کنترل وسایل الکترونیکی از راه دور بدون برنامه نویسی با پروتکل MQTT دانشجوکیت - دیجی اسپارک

 

تنظیمات Node-RED گیرنده

در Node-RED گیرنده به Node MQTT in (ورودی) نیاز داریم. سپس اطلاعاتی که توسط Node-RED فرستنده انتشار داده شده‌اند را از طریق نود Switch به پین خروجی رزبری پای raspberry pi ارسال می‌کنیم. حال از نود MQTT in به Switch و از آن به rpi gpio out همانند تصویر زیر اتصال می‌دهیم. در ادامه تنظیمات هر یک از Node ها را بررسی خواهیم کرد.

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

 

تنظیمات نود ورودی Node MQTT in

 

محدودیت در دسترسی کامل به این مجموعه آموزش

 

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

 

 

تنظیمات Node rpi out

از شاخه Raspberry_pi نود rpi gpio out را انتخاب می‌کنیم. سپس روی نود کلیک کرده و gpio 17 یعنی پین ۱۱ را انتخاب می‌کنیم. سپس Done را بزنید.

کنترل وسایل الکترونیکی از راه دور بدون برنامه نویسی با پروتکل MQTT 5 -دیجی اسپارک

حال توسط Node-RED فرستنده، با کلیک روی هر یک از inject ها ، ال ای دی روشن و خاموش خواهد شد. در واقع دیتا از Node-RED از طریق MQTT به برد رزبری پای Raspberry pi ، سپس از رزبری پای از طریق MQTT به MCU ارسال شده و لامپ روشن می‌شود.

 

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

 

در پایان نظرات و پیشنهادات خود را با ما درمیان بگذارید و با اشتراک گذاری این آموزش در شبکه های اجتماعی , از وبسایت دیجی اسپارک حمایت کنید.

 

درباره نویسنده

پریسا پوربلورچیان

تولید کننده محتوا / کارشناس IOT

زندگی یعنی پژوهش و فهمیدن چیزی جدید

تلاشم بر این است تجربیاتم در زمینه IOT‌ را به بهترین شکل با شما در میان بگذارم.

تبادل نظر و رفع عیب با ثبت دیدگاه

۶۱ دیدگاه

    • سلام
      برای تنظیمات هر دو نود ورودی و خروجی mqtt ، دقت کنید که سرور و پورت یکسان باشد. همانطور که در آموزش گفتم، سرور به این صورت باشد: iot.eclips.org:1883

        • لینک ارور را در همین صفحه برای نت بفرستید تا بررسی کنم .تمام مراحل را از اول چک کنید. هر دو پورت MQTT یکسان باشد.

      • سلام وقت بخیر.
        علت این که این باید برای سرور باشه چیه؟
        چرا نمیشه رزبری را به عنوان سرور و با ای پی خودش استفاده کرد؟

  • سلام
    منظورتون از “Node-RED فرستنده” دقیقا چیه؟ یعنی نسخه ای مثلا برای آندروید یا ویندوز هستش برای این کار؟
    من از PlayStore نرم افزار node inject رو پیدا کردم ولی نتونستم بفهمم ارتباطش با این چیه و چطور باید کانکت بشم!!!! ارتباطی به این موضوع داره اصلا؟

    سوال دوم اینکه iot.eclips.org:1883 از کجا اومده و آیا باید اکانتی چیزی تعریف بشه روی eclips.org تا یه پورت و آدرس در اختیار بذاره. اگر میشه یکم بیشتر توضیح بدید ازتون ممنون میشم.

    • سلام
      در واقع در تعریف MQTT ، کلاینت ها دیتا را منتشر کرده و از طریق دو Device به اشتراک میگذارند. به عنوان مثال برای ارسال دیتای یک سنسور دما ، اطلاعات از Node mcu از طریق پروتکل MQTT به سرور eclipse و سپس با همین پروتکل از سرور به رزبری ارسال میشود. همانطور که در متن گفتم دیتا به صورت publish/subscribe اشتراک گذاری میشوند. در اینجا نود رد فرستنده ما در واقع ارسال دیتای ال ای دی ها می باشد ( روشن و خاموش شدن ال ای دی ها )
      برای سوال دوم هم ، IOT eclipse در واقع یک اکوسیستم و تکنولوژی مورد نیاز برای ساخت دیوایس های اینترنت اشیا و دیگر پلتفرم ها را در سیستم های open source فراهم میکند که به صورت پیش فرض در نرم افزار Node-RED تعریف شده است.

  • با سلام و احترام.
    خانم بلورچیان عزیز بنده فکر میکنم اسپل eclipse را در URL اشتباه نوشته اید. اگر اصلاح کنید مشکل دوستمونم حل میشه.

    Port :1883
    URL : iot.eclipse.org
    String : iot.eclipse.org:1883
    ===========================
    M26845

    • سلام
      از توجه شما بسیار سپاسگزارم. همینطور است که شما میفرمایید؛ اینجور اشکالات در تایپ سریع بوجود می آید. مورد مربوطه در متن اصلاح شد.

  • عرض ادب سرکار خانم مهندس
    ارتباط mqtt امن ترین راه ارتباطى است؟ و اینکه دقیقا چه بلایى سر دیتا میاد وقتى از پروژه ارسال میشه؟
    متشکرم

    • سلام
      بله mqtt پروتکلى سبک و کم حجم و کاملا امن براى ارسال دیتا بین دو سرور مى باشد. براى سوال دوم، لطفا سوال خود را واضح تر بیان نمایید اگر منظورتان در این پروژه تعریف شده است ؛ اطلاعات از پنل فرمان با پروتکل MQTT به سرور ارسال شده و سپس از سرور با همان پروتکل MQTT به MCU ارسال می‌شوند.

  • سلام
    اول از همه بابت آموزش هاتون تشکر میکنم. سوالی که دارم، با توجه به آموزش شما اگر من دو تا برد رسپبری داشته باشم با این پروتکل چطور باید انتقال دیتا بکنم؟ و اینکه حتما باید از این برد استفاده کنم؟ یا روش دیگری هم دارد؟

    • سلام
      از توجه شما ممنونم.
      براى ارتباط mqtt بین دو برد رزبرى پاى ، باید از دو پروتکل MQTT in و MQTT out استفاده کنید و در تنظیمات آن در قسمت تاپیک، فرستنده و گیرنده را تعریف کنید. از mcu هم میتوانید استفاده کنید. و اینکه دقیقا چه پروژه اى میخواهید تعریف کنید؟ کامل تر توضیح دهید.

  • با عرض سلام
    آیا میتوان به جای سرور eclips از هاست شخصی خودمان استفاده نماییم ؟ میتوانید راه اندازی سرور اختصاصی کنترل رازبری پای بر روی فضای شخصی را بفرمایید

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

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

  • سلام
    ممنون از مطالب خوبتون
    در مورد rs232/rs485 رزبری سوالاتی داشتم اگه امکانش باشه بهم ایمیل بزنین.ممنون

    • سلام
      در ابتدا با توجه به اینکه جای این سوال مرتبط با این پست آموزشی نیست، ولی شما سوال خود را از طریق همین صفحه مطرح نمایید تا پاسخگو باشم.

      • می خوام از طریق مدباس plc و رزبری ،سریال کنم تا بشه به رجیستر های plc دسترسی داشت و عمل R/W رجیستر انجام داد. کاری شبیه HMI ولی با رزبری..اصلا امکان این کار وجود داره؟

        • سلام
          در این زمینه documentation های زیادی از pymodbus ارائه شده که بنده در این زمینه کار نکرده ام و اطلاعات کافی ندارم. امیدوارم کاربرانی که اطلاعات بیشتری دارند از این طریق در بحث شرکت کرده و راهنمایی کنند.

        • سلام خسته نباشید میشه آموزشی در باره ارتباط ماژول سیم کارت و mqtt توضیحی بدید باید چکار کنم
          می‌خوام دیتا ها رو از طریق ماژول سیم کارت بجای ماژول وای‌فای به سرور mqttبفرستم.

  • با تشکر از سایت خوبتون
    در زمینه iot .پروژه ها و همه مثالایی که دیدم از رزبری و ویموس بصورت لوکال کنترل شدن .نحوه کنترل از طریق اینترنت و از راه “دور” بصورت یک مثال عملی چطوریه . . .

    • سلام
      از توجه شما ممنونم.
      برای کنترل از راه دور باید یک آی پی اختصاصی تحت عنوان آی پی استاتیک یا آی پی ایستا استفاده کنید. باید آن را از ارائه دهنده اینترنت خود درخواست کنید. همچنین می‌توان از مواردی مانند ربات تلگرام هم برای کنترل از راه دور استفاده کرد.
      همچنین از دو آموزش زیر برای نحوه ی ارتباط با ربات تلگرام ایده بگیرید:

      http://digispark.ir/raspberry-pi-telegram-bot-iot/

      http://digispark.ir/telegram-bot-iot-arduino/

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

    • سلام
      در این آموزش برای ارتباط بین دو سیستم، از نرم افزار نود رد استفاده شده است. بنده از دو برد رزبری پای استفاده کرده ام . از یک نرم افزار نود رد به عنوان فرستنده و دیگری به عنوان گیرنده استفاده کرده ام. میتوانید یکی از نود رد ها را روی ویندوز اجرا کنید.

        • توجه داشته باشید برای هر نود فقط یک تاپیک برای ارسال و دریافت دیتا میتوانید تعریف کنید. برای هر مقادیر نود جداگانه تعریف کنید تا دیتا تفکیک شده باشد.

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

    • سلام
      از پیشنهاد شما ممنونم.
      حتما بررسی خواهم کرد و در صورت امکان آموزش داده خواهد شد.

  • سلام
    با تشکر از مطالب خوب شما,می خواستم بدونم کدام برد (آردوینو,رزبری پای)برای کارهای عملی مناسب تر هست.

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

  • سلام
    آیا امکان ارسال عکس هم از طریق mqtt وجود دارد؟
    و اگر امکان دارد چگونه میتوان عکس دریافت شده را در ui نمایش داد.

  • سلام، من با اکانتم به وب سایت لاگین میکنم ولی وقتی این مطلب رو میخوام بخونم در قسمت تنظیمات نود ورودی پیغام: “جهت دسترسی به این بخش از پروژه، اسپارکر پلاس شوید.” نمایش داده میشود. لطفا راهنمایی نمایید.

    • با سلام
      این موضوع به علت اینکه صفحات سایت در مرورگر شما کش شده، بوجود آمده است. کافیست چندبار در هر صفحه‌ای که این مشکل را دارد Ctrl+F5 جهت رفرش شدن، انجام دهید.

  • سلام خسته نباشید
    آیا میشه از ماژول سیم کارت به جای ماژول وای‌فای برای mqttاستفاده کرد
    ماژول های سیم کارت میتونم با mqttارتباط برقرار کنن؟
    امکان ایجاد یک پروژه با یک ماژول سیم کارت ونود mqtt در محیط نود رد هستش؟

    • با سلام
      نود MQTT جهت دریافت و ارسال پیام می‌باشد و با استفاده از تاپیک میتوان مقادیر و String های مختلفی را به آن نسبت داد.

  • سلام خسته نباشید من یه سرور Mosquitto ساختم ومیخوام دیتای دو رزبری پای رو به هم انتقال بدم ولی وقتی در نود رد رزبری پای ها میرم یکی connectedمیشه اون یکی disconnected میشه وبرعکس کلا یدون connected میمونه اون یکی فوراdisconnected میشه؟علت چی هستش؟

    • با سلام
      بنده متوجه نشدم منظور شما از دیس کانکت نود رد است و یا نود های تنظیم MQTT? توضیح دهید تا بررسی شود.

  • سلام من یه سرور Mosquitto ساختم ومیخوام دیتای دو رزبری پای رو به هم انتقال بدم ولی وقتی در نود رد رزبری پای ها میرم یکی connectedمیشه اون یکی disconnected میشه وبرعکس کلا یدون connected میمونه اون یکی فوراdisconnected میشه؟علت چی هستش؟

  • یه نود فرستنده در یک سیستم و یه نود گیرنده در سیستم دیگری هستش
    نود های mqttنود رد منظورم هستس
    دو تا باهم نمیتونن وصل شن یکی وصل میشه اون یکی قطع میشه

  • سلام خسته نباشید – من یک مشکلی جهت راه اندازی دارم – من روی یک رزبری پای از طریق Node red پروتوکل Mqtt با چند ماژول ارتباط برقرارکردم و به درستی کار میکرد بدون مشکل – از رو Node red ا ومدم بکاپ گرفتم و روی یک رزبری جدید اجراکردم ولی نمیدون چرا تبط برقرار نمیشه با سرور Mqtt – از داخل رزبری تست کردم اوکی بود ولی از طریق شبکه مشکل داره . لطفا راهنمای بفرمیید

    • با سلام
      اجرای پروژه در یک رزبری پای جدید اگر الگوها رعایت شده باشد، هیچ تداخلی ایجاد نمی‌کند. موارد را در رزبری پای جدید از تنظیمات گرفته تا آی پی ها یک بار بررسی کنید.