فهرست مطالب:

نحوه استفاده از MQTT با Raspberry Pi و ESP8266: 8 مرحله (همراه با تصاویر)
نحوه استفاده از MQTT با Raspberry Pi و ESP8266: 8 مرحله (همراه با تصاویر)

تصویری: نحوه استفاده از MQTT با Raspberry Pi و ESP8266: 8 مرحله (همراه با تصاویر)

تصویری: نحوه استفاده از MQTT با Raspberry Pi و ESP8266: 8 مرحله (همراه با تصاویر)
تصویری: راه‌اندازی فول نود بیتکوین با استفاده از رزبری پای ۴ و پلتفرم آمبرل 2024, ژوئن
Anonim
نحوه استفاده از MQTT با Raspberry Pi و ESP8266
نحوه استفاده از MQTT با Raspberry Pi و ESP8266

در این دستورالعمل ، من توضیح خواهم داد که پروتکل MQTT چیست و چگونه از آن برای برقراری ارتباط بین دستگاه ها استفاده می شود. سپس ، به عنوان یک تظاهرات عملی ، نحوه تنظیم یک سیستم ساده دو سرویس گیرنده را به شما نشان خواهم داد ، جایی که یک ماژول ESP8266 پیام ارسال می کند هنگامی که دکمه ای فشار داده می شود به برنامه پایتون بروید. به طور خاص ، من از یک ماژول Adafruit HUZZAH برای این پروژه ، یک Raspberry Pi و یک کامپیوتر رومیزی استفاده می کنم. Raspberry Pi به عنوان کارگزار MQTT عمل می کند و سرویس گیرنده Python از یک رایانه رومیزی جداگانه اجرا می شود (اختیاری ، زیرا این می تواند بر روی Raspberry Pi اجرا شود).

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

قطعات مورد نیاز

  • 1 عدد Raspberry Pi ، متصل به یک شبکه محلی (در حال اجرا Jessie)
  • 1 عدد ماژول ESP8266 (Adafruit HUZZAH)
  • 1 عدد تخته نان
  • 3 عدد سیم بلوز (مرد به مرد)
  • 1 عدد دکمه فشاری
  • مقاومت 1 x 10k اهم (کد رنگ قهوه ای-مشکی-نارنجی)

من این دستورالعمل را ایجاد کردم ، زیرا MQTT همیشه به عنوان یک پروتکل به من علاقه مند بوده است و می توان از روش های مختلف استفاده کرد. با این حال ، به نظر می رسد نمی توانم در مورد نحوه کدگذاری دستگاه ها برای استفاده از آن فکر کنم. این به این دلیل بود که من نمی دانستم/نمی فهمم در واقع چه چیزی برای گرفتن "سلام ، جهان!" من اتفاق می افتد. از دستگاه A و ارسال آن به دستگاه B. بنابراین ، من تصمیم گرفتم این دستورالعمل را بنویسم تا (امیدوارم) نحوه کارکرد آن را به شما آموزش دهم و همچنین درک خودم را از آن تقویت کنم!

مرحله 1: MQTT چیست؟

MQTT چیست؟
MQTT چیست؟

MQTT یا MQ Telemetry Transport یک پروتکل پیام رسانی است که به چندین دستگاه اجازه می دهد با یکدیگر صحبت کنند. در حال حاضر ، این پروتکل محبوب اینترنت اشیا است ، اگرچه از آن برای اهداف دیگری استفاده شده است - به عنوان مثال ، مسنجر فیس بوک. جالب اینجاست که MQTT در سال 1999 اختراع شد - به این معنی که آن به اندازه من قدیمی است!

MQTT بر اساس این ایده است که دستگاه ها می توانند موضوعات را منتشر یا مشترک شوند. بنابراین ، به عنوان مثال. اگر دستگاه شماره 1 دما را از طریق یکی از سنسورهای خود ثبت کرده باشد ، می تواند پیامی را که حاوی مقدار دمای ثبت شده در یک موضوع (به عنوان مثال "دما") است ، منتشر کند. این پیام به یک بروکر MQTT ارسال می شود ، که می توانید آن را به عنوان یک سوئیچ/روتر در یک شبکه محلی در نظر بگیرید. هنگامی که کارگزار MQTT پیام را دریافت کرد ، آن را به هر دستگاهی (در این مورد ، دستگاه شماره 2) که مشترک یک موضوع هستند ارسال می کند.

در این پروژه ، ما موضوعی را با استفاده از ESP8266 منتشر می کنیم و یک اسکریپت پایتون ایجاد می کنیم که مشترک این موضوع باشد ، از طریق Raspberry Pi که به عنوان کارگزار MQTT عمل می کند. مزیت بزرگ MQTT این است که سبک است ، بنابراین برای اجرا بر روی میکروکنترلرهای کوچک مانند ESP8266 مناسب است ، اما به طور گسترده ای نیز در دسترس است - بنابراین ما می توانیم آن را با اسکریپت پایتون نیز اجرا کنیم.

امیدوارم در پایان این پروژه ، درک درستی از MQTT و نحوه استفاده از آن برای پروژه های خود در آینده داشته باشید.

مرحله 2: نصب MQTT Broker بر روی Raspberry Pi

نصب MQTT Broker بر روی Raspberry Pi
نصب MQTT Broker بر روی Raspberry Pi
نصب بروکر MQTT بر روی Raspberry Pi
نصب بروکر MQTT بر روی Raspberry Pi
نصب بروکر MQTT بر روی Raspberry Pi
نصب بروکر MQTT بر روی Raspberry Pi

همانطور که در مرحله قبل توضیح داده شد ، برای راه اندازی سیستم MQTT ما به یک کارگزار نیاز داریم. برای Raspberry Pi ، ما از کارگزار MQTT "Mosquitto" استفاده خواهیم کرد. قبل از نصب این ، همیشه بهتر است رزبری پای خود را به روز کنیم.

sudo apt-get update

sudo apt-get upgrade

پس از انجام این کار ، بسته های پشه و سپس پشه های مشتری را نصب کنید.

sudo apt -get mosquitto -y را نصب کنید

sudo apt-get نصب mosquitto-clients -y

پس از اتمام نصب این دو بسته ، ما نیاز به پیکربندی کارگزار داریم. فایل پیکربندی کارگزار پشه در آدرس /etc/mosquitto/mosquitto.conf قرار دارد ، بنابراین این فایل را با ویرایشگر متن مورد علاقه خود باز کنید. اگر ویرایشگر متن مورد علاقه خود را ندارید یا نحوه استفاده از ویرایشگرهای خط فرمان را نمی دانید ، من از نانو استفاده می کنم ، بنابراین می توانید موارد زیر را دنبال کنید:

sudo nano /etc/mosquitto/mosquitto.conf

در انتهای این فایل ، باید خط زیر را ببینید:

include_dir /etc/mosquitto/conf.d

این خط را حذف کنید. خطوط زیر را به انتهای فایل اضافه کنید.

allow_anonymous false

password_file/etc/mosquitto/pwfile listener 1883

با تایپ کردن آن خطوط ، ما به mosquitto می گوییم که نمی خواهیم کسی به کارگزار ما وصل شود که نام کاربری و رمز عبور معتبری ارائه ندهد (ما در یک ثانیه این موارد را تنظیم می کنیم) و ما می خواهیم پشه به پیام های شماره پورت 1883 گوش دهید.

اگر نمی خواهید کارگزار به نام کاربری و گذرواژه نیاز داشته باشد ، دو خط اول را که اضافه کردیم (یعنی اجازه دهید_ ناشناس … و رمز عبور_فایل …) را وارد نکنید. اگر این کار را انجام داده اید ، به راه اندازی مجدد Raspberry Pi بروید.

حالا آن فایل را ببندید (و ذخیره کنید). اگر از نمونه نانو پیروی می کنید ، CTRL+X را فشار دهید و در صورت درخواست Y را تایپ کنید.

از آنجا که ما به پشه فقط گفتیم که کاربرانی که سعی می کنند از کارگزار MQTT استفاده کنند باید احراز هویت شوند ، اکنون باید به mosquitto بگوییم نام کاربری و رمز عبور چیست! بنابراین ، دستور زیر را تایپ کنید - نام کاربری را با نام کاربری که می خواهید جایگزین کنید - سپس پسوردی را که می خواهید وارد کنید (توجه داشته باشید: اگر هنگام ویرایش فایل پیکربندی ، یک مسیر password_file دیگر مشخص کرده اید ، مسیر زیر را با دستور زیر جایگزین کنید: یکی که استفاده کردی)

sudo mosquitto_passwd -c/etc/mosquitto/pwfile نام کاربری

همانطور که ما فقط فایل پیکربندی mosquitto را تغییر داده ایم ، باید Raspberry Pi را راه اندازی مجدد کنیم.

راه اندازی مجدد sudo

هنگامی که راه اندازی مجدد Raspberry Pi به پایان رسید ، باید یک کارگزار MQTT کاملاً فعال داشته باشید! در مرحله بعد ، ما سعی می کنیم با آن تعامل داشته باشیم ، با استفاده از تعدادی دستگاه/روش مختلف!

مرحله 3: آزمایش کارگزار

آزمایش کارگزار
آزمایش کارگزار

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

برای آزمایش کارگزار ، باید دو پنجره خط فرمان را باز کنید. اگر از Putty یا سرویس گیرنده SSH دیگری استفاده می کنید ، این کار به سادگی باز کردن یک پنجره SSH دیگر و ورود به سیستم معمولی است. اگر از پایانه UNIX به Pi خود دسترسی دارید ، این دقیقاً یکسان است. اگر از Raspberry Pi به طور مستقیم استفاده می کنید ، باید دو پنجره ترمینال را در حالت GUI باز کنید (دستور startxcan برای راه اندازی GUI استفاده می شود).

اکنون که دو پنجره را باز کرده اید ، می توانیم آزمایش را آغاز کنیم. در یکی از دو پایانه ، دستور زیر را تایپ کنید ، نام کاربری و رمز عبور را با مواردی که در مرحله قبل تنظیم کرده اید جایگزین کنید.

mosquitto_sub -d -u نام کاربری -P password -t test

اگر تصمیم دارید در مرحله قبل نام کاربری و گذرواژه تعیین نکنید ، از این پس پرچم های -u و -P را در دستورات نادیده بگیرید. بنابراین ، به عنوان مثال ، فرمان mosquitto_sub به صورت زیر خواهد بود:

mosquitto_sub -d -t test

دستور mosquitto_sub در یک موضوع مشترک می شود و پیامهایی را که به موضوع مشخص شده ارسال می شوند در پنجره ترمینال نمایش می دهد. در اینجا ، -d به معنی حالت اشکال زدایی است ، بنابراین همه پیامها و فعالیتها روی صفحه نمایش داده می شوند. -u و -P باید خود را توضیح دهند. در نهایت ، -t نام موضوعی است که می خواهیم در آن مشترک شویم - در این مورد ، "تست".

در مرحله بعد ، در پنجره ترمینال دیگر ، ما سعی می کنیم پیامی را برای موضوع "تست" منتشر کنیم. برای تغییر نام کاربری و رمز عبور ، موارد زیر را تایپ کنید:

mosquitto_pub -d -u نام کاربری -P رمز عبور -t test -m "Hello، World!"

وقتی دکمه enter را فشار می دهید ، باید پیام خود را "سلام ، جهان!" را مشاهده کنید. در اولین پنجره ترمینال مورد استفاده (برای اشتراک) ظاهر می شود. اگر چنین است ، شما آماده هستید تا کار بر روی ESP8266 را شروع کنید!

مرحله 4: راه اندازی ESP8266 (Adafruit HUZZAH)

راه اندازی ESP8266 (Adafruit HUZZAH)
راه اندازی ESP8266 (Adafruit HUZZAH)
راه اندازی ESP8266 (Adafruit HUZZAH)
راه اندازی ESP8266 (Adafruit HUZZAH)
راه اندازی ESP8266 (Adafruit HUZZAH)
راه اندازی ESP8266 (Adafruit HUZZAH)
راه اندازی ESP8266 (Adafruit HUZZAH)
راه اندازی ESP8266 (Adafruit HUZZAH)

این مرحله اگر مختص Adafruit HUZZAH باشد (همان چیزی است که من برای تکمیل این پروژه استفاده می کنم). اگر از دستگاه Arduino / ESP8266 متفاوتی استفاده می کنید ، ممکن است بخواهید این مرحله را رد کنید. با این حال ، توصیه می کنم آن را بدون مطالعه بخوانید ، فقط در صورتی که اطلاعاتی در اینجا وجود داشته باشد که ممکن است برای شما مناسب باشد.

برای این پروژه ، من قصد دارم HUZZAH را با نرم افزار Arduino برنامه نویسی کنم. بنابراین ، اگر قبلاً نصب نکرده اید ، مطمئن شوید که نرم افزار Arduino (جدیدتر از 1.6.4) را نصب کنید. می توانید آن را از اینجا بارگیری کنید.

پس از نصب نرم افزار Arduino ، آن را باز کرده و به مسیر File-> Preferences بروید. در اینجا باید (نزدیک پایین پنجره) یک کادر متنی با برچسب: "آدرس های اضافی مدیران تابلوها" را مشاهده کنید. در این کادر متنی ، پیوند زیر را کپی و جایگذاری کنید:

arduino.esp8266.com/stable/package_esp8266com_index.json

برای ذخیره تغییرات ، روی OK کلیک کنید. اکنون Board Board (Tools-> Board-> Board Board) را باز کرده و ESP8266 را جستجو کنید. بسته esp8266 by ESP8266 Community را نصب کنید. نرم افزار آردوینو را مجددا راه اندازی کنید.

اکنون ، قبل از اینکه بتوانیم برد را برنامه ریزی کنیم ، باید چند گزینه مختلف را انتخاب کنیم. در گزینه منوی Tools ، Adafruit HUZZAH ESP8266 for Board ، 80 مگاهرتز را برای فرکانس CPU انتخاب کنید (در صورت تمایل برای اورکلاک کردن از 160 مگاهرتز ، اما در حال حاضر من از 80 مگاهرتز استفاده می کنم) ، 4 مگابایت (3M SPIFFS) برای اندازه فلش و 115200 برای سرعت بارگذاری. همچنین ، مطمئن شوید که پورت COM را که استفاده می کنید انتخاب کنید (این به تنظیمات شما بستگی دارد).

قبل از بارگذاری هر کد ، باید مطمئن شوید که HUZZAH در حالت بوت لودر است. برای فعال کردن این مورد ، دکمه روی برد را با علامت GPIO0 نگه دارید ، و در حالی که این حالت نگه داشته شده است ، دکمه Reset را نیز نگه دارید. سپس دکمه Reset و سپس GPIO0 را رها کنید. اگر این کار را به درستی انجام داده اید ، چراغ قرمز رنگی که با فشار دادن GPIO0 روشن شد اکنون باید کم نور باشد.

برای بارگذاری کد روی میکروکنترلر ، ابتدا مطمئن شوید که HUZZAH در حالت بوت لودر است ، سپس به سادگی روی دکمه بارگذاری در Arduino IDE کلیک کنید.

اگر در راه اندازی HUZZAH مشکل دارید ، اطلاعات بیشتر را می توانید در آموزش خود Adafruit پیدا کنید.

مرحله 5: برنامه نویسی ESP8266

برنامه نویسی ESP8266
برنامه نویسی ESP8266

اکنون برنامه نویسی ESP8266 را شروع می کنیم ، اما قبل از شروع ، باید کتابخانه های زیر را در مدیر کتابخانه Arduino نصب کنید (Sketch-> Include Libraries-> Manage Libraries)

  • گزاف گویی 2
  • PubSubClient

هنگامی که آن کتابخانه ها را نصب کردید ، می توانید کدی را که در این دستورالعمل (MQTT_Publish.zip) قرار داده ام اجرا کنید. من مطمئن شدم که در مورد آن نظر می دهم تا بتوانید بفهمید که هر بخش در حال انجام چه کاری است ، و امیدوارم این شما را قادر سازد تا آن را با نیازهای خود تطبیق دهید.

به یاد داشته باشید که ثابت های بالای کد را تغییر دهید تا ESP8266 شما بتواند به شبکه WiFi شما و کارگزار MQTT شما (Raspberry Pi) متصل شود.

اگر تصمیم دارید نام کاربری و رمز عبور را برای کارگزار MQTT تعیین نکنید ، فایل MQTT_PublishNoPassword.zip را بارگیری کنید.

مرحله 6: نصب Python Client (paho-mqtt)

نصب Python Client (paho-mqtt)
نصب Python Client (paho-mqtt)

خوشبختانه ، این مرحله بسیار ساده است! برای نصب سرویس گیرنده پشه mosquitto ، کافی است موارد زیر را در خط فرمان (Linux/Mac) یا حتی خط فرمان (Windows) تایپ کنید.

pip نصب paho-mqtt

توجه: در صورتی که مشخص نکرده اید که میخواهید pip نصب شود و هنگام نصب پایتون Python به متغیر PATH شما اضافه شود ، ممکن است خط فرمان Windows با مشکل مواجه شود. راه های زیادی برای رفع این مشکل وجود دارد ، اما من فکر می کنم فقط نصب مجدد پایتون ساده ترین راه است. اگر شک دارید - یک گوگل به آن بدهید!

مرحله 7: مشتری پایتون - اشتراک

مشتری پایتون - اشتراک
مشتری پایتون - اشتراک

در این مرحله ، ما قصد داریم اسکریپت پایتون را (یا روی خود رزبری پای یا روی رایانه دیگری که به شبکه متصل است) تنظیم کنیم تا همه پیامهایی که توسط ESP8266 به موضوع MQTT ارسال می شوند (منتشر شده) را مدیریت کند.

من کد پایتون را در زیر (PythonMQTT_Subscribe.py) قرار داده ام ، که توضیح داده شده است تا به شما در درک آنچه در جریان است کمک کند ، اما برخی از ویژگی های اصلی را نیز در اینجا توضیح خواهم داد.

اگر قبلاً نام کاربری و رمز عبور را برای اتصال MQTT تعیین نکرده اید ، به جای آن فایل PythonMQTT_SubscribeNoPassword.py را بارگیری کنید.

مرحله 8: برقراری ارتباط بین دستگاه های ESP8266

ارتباط بین دستگاههای ESP8266
ارتباط بین دستگاههای ESP8266

برای مثال ، اگر می خواهید یک شبکه اینترنت اشیا راه اندازی کنید ، ممکن است بخواهید بین دستگاه های ESP8266 ارتباط برقرار کنید. خوشبختانه ، این خیلی پیچیده تر از کدی نیست که قبلاً نوشتیم ، اما چند تغییر قابل توجه وجود دارد.

برای ارسال یک ESP به دیگری ، ESP اول باید در موضوع منتشر شود و ESP دوم باید در آن موضوع مشترک شود. این تنظیم امکان مکالمه یک طرفه را فراهم می کند - ESP (1) تا ESP (2). اگر می خواهیم ESP (2) با ESP (1) صحبت کند ، می توانیم موضوع جدیدی ایجاد کنیم که ESP (2) آن را منتشر می کند و ESP (1) مشترک می شود. خوشبختانه ، ما می توانیم چندین مشترک در یک موضوع داشته باشیم ، بنابراین اگر می خواهید داده ها را به تعدادی از سیستم ها ارسال کنید ، فقط به یک مبحث (که همه آنها مشترک هستند ، به جز دستگاهی که داده ها را ارسال می کند ، نیاز دارید). منتشر شود)

اگر به کمک نیاز دارید تا بفهمید هر دستگاهی باید چه کار کند ، در مورد سیستم به عنوان اتاق مردم فکر کنید. اگر ESP (1) در حال انتشار است ، می توانید این دستگاه را به عنوان "بلندگو" تصور کنید و هر دستگاهی که در این موضوع مشترک است در این مثال "شنونده" است.

من تعدادی کد زیر را در زیر آورده ام ، که نشان می دهد چگونه ESP8266 می تواند در یک موضوع مشترک شود و به پیامهای خاصی گوش می دهد - 1 و 0. در صورت دریافت 1 ، LED روی صفحه (برای HUZZAH - GPIO 0) روشن می شود به در صورت دریافت 0 ، این LED خاموش می شود.

اگر می خواهید داده های پیچیده تری را پردازش کنید ، این کار باید در عملکرد ReceivedMessage انجام شود (کد را ببینید).

برای پروژه های خود ، اگر هم نیاز به ارسال و دریافت داده دارید ، می توانید عملکرد انتشار نمونه قبلی را در کدی که در این مرحله گنجانده شده است ، گنجانید. این باید در تابع حلقه اصلی Arduino () انجام شود.

به یاد داشته باشید که متغیرهای بالای کد را متناسب با شبکه خود تغییر دهید!

توصیه شده: