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

ارتباط آردوینو با نرم افزار اینترنت اشیاء Node Red با پروتکل MQTT

Arduino-MQTT-Protocol---Digispark
نوشته شده توسط اروند طباطبایی

پروتکل MQTT روش تبادل پیام مناسب برای بستر اینترنت اشیاء IOT است. پروتکل MQTT بسیار سبک و کم حجم است، همین دو ویژگی به همراه امنیت قابل توجه این پروتکل، باعث شده انتخاب مناسبی برای پروژه‌های اینترنت اشیاء IOT باشد. این پروتکل دارای دو نوع ارتباط رمزنگاری شده که همان پورت ۸۸۸۳ و ارتباط رمزنگاری نشده یا همان پورت ۱۸۸۳ می‌باشد. پروتکل MQTT روی یک سرور نصب می‌شود و سپس از طریق MCU یا همان Main Control Unit نوعی ارتباط ماشین به ماشین برقرار می‌کند. این ارتباط دو طرفه است، از MCU به سرور و از سرور به MCU صورت می‌گیرد. در این آموزش با استفاده از یک برد برپایه تراشه ESP8266 ارتباط با پروتکل MQTT به سمت سرور برقرار شده، سپس از سمت سرور با پروتکل MQTT دیتا به سمت برد رزبری پای Raspberry Pi در نرم افزار اینترنت اشیاء نود رد Node Red ارسال می‌شود. این ارتباط بین رزبری پای و برد ESP8266 به صورت دو طرفه با سرور برقرار می‌شود. در ادامه این آموزش با مرجع تخصصی اینترنت اشیاء IOT به زبان فارسی دیجی اسپارک همراه باشید.

 

راه اندازی MQTT در نرم افزار Node Red

چنانچه با نرم افزار اینترنت اشیاء نود رد Node Red آشنایی ندارید، حتما پست آموزش کار با نرم افزار اینترنت اشیاء Node Red که توسط همکارم نوشته شده است، را مطالعه کنید. در پست مربوطه شیوه راه اندازی نود رد Node Red کاملا آموزش داده شده است. سپس باید از نودهای MQTT که به صورت پیش فرض در این نرم افزار نصب هستند، استفاده کنید. همانند تصویر زیر، نود mqtt گیرنده را وارد صفحه کنید و با دوبار کلیک روی آن، تنظیمات مربوطه باز می‌شود.

ارتباط آردوینو با نرم افزار اینترنت اشیاء Node Red با پروتکل MQTT-دانشجوکیت

پس از انجام تنظیمات مربوطه، تایید کنید. سپس نود Debug را وارد صفحه کنید. از خروجی نود MQTT به آن اتصال دهید. پس از انجام این مراحل Deploy کنید. حال باید کدهای آردوینو Arduino را که برای برد کنترل اینترنت اشیاء Wemos D1 mini نوشته شده است، را کامپایل و آپلود کنید.

 

کدهای برنامه:

 

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

 

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

 

پس از اینکه کدها در آردوینو آپلود شد، سریال مانیتور آردوینو Arduino IDE را باز کنید. همانند تصویر زیر به صورت اتوماتیک شروع به ارسال پیام Publish message: Check Digispark.ir می‌کند. سپس پس از دریافت پیام توسط برنامه نود رد، خط Message arrived [digispark] Check Digispark.ir را نمایش می‌دهد. این برنامه به صورت منظم شروع به ارسال این پیام و در ازای دریافت پیام دوم را نمایش‎‌ می‌دهد. این پیام را در قسمت دیباگ نرم افزار نود رد Node Red می‌توانید مشاهده کنید.

ارتباط آردوینو با نرم افزار اینترنت اشیاء Node Red با پروتکل MQTT -دانشجوکیت

 

مدیریت برد Wemos ESP با پروتکل MQTT

کافیست در نرم افزار نود رد Node Red از نود MQTT فرستنده به همراه کلید UI استفاده کنید. به این صورت ابتدا نود UI Switch را وارد صفحه کنید. سپس نود MQTT فرستنده را وارد صفحه کنید. به هم اتصال دهید. تنظیمات نود MQTT همانند مرحله قبلی انجام گیرد. به تصویر زیر توجه کنید.

ارتباط آردوینو با نرم افزار اینترنت اشیاء Node Red با پروتکل MQTT-دانشجوکیت

در این مرحله نرم افزار نودرد Node Red شما در هرجایی که باشد، روی سرور، لپ تاپ و یا برد رزبری پای Raspberry Pi با دسترسی به آی پی آن، می‌توانید به برد Wemos D1 Mini با تراشه ESP8266 فرمان دهید. در تصویر زیر رابط گرافیکی خروجی نرم افزار نود رد که در بالا انجام دادیم را می‌توانید ببینید.

 

MQTT-with-esp8266-Wemos-d1-Mini UI Node red-digispark

با تحریک کلید در رابط UI می‌توانید شیلد رله روی برد Wemos D1 Mini را تحریک کنید. از راه دور با پروتکل MQTT به رله فرمان دهید. جهت درک بهتر موضوع حتما ویدیو یک دقیقه‌ای زیر را ببینید.

 

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

 

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

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

اروند طباطبایی

بنیانگذار دیجی اسپارک: اولین مرجع تخصصی امبدد سیستم به زبان فارسی / کارشناس سئو و تولید محتوا

هرچه می آموزم میبینم که خیلی کم آموختم. علاقه به رباتیک و تکنولوژی دارم. امیدوارم بتونم دانشی را که آموخته‌ام، به روش‌های مختلفی به کاربران علاقمند منتقل کنم.

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

۸۴ دیدگاه

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

    • با سلام و تشکر از توجه شما
      در این آموزش از سرور رایگان ایکلیپس استفاده شده است. که هم در کدهای آردوینو و هم در تنظیمات نرم افزار Node Red آدرس سرور وارد شده است.

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

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

  • آموزش منحصر به فردی بود، امیدوارم دیگر کاربران هم متوجه بشوند. بنده که خیلی لذت بردم، شماها بینظیرید
    درباره Node-Red چطور میشه بیشتر یاد بگیرم؟

  • سلام
    جناب مهندس امکان استفاده از ssr بجای رله توی پروژه های اینترنت اشیا هست یا خیر؟
    بطور کلی میشه ssr رو جایگزین رله کرد؟

  • در مورد اصل کلی پروژه اینترنت اشیا تو این فاز یه سوال مطرحه
    ما میگیم پروژه کنترل وسایل از طریق اینترنت اما در واقع این فضایی که داریم ، میایم با وای فای (ssid , password) محلی تنطیمش می کنیم . اینطوری اگه تو خونه یا محلی که اون وای فای لوکال هست نباشیم عملا نمی تونیم کنترل کنیم. به جای اون باید از ip اختصاصی استفاده کنیم ؟ راه حلش چیه ؟ کتابخونه دیگه ای هست ؟

      • سلام
        ممنون
        با ربات تلگرام درست شد ولی برای پروژه ام حتما به node red نیاز دارم.
        من با mqtt همین پروژه رو اجرا کردم در وای فای محلی جواب میده ولی اصلا آدرس
        http : my|-ip:1880
        رو در مرورگر ها وقتی در وای فای محلی نیستم نمیاره. اما در وای فای محلی خیلی خوب با گوشی فرمان رو اجرا میکنه. تنظیمات خاصی باید برای mqtt انجام بشه ؟

        • با سلام مجدد
          در این مورد یک نکته را دقت داشته باشید که پروتکل MQTT یک روش رمزنگاری و ارسال دیتا است و ربطی به آی پی لوکال و رابط گرافیکی ندارد. شما در مورد رابط گرافیکی با نودرد Node Red در محیط لوکال میتوانید ارتباط برقرار کنید ولی برای برقراری ارتباط Over IP نیاز به آی پی استاتیک و یا DNS دارید. که آموزش این‌ها در حال تولید است و به زودی در سایت منتشر میشود. ولی روش بهینه تر برای استفاده از رابط گرافیکی بدون نیاز به آی پی استاتیک استفاده از ربات تلگرام است.

  • سلام من دنبال یه موضوع کامل و جامع در ارتباط با خانه هوشمند برای پروژه کارشناسیم میگردم که بتونم یا یه برد بسازم یا با برد های آماده پیاده سازیش کنم میشه کمکم کنید ممنونم

    • سلام
      برای نصب نود ui وارد منو Node-RED شوید. سپس گزینه manage palette را انتخاب کنید. در صفحه باز شده در قسمت install، کلید واژه ui را سرچ کنید و سپس contrib-ui را نصب کنید.

  • سلام خسته نباشید ایا میشه خودمون یک سرور برای mqttبسازیم که برای انتقال داده نیازی به روشن بودن اینترنت نداشته باشد

    • با سلام
      ضمن تشکر از توجه شما، بله این امکان وجود دارد، پروتکل mqtt اپن سورس است و میتوانید روی یک سرور لوکال هم نصب کنید. البته بنده در این زمینه به صورت عملی کار نکرده‌ام.

  • ببخشید من چون زیاد با برنامه نویسی اردوینو کار نکردم میخواستم که اگه ممکنه برنامه ای را قرار بدین که بشه نصف پین های دیجیتال wemos d1 miniرا به عنوان ورودی دیجیتال و نصف دیگرش را به عنوان خروجی دیجیتال بنویسید.
    اگه یادتون باشه تویه گروه تلگرامیتون هم مطرح کردم که قرار شد از اینجا درخواست بدم.

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

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

        • در این خصوص باید دانش برنامه نویسی برای آردوینو داشته باشید. به صورت کلی سطر ۹ کدها را بررسی کنید؛ در ابتدای برنامه پین مربوطه ارزش گذاری شده به عنوان relaypin که این مورد را میتوانید تغییر دهید یا مقادیر دیگری اضافه کنید. پیشنهاد می‌کنم کلید واژه relaypin را ادامه کدها بررسی کنید و با تحلیل آن به نتیجه میرسید. چنانچه کد مربوطه را توسعه دادید و مشکل داشتید از همین طریق اعلام کنید؛ همچنین می‌توانید مانند دیگر کاربران این کد را پس از تکمیل برای انتشار در سایت به ما ارسال کنید.

  • سلام خسته نباشید ایا میشه ۲ تا خروجی برای wemos d1 mini تعریف کرد و همچنین ۲ تا ورودی که بتونن هر کدوم از ورودی ها یکی از اون خروجی ها رو فعال بکنن؟

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

  • سلام ،ممنون از آموزش عالیتون.من میخواستم بدونم که میتونم چندین آردوینو که مجهز به ماژول های hmtr هستند را به رسیپبری که مجهز به یک ماژول hmtr هست با این پروتکل ارتباط بدم؟؟

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

  • من وقتی UI به برنامه میدم برنامه دچار مشکل میشه (نود رد)
    باید چیکار کنم؟
    و کد if (client.connect(“ESP8266Client”)) دقیقا چیکار میکنه چون وقتی تغییرش میدیم اوضاع تغییر میکنه

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

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

  • با سلام
    من دقیقا همین کد هارا روی nodemcu اپلود کردم متاسفانه رله روشن میشه اما خاموش نمیشه در قسمت دیباگ دستور ۰ نمایش داده میشه اما خود رله تغییری نمیکنه
    با تشکر

      • ممنونم از پاسختون
        دقیقا همان publish و subscribe هایی که در ویدیو شما هم هست
        Publish message: Check Digispark.ir #9
        Message arrived [digispark] Check Digispark.ir #9

        یکبار هم LOW نوشته میشه که رله روشن میشه ولی دیگه تغییری نمیکنه و خاموش روشن نمیشه پیام LOW یا HIGH هم در سریال نمی آید ولی همچنان mqtt متصل هست.

          • ممنون
            دقیقا اتصالات مثل شما برقرار شده هر دو نود MQTT هم کانتک هستند؟
            در ورژن فعلی نود رد باید نوع خروجی سوییچ را مشخص کنیم من روی number گذاشتم درسته؟ یا اسم و گروه سوییچ مهم است؟

  • با سلام
    من از طریق سریال تونستم ارتباط بین آردوینو و node-red را برقرار کنم ولی از طریق MQTT نتوانستم. در node-Red , نود MQTT در حالت connecting باقی می ماندو در آردوینو هم دستور(Serial.print(client.state());) مقدار -۲ را نمایش می دهدو اتصال برقرار نمی شود. بنظرم تنظیمات MQTT را درست انجام نداده ام فقط IP و پورت سرور را در node-red همان Ip و پورت کامپیوتری که node-red برروی آن نصب است را داده ام . ممنون می شوم اگر راهنمایی بفرمائید

      • تشکر از سایتتون و زحماتتون
        ولی مشکل از این بود که broker نداشتم
        نود mosca را نصب و کانفیگ کردم مشکلم حل شد.

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

  • سلام
    ضمن تشکر از آموزشهای بسیار خوبتون ، سوالی داشتم اینکه آیا با راه اندازی اینترنت اشیاء بازهم نیاز به اینترنت IDSL برای اتصال و آنلاین شدن هست یا با اینترنت اشیاء دیگه نیازی به آن نیست ؟ و یه سوال دیگه اینکه اینترنت اشیاء مختص استخراج ارزهای دیجیتاله یا برای خیر؟

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

  • با سلام من اشتراک اسپارک پلاس خریدم منتظر دریافت ایمیل تاییدیه هستم لطفا مجدد برام ایمیل تایید ارسال کنید چون نمیتونم از منابع سایت استفاده کنم
    با تشکر

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

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

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

  • با سلام از سایت بسیار آموزنده شما
    من تمام مراحل ارتباط node-red با پروتکل MQTT با برد wemos D1 انجام دادم و در cmd همچی از جمله نود رد و mquitto در حال اجرا می باشند ولی وقتی برنامه رو روی wemos d1 می ریزم آی پی dhcp از مودم به wemos d1 اختصاص پیدا می کنه ولی مدام پیغام تلاش برای اتصال به mqtt broker توی سریال مانیتور آردوینو می دهد یعنی ویموس به نودرد وصل نمی شه به نظرتون مشکل از چیه
    البته من آی پی سرور نود رد رو در مودم استاتیک کردم و از نصب بودن نودرد روی اون مطمئنم
    با تشکر

  • سلام وقتتون بخیر
    این ند mqtt را وارد ند رد میکنید قسمت سرور بایس چی بزنم؟
    شنیدم Url اون سروری که ند رد توش هست بایس بزنم
    این url چیه چجوری پیدا کنم؟؟

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

  • سلام خسته نباشید – آیا این کد نمونه را باید روی ماژول Esp8266 آپلود کنم و طبق آن Node red اوکی کنم ؟؟؟؟؟؟؟؟؟؟ حالا آگر درسته من این کار را انجام دادم ولیبه این ارور برخورد میکنم
    exit status 1
    ‘D1’ was not declared in this scope
    لطفا راهنمایی بفرمایید. ممنونم

    • با سلام
      دقت داشته باشید که اگر برد مورد نظر را میخواهید به نسبت آنچه در آموزش آورده شده است، تعویض کنید، طبیعتا بخشی از کدها هم بایستی تغییر کند. این کدها دقیقا با بردی که معرفی شده است سازگاری دارد. عبارت D1 مربوط به آدرس دهی پایه‌ها در برد Wemos یا Nodemcu است. حال اگر برد شما چیز دیگری است. بایستی بر اساس مشخصات همان برد آدرس دهی کنید.

      • سلام ممنونم از پاسخ شما آقای مهندس لطفا راهنمایی بفرمایید من چه تغییراتی را در این کدها ایجاد کنم جهت برد ESP8266 V1.0 که بتوانم به صورت صحیح آپلود کنم .

        • با سلام مجدد
          در حقیقت کد نویسی برای تراشه ۰۱ متفاوت خواهد بود. من این درخواست را به دیگر همکارانم ارجاع میدهم، ولی دقت داشته باشید که احتمالا بایستی کدها تغییراتی داشته باشد.

          • ممنونم – من در حقیقت چند ماژول رله و حرارت دارم که روی آن ESP8266 V1.0 هست حال میخواهم توسط برد رزبری و نرم افزار node red هم کنترل و هم مانیتورینگ کنم و از طریق اینترنت هم قابلیت کنترل و مانیتورنگ داشته باشه-لطفا راهنمایی بفرمایید . سپاس

              • سلام ممنونم از پاسخ شما – من منظور شمارا متوجه نمیشم اینجا لینکی ارسال نشده و قابل مشاهده نیست .

                • با سلام مجدد
                  عذرخواهی میکنم، فراموش کردم لینک ارسال کنم. ولی به صورت کلی خط const int relayPin = D1; را کافیست بجای D1 از ۲ استفاده کنید. سپس پایه مربوطه را به رله متصل کنید. ولی دقت داشته باشید که برای پروگرام کردن ESP01 باید از مبدل USB استفاده کنید و مستقیما کدها را روی آن آپلود کنید. همچنین ولتاژ خروجی برای ماژول رله ۵ ولت کاربردی نیست. حتما بایستی از رله ۳٫۳ ولتی استفاده کنید.

                  • سلام ممنونم از راهنمایی شما . من فقط با تغییر const int relayPin = D1 به D0 وآپلود روی ماژول ESP01 توانستم ارتباط برقرار کنم – حال دو سوال :
                    ۱- من میخواهم از طریق ارتباط mqtt بتوانم چند سنسور حرارتی و رله را که روی آن ماژول ESP01 هست کنترل کنم !!!! با تغییر چه قسمتهایی از این کدها میشه ارتباط برقرار کنم ؟؟؟؟؟؟
                    ۲- برای یک ماژول حرارتی DT11 که روی آن ESP01 هست چه نمونه کدی باید آپلود کنم .چون هرچی جستجو کردم موردی پیدا نشد . همه این موارد جهت یاد آوری برای ارتباط از طریق mqtt به Node Red هست و در آخر مانیتورینگ و کنترل این ماژولها . ممنونم

                    • با سلام مجدد
                      ۱- بایستی کدها را توسعه دهید. به عبارت دیگر بایستی از ابتدا کدها را براساس نیازمندی پروژه بنویسید.
                      ۲- برای این منظور به لینک DHT مراجعه کرده و انواع آموزش‌ها با سنسور DHt را بررسی کنید.

  • سلام خسته نباشید
    من به تعدادی esp 8266 کلید های خانه و پرده رووصل کردم و کنترل میکنم
    تا یک ماه اول مشکلی در ارتباط بین esp ها و نود رد نبود ولی بعد از گذشت یک ماه تقریبا هر دو روز یکبار ارتباط esp ها از طریق mqtt با نود رد قطعه میشه و من مجبورم تک تک برد ها رو ریست کنم تا مشکل حل بشه
    بنظرتون مشکل از کجا میتونه باشه

    • با سلام
      این مشکل برای بنده هم پیش آمده است. ارتباط اینترنت تاثیر گذار است و بایستی برای دیتالاست تدبیر دیگری داشته باشید.

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

    • با سلام
      این مورد تست نشده است. اما ولتاژ و جریان کافی برای سرو موتور را تامین کنید.