Mundarija:

MQTT -ni Raspberry Pi va ESP8266 bilan qanday ishlatish kerak: 8 qadam (rasmlar bilan)
MQTT -ni Raspberry Pi va ESP8266 bilan qanday ishlatish kerak: 8 qadam (rasmlar bilan)

Video: MQTT -ni Raspberry Pi va ESP8266 bilan qanday ishlatish kerak: 8 qadam (rasmlar bilan)

Video: MQTT -ni Raspberry Pi va ESP8266 bilan qanday ishlatish kerak: 8 qadam (rasmlar bilan)
Video: Simple wifi capable microcontrollers - Arduino Nano IoT vs ESP32 vs ESP8266 vs Raspberry Pi Pico W 2024, Noyabr
Anonim
MQTT -ni Raspberry Pi va ESP8266 bilan qanday ishlatish kerak
MQTT -ni Raspberry Pi va ESP8266 bilan qanday ishlatish kerak

Bu yo'riqnomada men MQTT protokoli nima ekanligini va u qurilmalar o'rtasida qanday aloqa o'rnatilishini tushuntiraman, keyin amaliy ko'rsatma sifatida men sizga ESP8266 moduli xabar yuboradigan oddiy ikkita mijozli tizimni sozlashni ko'rsataman. tugma bosilganda Python dasturiga. Xususan, men ushbu loyiha uchun Adafruit HUZZAH moduli, Raspberry Pi va ish stoli kompyuteridan foydalanayapman. Raspberry Pi MQTT vositachisi vazifasini bajaradi va Python mijozi alohida ish stoli kompyuteridan ishlaydi (ixtiyoriy, chunki bu Raspberry Pi -da ishlashi mumkin).

Ushbu ko'rsatmaga amal qilish uchun siz elektronika va Arduino dasturidan qanday foydalanishni bilishingiz kerak bo'ladi. Shuningdek, siz buyruq qatori interfeysidan foydalanishni bilishingiz kerak (Raspberry Pi uchun). Umid qilamanki, siz MQTT nima ekanligini va uni asosiy stsenariyda qanday ishlatishni bilganingizdan so'ng, siz o'zingizning IoT loyihalaringizni yaratishingiz mumkin bo'ladi!

Majburiy qismlar

  • 1 x Raspberry Pi, mahalliy tarmoqqa ulangan (Jessie bilan ishlaydi)
  • 1 x ESP8266 moduli (Adafruit HUZZAH)
  • 1 x non paneli
  • 3 x o'tish simlari (erkak-erkak)
  • 1 x tugma
  • 1 x 10k Ohm qarshilik (jigarrang-qora-to'q sariq rang kodi)

Men bu ko'rsatmalarni yaratdim, chunki MQTT meni har doim protokol sifatida qiziqtirgan va uni ishlatishning turli xil usullari mavjud. Biroq, men uni ishlatish uchun qurilmalarni qanday kodlashni bilmayman. Buning sababi shundaki, men "Salom, dunyo!" A qurilmasidan va uni B qurilmasiga yuboring. Shuning uchun men bu ko'rsatmani yozishga qaror qildim (umid qilamanki) sizga bu qanday ishlashini o'rgataman va bu borada o'z tushunchamni mustahkamlayman!

1 -qadam: MQTT nima?

MQTT nima?
MQTT nima?

MQTT yoki MQ Telemetry Transport - bu bir nechta qurilmalarga bir -biri bilan gaplashishga imkon beruvchi xabar almashish protokoli. Hozirgi vaqtda bu narsalar Interneti uchun mashhur protokoldir, garchi u boshqa maqsadlarda ishlatilgan bo'lsa ham - masalan, Facebook Messenger. Qizig'i shundaki, MQTT 1999 yilda ixtiro qilingan, ya'ni u men kabi eski!

MQTT qurilmalar mavzularni nashr qilishi yoki ularga obuna bo'lishi mumkin degan fikrga asoslangan. Shunday qilib, masalan. Agar 1 -sonli qurilma sensorlardan birining haroratini yozib olgan bo'lsa, u mavzu bo'yicha yozilgan harorat qiymatini o'z ichiga olgan xabarni nashr qilishi mumkin (masalan, "Harorat"). Bu xabar MQTT Brokeriga yuboriladi, uni mahalliy tarmoqdagi kommutator/yo'riqnoma deb hisoblash mumkin. MQTT Broker xabarni olganidan so'ng, uni xuddi shu mavzuga obuna bo'lgan har qanday qurilmaga (bu holda, Qurilma #2) yuboradi.

Ushbu loyihada biz ESP8266 yordamida mavzu nashr etamiz va MQTT brokeri vazifasini bajaradigan Raspberry Pi orqali shu mavzuga obuna bo'ladigan Python skriptini yaratamiz. MQTT -ning ajoyib tomoni shundaki, u engil, shuning uchun u ESP8266 kabi kichik mikrokontrollerlarda ishlash uchun juda mos keladi, lekin u ham keng tarqalgan - shuning uchun biz uni Python skriptida ham ishga tushirishimiz mumkin.

Umid qilamizki, ushbu loyiha oxirida siz MQTT nima ekanligini va kelajakda uni o'zingizning loyihalaringiz uchun qanday ishlatishni tushunasiz.

2 -qadam: MQTT brokerini Raspberry Pi -ga o'rnatish

MQTT brokerini Raspberry Pi -ga o'rnatish
MQTT brokerini Raspberry Pi -ga o'rnatish
MQTT brokerini Raspberry Pi -ga o'rnatish
MQTT brokerini Raspberry Pi -ga o'rnatish
MQTT brokerini Raspberry Pi -ga o'rnatish
MQTT brokerini Raspberry Pi -ga o'rnatish

MQTT tizimini sozlash uchun bizga oldingi qadamda aytilganidek broker kerak. Raspberry Pi uchun biz "Mosquitto" MQTT brokeridan foydalanamiz. Buni o'rnatishdan oldin, Raspberry Pi -ni yangilab turish yaxshidir.

sudo apt-get yangilanishi

sudo apt-get upgrade

Buni qilganingizdan so'ng, chivin va keyin chivin-mijozlar paketlarini o'rnating.

sudo apt -get mosquitto -y ni o'rnating

sudo apt-get mosquitto-mijozlarni o'rnatish -y

Ushbu ikkita paketni o'rnatishni tugatgandan so'ng, biz brokerni sozlashimiz kerak bo'ladi. Chivin brokerining konfiguratsiya fayli /etc/mosquitto/mosquitto.conf manzilida joylashgan, shuning uchun uni sevimli matn muharriri bilan oching. Agar sizda sevimli matn muharriri bo'lmasa yoki buyruq satrining har qanday tahrirlovchisidan qanday foydalanishni bilmasangiz, men nanodan foydalanaman.

sudo nano /etc/mosquitto/mosquitto.conf

Ushbu faylning pastki qismida siz qatorni ko'rishingiz kerak:

o'z ichiga oladi_dir /etc/mosquitto/conf.d

Bu qatorni o'chirib tashlang. Faylning pastki qismiga quyidagi qatorlarni qo'shing.

ruxsat_anonim yolg'on

parol_file/etc/mosquitto/pwfile tinglovchi 1883

Bu satrlarni yozib, biz chivinlarga aytdikki, biz hech kim bizning brokerimizga haqiqiy foydalanuvchi nomi va parolni kiritmaganini xohlamaymiz (biz buni bir soniya ichida o'rnatamiz) va biz chivinlarga 1883 port raqamidagi xabarlarni tinglang.

Agar siz brokerdan foydalanuvchi nomi va parol talab qilinishini xohlamasangiz, biz qo'shgan birinchi ikkita qatorni kiritmang (ya'ni, ruxsat_anonim … va parol_fayli …). Agar siz buni qilgan bo'lsangiz, Raspberry Pi -ni qayta ishga tushirishga o'ting.

Endi faylni yoping (va saqlang). Agar siz nano -misolni kuzatayotgan bo'lsangiz, CTRL+X tugmachalarini bosing va so'ralganda Y ni kiriting.

Chunki biz chivinlarga MQTT brokeridan foydalanmoqchi bo'lgan foydalanuvchilarni tasdiqlash kerakligini aytganimiz uchun, endi biz chivinlarga foydalanuvchi nomi va parol nima ekanligini aytib berishimiz kerak! Shunday qilib, quyidagi buyruqni kiriting - foydalanuvchi nomini kerakli foydalanuvchi nomi bilan almashtiring - keyin so'ralganda kerakli parolni kiriting (E'tibor bering: agar konfiguratsiya faylini tahrirlashda siz boshqa password_file yo'lini ko'rsatgan bo'lsangiz, quyidagi yo'lni Siz ishlatgan biri).

sudo mosquitto_passwd -c/etc/mosquitto/pwfile foydalanuvchi nomi

Biz chivin konfiguratsiya faylini o'zgartirganimiz uchun, Raspberry Pi -ni qayta ishga tushirishimiz kerak.

sudo qayta yuklash

Raspberry Pi qayta ishga tushirilgandan so'ng, sizda to'liq ishlaydigan MQTT brokeri bo'lishi kerak! Keyinchalik, biz turli xil qurilmalar/usullardan foydalangan holda u bilan ishlashga harakat qilamiz!

3 -qadam: Brokerni tekshirish

Brokerni sinovdan o'tkazish
Brokerni sinovdan o'tkazish

Raspberry Pi -ga chivinni o'rnatganingizdan so'ng, uni tezda sinovdan o'tkazishingiz mumkin - hamma narsa to'g'ri ishlayotganiga ishonch hosil qilish uchun. Buning uchun biz buyruq satrida foydalanishimiz mumkin bo'lgan ikkita buyruq mavjud. mosquitto_pub va mosquitto_sub. Bu bosqichda men sizga brokerni sinab ko'rish uchun ularning har birini ishlatib ko'rsatma beraman.

Brokerni sinab ko'rish uchun siz ikkita buyruq satri oynasini ochishingiz kerak bo'ladi. Agar siz Putty yoki boshqa SSH mijozidan foydalanayotgan bo'lsangiz, bu boshqa SSH oynasini ochish va odatdagidek tizimga kirish kabi oddiy. Agar siz Pi -ga UNIX terminalidan kirayotgan bo'lsangiz, bu xuddi shunday. Agar siz to'g'ridan -to'g'ri Raspberry Pi -dan foydalanayotgan bo'lsangiz, GUI rejimida ikkita terminal oynasini ochishingiz kerak bo'ladi (GUI -ni ishga tushirish uchun startxcan buyrug'i ishlatiladi).

Endi siz ikkita oynani ochdingiz, biz testni boshlashimiz mumkin. Ikkala terminalning biriga foydalanuvchi nomi va parolni oldingi qadamda o'rnatganingiz bilan almashtirib, quyidagi buyruqni kiriting.

mosquitto_sub -d -u foydalanuvchi nomi -P parol -t test

Agar siz avvalgi bosqichda foydalanuvchi nomi va parolni o'rnatmaslikka qaror qilgan bo'lsangiz, bundan buyon buyruqlardagi -u va -P bayroqlariga e'tibor bermang. Masalan, mosquitto_sub buyrug'i endi shunday bo'ladi:

mosquitto_sub -d -t testi

Mosquitto_sub buyrug'i mavzuga obuna bo'ladi va terminal oynasida ko'rsatilgan mavzuga yuborilgan barcha xabarlarni ko'rsatadi. Bu erda -d disk raskadrovka rejimini bildiradi, shuning uchun barcha xabarlar va harakatlar ekranda chiqariladi. -u va -P o'z -o'zidan tushunarli bo'lishi kerak. Nihoyat, -t - bu biz obuna bo'lmoqchi bo'lgan mavzuning nomi - bu holda "test".

Keyingi, boshqa terminal oynasida biz "test" mavzusiga oid xabarni chop etishga harakat qilamiz. Foydalanuvchi nomi va parolni o'zgartirishni yana eslab, quyidagilarni kiriting:

mosquitto_pub -d -u foydalanuvchi nomi -P parol -t test -m "Salom, dunyo!"

Enter tugmachasini bosganingizda "Salom, dunyo!" Degan xabarni ko'rishingiz kerak. biz ishlatgan birinchi terminal oynasida paydo bo'ladi (obuna bo'lish uchun). Agar shunday bo'lsa, barchangiz ESP8266 ustida ishlashga tayyormiz!

4 -qadam: ESP8266 -ni sozlash (Adafruit HUZZAH)

ESP8266 -ni sozlash (Adafruit HUZZAH)
ESP8266 -ni sozlash (Adafruit HUZZAH)
ESP8266 ni sozlash (Adafruit HUZZAH)
ESP8266 ni sozlash (Adafruit HUZZAH)
ESP8266 ni sozlash (Adafruit HUZZAH)
ESP8266 ni sozlash (Adafruit HUZZAH)
ESP8266 ni sozlash (Adafruit HUZZAH)
ESP8266 ni sozlash (Adafruit HUZZAH)

Agar bu qadam Adafruit HUZZAHga xos bo'lsa (men bu loyihani bajarish uchun foydalanaman). Agar siz boshqa Arduino / ESP8266 qurilmasidan foydalanayotgan bo'lsangiz, bu bosqichni o'tkazib yuborishingiz mumkin. Ammo, men sizga o'qishni o'tkazib yubormaslikni maslahat berardim, agar bu erda sizga tegishli bo'lishi mumkin bo'lgan ma'lumotlar bo'lsa.

Ushbu loyiha uchun men HUZZAHni Arduino dasturi bilan dasturlashtirmoqchiman. Agar siz hali o'rnatmagan bo'lsangiz, Arduino dasturini o'rnatganingizga ishonch hosil qiling (1.6.4dan yangisi). Siz bu yerdan yuklab olishingiz mumkin.

Arduino dasturini o'rnatganingizdan so'ng, uni oching va Fayl-> Tanlovlar-ga o'ting. Bu erda siz (oynaning pastki qismida) "Qo'shimcha taxtalar menejerining URL manzillari" yorlig'i bo'lgan matnli oynani ko'rishingiz kerak. Ushbu matn maydoniga quyidagi havolani nusxa ko'chiring va joylashtiring:

arduino.esp8266.com/stable/package_esp8266com_index.json

O'zgarishlarni saqlash uchun OK ni bosing. Endi menejer menejerini (Asboblar-> Kengash-> Kengash menejeri) oching va ESP8266-ni qidiring. Esp8266 by ESP8266 hamjamiyat paketini o'rnating. Arduino dasturini qayta ishga tushiring.

Endi, taxtani dasturlashdan oldin, biz bir nechta variantni tanlashimiz kerak. "Asboblar" menyusida Adafruit HUZZAH ESP8266 ni taxta uchun, 80 MGts chastotali chastotani tanlang (agar siz uni haddan tashqari oshirmoqchi bo'lsangiz 160 MGts dan foydalanishingiz mumkin, lekin hozir men 80 MGts dan foydalanmoqchiman), 4M (3M SPIFFS) Flash hajmi uchun va yuklash tezligi uchun 115200. Bundan tashqari, siz foydalanadigan COM portini tanlashingizga ishonch hosil qiling (bu sizning sozlamalaringizga bog'liq bo'ladi).

Har qanday kodni yuklashdan oldin, HUZZAH bootloader rejimida ekanligiga ishonch hosil qilishingiz kerak. Buni amalga oshirish uchun kartadagi GPIO0 belgisini bosing va ushlab turing, Reset tugmachasini bosib ushlab turing. Keyin, Reset tugmasini, keyin GPIO0 -ni qo'yib yuboring. Agar siz buni to'g'ri bajargan bo'lsangiz, GPIO0 tugmachasini bosganingizda yonib turgan qizil LED endi xira yonib turishi kerak.

Kodni mikrokontrollerga yuklash uchun avval HUZZAH yuklash rejimida ekanligiga ishonch hosil qiling, so'ng Arduino IDE -dagi yuklash tugmasini bosing.

Agar siz HUZZAH -ni o'rnatishda muammoga duch kelsangiz, qo'shimcha ma'lumotni Adafruit -ning o'z qo'llanmasida topishingiz mumkin.

5 -qadam: ESP8266 dasturlash

ESP8266 dasturlash
ESP8266 dasturlash

Endi biz ESP8266-ni dasturlashni boshlaymiz, lekin boshlashdan oldin siz Arduino kutubxonasi menejeriga quyidagi kutubxonalarni o'rnatishingiz kerak bo'ladi (Sketch-> Kutubxonalarni qo'shish-> Kutubxonalarni boshqarish).

  • Siqish 2
  • PubSubClient

Ushbu kutubxonalarni o'rnatganingizdan so'ng, men ushbu ko'rsatmaga (MQTT_Publish.zip) kiritilgan kodni ishga tushirishingiz mumkin. Men har bir bo'lim nima qilayotganini tushunishingiz uchun sharh berishga ishonch hosil qildim va umid qilamanki, bu sizning ehtiyojlaringizga moslashtirishga imkon beradi.

ESP8266 sizning WiFi tarmog'ingizga va MQTT Brokeriga (Raspberry Pi) ulanishi uchun kodning yuqori qismidagi doimiylarni o'zgartirishni unutmang.

Agar siz MQTT Broker uchun foydalanuvchi nomi va parol o'rnatmaslikka qaror qilgan bo'lsangiz, uning o'rniga MQTT_PublishNoPassword.zip faylini yuklab oling.

6-qadam: Python mijozini o'rnatish (paho-mqtt)

Python mijozini o'rnatish (paho-mqtt)
Python mijozini o'rnatish (paho-mqtt)

Yaxshiyamki, bu qadam juda oddiy! Chivinli piton mijozini o'rnatish uchun buyruq satriga (Linux/Mac) yoki hatto buyruq satriga (Windows) quyidagilarni kiritish kifoya.

paho-mqtt ni o'rnatish

Eslatma: Agar siz Python -ni o'rnatganingizda PATH o'zgaruvchisiga python va pip qo'shilishini xohlamagan bo'lsangiz, Windows buyruq satrida pip buyrug'ini ishlatishda muammo bo'lishi mumkin. Buni tuzatishning bir qancha usullari bor, lekin menimcha, Pythonni qayta o'rnatish - eng oson yo'li. Agar shubhangiz bo'lsa - googlega bering!

7 -qadam: Python mijozi - obuna bo'lish

Python mijozi - obuna
Python mijozi - obuna

Ushbu bosqichda biz ESP8266 tomonidan MQTT mavzusiga yuborilgan (chop etilgan) barcha xabarlarni boshqarish uchun Python skriptini (Raspberry Pi -ning o'zida yoki tarmoqqa ulangan boshqa kompyuterda) o'rnatamiz.

Men nima bo'layotganini tushunishga yordam berish uchun sharh berilgan python kodini (PythonMQTT_Subscribe.py) o'z ichiga olganman, lekin men bu erda ba'zi asosiy xususiyatlarni tushuntirib beraman.

Agar siz ilgari MQTT ulanishi uchun foydalanuvchi nomi va parol o'rnatmagan bo'lsangiz, uning o'rniga PythonMQTT_SubscribeNoPassword.py faylini yuklab oling.

8 -qadam: ESP8266 qurilmalari o'rtasida aloqa

ESP8266 qurilmalari o'rtasida aloqa
ESP8266 qurilmalari o'rtasida aloqa

Agar siz IoT tarmog'ini o'rnatmoqchi bo'lsangiz, masalan, ESP8266 qurilmalari o'rtasida aloqa o'rnatishingiz mumkin. Yaxshiyamki, bu biz yozgan kodga qaraganda ancha murakkab emas, lekin bir nechta sezilarli o'zgarishlar mavjud.

Bir ESP ma'lumotni boshqasiga yuborishi uchun, birinchi ESP bu mavzu bo'yicha nashr etishi kerak, ikkinchisi esa ushbu mavzuga obuna bo'lishi kerak. Ushbu sozlash bir tomonlama suhbatga imkon beradi - ESP (1) dan ESP (2) gacha. Agar biz ESP (2) ESP (1) bilan qayta gaplashishini istasak, biz yangi mavzu yaratishimiz mumkin, unga ESP (2) nashr etadi va ESP (1) obuna bo'ladi. Yaxshiyamki, bizda bitta mavzu bo'yicha bir nechta obunachilar bo'lishi mumkin, shuning uchun agar siz bir qancha tizimlarga ma'lumotlarni yubormoqchi bo'lsangiz, sizga faqat bitta mavzu kerak bo'ladi (bu ma'lumotni yuboradigan qurilmadan tashqari, ularning hammasi obuna bo'ladi). nashr eting).

Agar sizga har bir qurilma nima qilishi kerakligini aniqlashda yordam kerak bo'lsa, tizimni odamlar xonasi deb o'ylang. Agar ESP (1) nashr qilsa, siz bu qurilmani "karnay" deb tasavvur qilishingiz mumkin va mavzuga obuna bo'lgan har qanday qurilmalar bu misolda "tinglovchilar" dir.

Men quyida ESP8266 qanday mavzuga obuna bo'lishini va ba'zi xabarlarni tinglashini ko'rsatadigan misol kodini qo'shdim - 1 va 0. Agar 1 qabul qilinsa, bortdagi LED (HUZZAH uchun - GPIO 0) yoqiladi.. Agar 0 qabul qilinsa, bu LED o'chadi.

Agar siz murakkabroq ma'lumotlarni qayta ishlashni xohlasangiz, buni ReceivedMessage funktsiyasida bajarish kerak (kodni ko'ring).

O'zingizning loyihalaringiz uchun, agar siz ma'lumotlarni yuborishingiz va qabul qilishingiz kerak bo'lsa, siz oldingi misoldagi nashr funktsiyasini ushbu bosqichga kiritilgan kodga kiritishingiz mumkin. Buni asosiy Arduino loop () funktsiyasida bajarish kerak.

Kodning yuqori qismidagi o'zgaruvchilarni tarmog'ingizga mos ravishda o'zgartirishni unutmang!

Tavsiya: