Turinys:

Kaip naudoti MQTT su „Raspberry Pi“ir ESP8266: 8 žingsniai (su nuotraukomis)
Kaip naudoti MQTT su „Raspberry Pi“ir ESP8266: 8 žingsniai (su nuotraukomis)

Video: Kaip naudoti MQTT su „Raspberry Pi“ir ESP8266: 8 žingsniai (su nuotraukomis)

Video: Kaip naudoti MQTT su „Raspberry Pi“ir ESP8266: 8 žingsniai (su nuotraukomis)
Video: Использование комплекта Wi-Fi Heltec ESP32 OLED 2024, Birželis
Anonim
Kaip naudoti MQTT su „Raspberry Pi“ir ESP8266
Kaip naudoti MQTT su „Raspberry Pi“ir ESP8266

Šioje instrukcijoje paaiškinsiu, kas yra MQTT protokolas ir kaip jis naudojamas bendrauti tarp įrenginių. Tada, kaip praktinis pavyzdys, parodysiu, kaip nustatyti paprastą dviejų klientų sistemą, kur ESP8266 modulis atsiųs pranešimą į „Python“programą, kai paspaudžiamas mygtukas. Tiksliau, šiam projektui naudoju „Adafruit HUZZAH“modulį, „Raspberry Pi“ir stalinį kompiuterį. „Raspberry Pi“veiks kaip „MQTT“tarpininkas, o „Python“klientas bus paleistas iš atskiro stalinio kompiuterio (neprivaloma, nes tai galima paleisti naudojant „Raspberry Pi“).

Norėdami sekti šią instrukciją, turėsite turėti tam tikrų pagrindinių žinių apie elektroniką ir tai, kaip naudotis „Arduino“programine įranga. Taip pat turėtumėte žinoti komandų eilutės sąsajos naudojimą („Raspberry Pi“). Tikimės, kad įgiję žinių apie tai, kas yra MQTT, ir kaip jį panaudoti pagal pagrindinį scenarijų, galėsite kurti savo daiktų interneto projektus!

Būtinos dalys

  • 1 x „Raspberry Pi“, prijungtas prie vietinio tinklo (veikia „Jessie“)
  • 1 x ESP8266 modulis („Adafruit HUZZAH“)
  • 1 x duonos lenta
  • 3 x jungiamieji laidai (nuo vyrų iki vyrų)
  • 1 x mygtukas
  • 1 x 10k omų rezistorius (rudos-juodos-oranžinės spalvos kodas)

Aš sukūriau šią „Instructable“, nes MQTT visada domino mane kaip protokolą ir yra daug įvairių būdų, kaip jį naudoti. Tačiau man atrodė, kad negalėjau sukti galvos, kaip koduoti įrenginius, kad ja būtų galima naudotis. Taip buvo todėl, kad nežinojau/nesupratau, kas iš tikrųjų vyksta mano „Labas, pasauli!“iš įrenginio A ir nusiųsti jį į įrenginį B. Taigi nusprendžiau parašyti šią instrukciją, kad (tikiuosi) išmokčiau jus, kaip ji veikia, ir taip pat sustiprinti savo supratimą apie tai!

1 žingsnis: Kas yra MQTT?

Kas yra MQTT?
Kas yra MQTT?

„MQTT“arba „MQ Telemetry Transport“yra pranešimų siuntimo protokolas, leidžiantis keliems įrenginiams kalbėtis tarpusavyje. Šiuo metu tai yra populiarus daiktų interneto protokolas, nors jis buvo naudojamas kitais tikslais - pavyzdžiui, „Facebook Messenger“. Įdomu tai, kad MQTT buvo išrastas 1999 m. - tai reiškia, kad jis toks pat senas kaip aš!

„MQTT“yra paremta idėja, kad įrenginiai gali skelbti temas arba jas užsiprenumeruoti. Taigi, pavyzdžiui. Jei įrenginys Nr. 1 užfiksavo temperatūrą iš vieno iš savo jutiklių, jis gali paskelbti pranešimą (temą), kuriame yra jo užfiksuota temperatūros vertė (pvz., „Temperatūra“). Šis pranešimas siunčiamas „MQTT Broker“, kurį galite įsivaizduoti kaip jungiklį/maršrutizatorių vietiniame tinkle. Kai „MQTT Broker“gaus pranešimą, jis nusiųs jį į visus įrenginius (šiuo atveju įrenginį Nr. 2), kurie yra prenumeruojami ta pačia tema.

Šiame projekte mes paskelbsime temą naudodami ESP8266 ir sukursime „Python“scenarijų, kuris prenumeruoja tą pačią temą per „Raspberry Pi“, kuris veiks kaip „MQTT Broker“. Puikus MQTT dalykas yra tai, kad jis yra lengvas, todėl puikiai tinka naudoti mažiems mikrovaldikliams, tokiems kaip ESP8266, tačiau jis taip pat yra plačiai prieinamas - todėl galime jį paleisti ir pagal „Python“scenarijų.

Tikimės, kad šio projekto pabaigoje jūs suprasite, kas yra MQTT ir kaip jį naudoti savo projektams ateityje.

2 veiksmas: „MQTT Broker“įdiegimas „Raspberry Pi“

„MQTT Broker“diegimas „Raspberry Pi“
„MQTT Broker“diegimas „Raspberry Pi“
„MQTT Broker“diegimas „Raspberry Pi“
„MQTT Broker“diegimas „Raspberry Pi“
„MQTT Broker“diegimas „Raspberry Pi“
„MQTT Broker“diegimas „Raspberry Pi“

Norėdami nustatyti MQTT sistemą, mums reikia tarpininko, kaip paaiškinta ankstesniame žingsnyje. „Raspberry Pi“naudosime „Mosquitto“MQTT brokerį. Prieš diegdami tai, visada geriausia atnaujinti „Raspberry Pi“.

sudo apt-get atnaujinimas

sudo apt-get atnaujinimas

Kai tai padarysite, įdiekite „mosquitto“ir „mosquitto-customers“paketus.

sudo apt -get install mosquitto -y

sudo apt-get install mosquitto-customers -y

Kai baigsite diegti šiuos du paketus, turėsime sukonfigūruoti tarpininką. Uodų brokerio konfigūracijos failas yra /etc/mosquitto/mosquitto.conf, todėl atidarykite jį naudodami mėgstamą teksto rengyklę. Jei neturite mėgstamo teksto redaktoriaus arba nežinote, kaip naudoti komandų eilutės redaktorius, naudosiu nano, kad galėtumėte sekti toliau nurodytus veiksmus.

sudo nano /etc/mosquitto/mosquitto.conf

Šio failo apačioje turėtumėte pamatyti eilutę:

include_dir /etc/mosquitto/conf.d

Ištrinti šią eilutę. Failo apačioje pridėkite šias eilutes.

allow_anonymous false

Slaptažodis_failas/etc/mosquitto/pwfile klausytojas 1883

Įvesdami šias eilutes mes pasakėme „Mosquitto“, kad nenorime, kad kas nors prisijungtų prie mūsų brokerio, kuris nepateikia galiojančio vartotojo vardo ir slaptažodžio (mes juos nustatysime per sekundę) ir kad mes norime, kad uodai klausykitės pranešimų 1883 prievado numeriu.

Jei nenorite, kad tarpininkas reikalautų vartotojo vardo ir slaptažodžio, neįtraukite pirmųjų dviejų pridėtų eilučių (t. Y. Leisti_anoniminį… ir slaptažodžio_failas …). Jei tai padarėte, pereikite prie „Raspberry Pi“perkrovimo.

Dabar uždarykite (ir išsaugokite) tą failą. Jei sekate kartu su nano pavyzdžiu, paspauskite CTRL+X ir įveskite Y, kai būsite paraginti.

Kadangi mes ką tik pasakėme „mosquitto“, kad vartotojai, bandantys naudotis „MQTT“brokeriu, turi būti patvirtinti, dabar turime pasakyti „mosquitto“, koks yra vartotojo vardas ir slaptažodis! Taigi, įveskite šią komandą - pakeiskite vartotojo vardą norimu naudotojo vardu, tada įveskite norimą slaptažodį, kai būsite paraginti (Pastaba: jei redaguodami konfigūracijos failą nurodėte kitą slaptažodį_failo kelią, pakeiskite žemiau esantį kelią vieną, kurį naudojote).

sudo mosquitto_passwd -c/etc/mosquitto/pwfile vartotojo vardas

Kadangi ką tik pakeitėme uodų konfigūracijos failą, turėtume iš naujo paleisti „Raspberry Pi“.

sudo perkraukite

Baigę „Raspberry Pi“paleisti iš naujo, turėtumėte turėti visiškai veikiantį MQTT tarpininką! Toliau bandysime su juo sąveikauti, naudodami daugybę skirtingų įrenginių/metodų!

3 žingsnis: brokerio testavimas

Brokerio testavimas
Brokerio testavimas

Įdiegę uodus „Raspberry Pi“, galite greitai jį išbandyti - kad įsitikintumėte, jog viskas veikia tinkamai. Šiuo tikslu komandų eilutėje galime naudoti dvi komandas. mosquitto_pub ir mosquitto_sub. Šiame žingsnyje aš jums padėsiu naudoti kiekvieną iš jų, kad išbandytumėte mūsų tarpininką.

Norėdami išbandyti tarpininką, turėsite atidaryti du komandų eilutės langus. Jei naudojate „Putty“ar kitą SSH klientą, tai taip paprasta, kaip atidaryti kitą SSH langą ir prisijungti kaip įprasta. Jei prisijungiate prie „Pi“iš UNIX terminalo, tai yra tas pats. Jei „Raspberry Pi“naudojate tiesiogiai, turėsite atidaryti du terminalo langus GUI režimu (komandai startxcan būti naudojama GUI paleisti).

Dabar, kai atidarėte du langus, galime pradėti bandymus. Viename iš dviejų terminalų įveskite šią komandą, pakeisdami vartotojo vardą ir slaptažodį tais, kuriuos nustatėte atlikdami ankstesnį veiksmą.

mosquitto_sub -d -u vartotojo vardas -P slaptažodis -t testas

Jei ankstesniame žingsnyje nusprendėte nenustatyti vartotojo vardo ir slaptažodžio, nuo šiol komandose nepaisykite vėliavų -u ir -P. Taigi, pavyzdžiui, komanda mosquitto_sub dabar būtų:

mosquitto_sub -d -t testas

Komanda „mosquitto_sub“užsiprenumeruos temą ir terminalo lange parodys visus pranešimus, siunčiamus į nurodytą temą. Čia -d reiškia derinimo režimą, todėl visi pranešimai ir veikla bus rodomi ekrane. -u ir -P turėtų būti savaime suprantami. Galiausiai -t yra temos, kurią norime užsiprenumeruoti, pavadinimas - šiuo atveju „testas“.

Tada kitame terminalo lange bandysime paskelbti pranešimą „testo“tema. Įveskite šį tekstą, nepamiršdami pakeisti vartotojo vardo ir slaptažodžio:

mosquitto_pub -d -u vartotojo vardas -P slaptažodis -t test -m "Sveiki, pasauli!"

Kai paspausite „Enter“, turėtumėte pamatyti pranešimą „Labas, pasauli!“pasirodys pirmajame terminalo lange, kurį naudojome (prenumeruoti). Tokiu atveju galite pradėti dirbti su ESP8266!

4 veiksmas: nustatykite ESP8266 („Adafruit HUZZAH“)

ESP8266 nustatymas („Adafruit HUZZAH“)
ESP8266 nustatymas („Adafruit HUZZAH“)
ESP8266 nustatymas („Adafruit HUZZAH“)
ESP8266 nustatymas („Adafruit HUZZAH“)
ESP8266 nustatymas („Adafruit HUZZAH“)
ESP8266 nustatymas („Adafruit HUZZAH“)
ESP8266 nustatymas („Adafruit HUZZAH“)
ESP8266 nustatymas („Adafruit HUZZAH“)

Šis žingsnis, jei jis būdingas „Adafruit HUZZAH“(būtent tai aš ir naudoju šiam projektui užbaigti). Jei naudojate kitą „Arduino“/ ESP8266 įrenginį, galbūt norėsite praleisti šį veiksmą. Tačiau aš patarčiau jums jį perskaityti, tik tuo atveju, jei čia yra informacijos, kuri jums gali būti svarbi.

Šiam projektui aš programuosiu HUZZAH naudodami „Arduino“programinę įrangą. Taigi, jei to dar nepadarėte, būtinai įdiekite „Arduino“programinę įrangą (naujesnę nei 1.6.4). Ją galite atsisiųsti čia.

Įdiegę „Arduino“programinę įrangą, atidarykite ją ir eikite į Failas-> Nuostatos. Čia turėtumėte pamatyti (netoli lango apačios) teksto laukelį su etikete: „Papildomos lentų tvarkyklės URL“. Šiame teksto laukelyje nukopijuokite ir įklijuokite šią nuorodą:

arduino.esp8266.com/stable/package_esp8266com_index.json

Spustelėkite Gerai, kad išsaugotumėte pakeitimus. Dabar atidarykite valdybos tvarkyklę (Įrankiai-> Valdyba-> Valdybos valdytojas) ir ieškokite ESP8266. Įdiekite bendruomenės paketą esp8266 by ESP8266. Iš naujo paleiskite „Arduino“programinę įrangą.

Dabar, prieš pradėdami programuoti lentą, turime pasirinkti keletą skirtingų parinkčių. Meniu „Įrankiai“pasirinkite „Adafruit HUZZAH ESP8266“, skirtą „Board“, 80 MHz - CPU dažnį (galite naudoti 160 MHz, jei norite jį viršyti, bet kol kas aš naudoju 80 MHz), 4M (3M SPIFFS) blykstės dydžiui ir 115200 įkėlimo greičiui. Taip pat būtinai pasirinkite naudojamą COM prievadą (tai priklausys nuo jūsų sąrankos).

Prieš įkeldami bet kokį kodą, turite įsitikinti, kad HUZZAH veikia įkrovos režimu. Norėdami tai padaryti, laikykite nuspaudę plokštėje esantį mygtuką, pažymėtą GPIO0, ir kol jis laikomas, taip pat laikykite nuspaudę mygtuką „Atstatyti“. Tada atleiskite mygtuką Reset ir tada GPIO0. Jei tai padarėte teisingai, raudonas šviesos diodas, užsidegęs paspaudus GPIO0, dabar turėtų būti silpnas.

Norėdami įkelti kodą į mikrovaldiklį, pirmiausia įsitikinkite, kad HUZZAH veikia įkrovos režimu, tada tiesiog spustelėkite įkėlimo mygtuką „Arduino IDE“.

Jei kyla sunkumų nustatant HUZZAH, daugiau informacijos rasite „Adafruit“mokymo programoje.

5 žingsnis: ESP8266 programavimas

ESP8266 programavimas
ESP8266 programavimas

Dabar pradėsime programuoti ESP8266, bet prieš pradėdami, turėsite įdiegti šias bibliotekas „Arduino“bibliotekos tvarkyklėje (Eskizas-> Įtraukti bibliotekas-> Tvarkyti bibliotekas)

  • Atšokimas2
  • PubSubClient

Įdiegę šias bibliotekas, galėsite paleisti kodą, kurį įtraukiau į šią instrukciją (MQTT_Publish.zip). Įsitikinau, kad pakomentuosiu, kad suprastumėte, ką daro kiekvienas skyrius, ir tai, tikiuosi, turėtų padėti jums pritaikyti jį savo poreikiams.

Nepamirškite pakeisti konstantų kodo viršuje, kad jūsų ESP8266 galėtų prisijungti prie jūsų „WiFi“tinklo ir „MQTT Broker“(„Raspberry Pi“).

Jei nusprendėte nenustatyti „MQTT Broker“vartotojo vardo ir slaptažodžio, atsisiųskite failą MQTT_PublishNoPassword.zip.

6 veiksmas: „Python Client“(paho-mqtt) diegimas

„Python Client“diegimas (paho-mqtt)
„Python Client“diegimas (paho-mqtt)

Laimei, šis žingsnis yra labai paprastas! Norėdami įdiegti „mosquitto python“klientą, tiesiog įveskite komandų eilutėje („Linux“/„Mac“) arba net komandų eilutėje („Windows“).

pip įdiegti paho-mqtt

Pastaba: „Windows“komandų eilutėje gali kilti problemų vykdant komandą pip, jei nenurodėte, kad norite įdiegti pip ir pridėti „Python“prie kintamojo PATH, kai įdiegėte „Python“. Yra daug būdų tai išspręsti, bet manau, kad paprasčiausias būdas yra iš naujo įdiegti „Python“. Jei abejojate - duokite „Google“!

7 žingsnis: „Python“klientas - prenumerata

„Python“klientas - prenumerata
„Python“klientas - prenumerata

Šiame žingsnyje mes nustatysime „Python“scenarijų (pačiame „Raspberry Pi“arba kitame prie tinklo prijungtame kompiuteryje), kad būtų tvarkomi visi pranešimai, kuriuos ESP8266 siunčia (paskelbia) MQTT tema.

Žemiau įtraukiau python kodą (PythonMQTT_Subscribe.py), kuris buvo pakomentuotas siekiant padėti jums suprasti, kas vyksta, tačiau čia taip pat paaiškinsiu kai kurias pagrindines funkcijas.

Jei anksčiau nenustatėte MQTT ryšio naudotojo vardo ir slaptažodžio, atsisiųskite failą „PythonMQTT_SubscribeNoPassword.py“.

8 veiksmas: bendravimas tarp ESP8266 įrenginių

Ryšys tarp ESP8266 įrenginių
Ryšys tarp ESP8266 įrenginių

Pavyzdžiui, jei norite nustatyti IoT tinklą, galbūt norėsite bendrauti tarp ESP8266 įrenginių. Laimei, tai nėra daug sudėtingiau nei anksčiau parašytas kodas, tačiau yra keletas pastebimų pakeitimų.

Kad vienas ESP galėtų siųsti duomenis kitam, pirmasis ESP turės būti paskelbtas pagal temą, o antrasis ESP - prenumeruoti tą temą. Ši sąranka leis vienpusį pokalbį - nuo ESP (1) iki ESP (2). Jei norime, kad ESP (2) vėl kalbėtų su ESP (1), galime sukurti naują temą, kurią ESP (2) paskelbs, o ESP (1) prenumeruos. Laimei, mes galime turėti kelis abonentus ta pačia tema, taigi, jei norite siųsti duomenis į kelias sistemas, jums reikės tik vienos temos (kurią jie visi prenumeruoja, išskyrus įrenginį, kuris siunčia duomenis). skelbti).

Jei jums reikia pagalbos išsiaiškinant, ką turi padaryti kiekvienas įrenginys, pagalvokite apie sistemą kaip apie žmonių kambarį. Jei ESP (1) skelbia, galite įsivaizduoti šį įrenginį kaip „garsiakalbį“, o bet kokie temą prenumeruojantys įrenginiai šiame pavyzdyje yra „klausytojai“.

Žemiau pateikiau pavyzdinį kodą, kuris parodo, kaip ESP8266 gali užsiprenumeruoti temą ir klausytis tam tikrų pranešimų - 1 ir 0. Jei gaunamas 1, įjungiamas borto šviesos diodas (skirtas „HUZZAH - GPIO 0“).. Jei gaunamas 0, šis šviesos diodas išjungiamas.

Jei norite apdoroti sudėtingesnius duomenis, tai reikia padaryti naudojant funkciją ReceivedMessage (žr. Kodą).

Jei norite savo projektams siųsti ir gauti duomenis, galite į ankstesnio pavyzdžio paskelbimo funkciją įtraukti kodą, įtrauktą į šį veiksmą. Tai turėtų būti tvarkoma pagrindinėje „Arduino loop“() funkcijoje.

Nepamirškite pakeisti kintamųjų, esančių kodo viršuje, kad tiktų jūsų tinklui!

Rekomenduojamas: