- Kas yra MQTT protokolas?
- Kaip veikia MQTT?
- „Eclipse Mosquitto“ brokeris
- Būtini komponentai
- „Eclipse MQTT“ bandymo grandinė - schema
- ESP8266 programavimas ryšiui su brokeriu užmegzti
- MQTT testavimas naudojant ESP8266 naudojant „Arduino“
Per pastaruosius kelerius metus daiktų interneto (daiktų interneto) įrenginiai tapo niekuo neišsiskiriančia mūsų kasdienio gyvenimo dalimi. Nuo protingų namų, išmaniųjų lempučių iki išmaniųjų prietaisų; kūrėjai ir kūrėjai įtraukia šią technologiją, kad sukurtų prijungtų įrenginių tinklą, kuris mūsų kasdienį gyvenimą daro šiek tiek įdomesnį. Visa tai tapo įmanoma dėl bendravimo paprastumo. Yra daug galimų būdų bendrauti tarp prietaisų, tačiau komerciniuose ir pomėgių produktuose vienas dažniausiai naudojamas protokolas yra „ Message Queuing Telemetry Transport“ (MQTT). Anksčiau mes sukūrėme balsu valdomą FM radiją naudodami „Arduino“ ir „Google“ padėjėją, kuris naudoja MQTT, kad galėtų bendrauti su „NodeMCU“ lenta. Patikrinkite, ar jums tai atrodo įdomu.
Šiame projekte mes naudosime nemokamą ir populiarų „ Eclipse MQTT“ brokerį ir mokysimės prijungti IoT įrenginį (mūsų atveju tai „NodeMCU“ modulis) prie MQTT brokerio ir perduoti duomenis tarp „ MQTT“ brokerio ir „NodeMCU“.
Kas yra MQTT protokolas?
Prieš tęsdami toliau, geriau turėkite aiškią mintį apie protokolą MQTT (Message Queuing Telemetry Transport). Tai lengvas pranešimų siuntimo protokolas, kuris naudoja skelbimo / prenumeratos metodą ir verčia pranešimus iš kelių įrenginių. Naudodami MQTT protokolą, mes taip pat galime siųsti / priimti duomenis ir valdyti įvairius išvesties įrenginius, pvz., Skaityti jutiklio duomenis ir tt. Jis sukurtas virš TCP, todėl jis yra greitesnis nei panašūs protokolai, pvz., HTTP. Be to, jis turi daug kitų pranašumų, palyginti su kitais protokolais, pvz., Dėl labai lengvo, todėl nereikalauja perteklinės atminties, jis gali dirbti su labai mažu tinklo pralaidumu, be to, jis turi integruotą patikimą saugos protokolą. Dėl šių funkcijų jis tinka daugeliui programų.
Kaip veikia MQTT?
Kad suprastume MQTT protokolo veikimą, mums tereikia suprasti tris pagrindinius dalykus; aukščiau pateikta diagrama rodo. Be to, mes tai paaiškinome žemiau straipsnyje.
„MQTT“ klientas:
MQTT klientas yra bet kuris prietaisas (ji gali būti mikrokontroleris arba serveris), kuri veikia MQTT funkcijas ir susisiekia su centrinio serverio, kuris yra žinomas kaip " tarpininkas." Tarpininkas tvarko duomenų ryšį tarp prijungtų klientų.
MQTT leidėjas:
Kai klientas nori siųsti bet kokią informaciją, klientas yra žinomas kaip „Leidėjas“. Leidėjas paskelbs informaciją tam tikra tema. „ Tema “ yra kelias, kuriame galime skelbti / užsiprenumeruoti pranešimus. Tada brokeris siunčia vartotojo paskelbtą informaciją klientams (taip pat žinomiems kaip „ Subscriber“), kurie užsiprenumeravo tą konkrečią temą.
MQTT abonentas:
MQTT abonento prenumeruoja pranešimus ant MQTT brokeris skaityti siunčiami brokeris pranešimus.
„Eclipse Mosquitto“ brokeris
„Eclipse Mosquitto“ yra atviro kodo MQTT brokeris, kuris yra lengvas ir tinkamas naudoti IoT prietaisuose, kad būtų galima bendrauti. MQTT protokolas suteikia lengvą būdą perduoti informaciją naudojant publikuoti / užsiprenumeruoti modelį. Jei norite sužinoti daugiau apie šią temą, galite apsilankyti oficialioje uodų svetainėje.
„Eclipse Mosquitto“ brokerio įsteigimas:
Norėdami užmegzti ryšį su brokeriu, pirmiausia turime jį nustatyti. Šiame projekte „Android“ programa naudojama informacijai skelbti ir užsiprenumeruoti pas Brokerį. Šie veiksmai padės geriau suprasti sąrankos procesą.
1 žingsnis:
Pirmiausia atsisiųskite bet kurią „MQTT kliento“ programą, esančią „Google Play“ parduotuvėje / „App Store“, ir įdiekite ją. Šiame projekte naudojama programa „MQTT klientas“, panaši į žemiau pateiktą vaizdą.
2 žingsnis:
Spustelėkite „+“ ženklą, kad pateiktumėte papildomas parinktis programoje, kur mes pridėsime naują brokerį. Spustelėjus mygtuką, pasirodys naujas ekranas, kaip parodyta žemiau.
3 žingsnis:
Po to reikalaujamame laukelyje reikia užpildyti brokerio duomenis. Pirmiausia spustelėkite programoje rodomą parinktį „Įgalinta“. Šiame projekte naudojamas „ Eclipse MQTT“ brokeris, kurį reikia užpildyti žemiau:
Slapyvardis: Nurodykite savo pageidaujamą vardą
Vedėjas : mqtt.eclipse.org
Uostas: 1883 m
Kliento ID: nurodykite savo pageidavimo ID
Pirmiau pateiktą informaciją reikia užpildyti atitinkamuose laukuose. Visi kiti laukai nėra būtini ir juos galima palikti tuščius. Po sėkmingo užbaigimo spustelėkite mygtuką išsaugoti, kad išsaugotumėte tarpininko informaciją.
Kai tai bus padaryta, „Android“ programų sąrankos procesas bus baigtas, o dabar galime pereiti prie aparatinės įrangos pusės.
Būtini komponentai
Visas reikalingų dalių sąrašas aprašytas žemiau. Kadangi ši grandinė yra paprasta, visas reikalingas dalis galite rasti savo vietos pomėgių parduotuvėje.
- „NodeMCU“
- LED
- Bandomoji Lenta
- Jungiamieji laidai
- Programavimo kabelis
„Eclipse MQTT“ bandymo grandinė - schema
Žemiau pateikiama „Basic MQTT“ projekto schema:
ESP8266 programavimas ryšiui su brokeriu užmegzti
Paprastas „ Arduino“ kodas rūpinasi visais reikalingais ryšiais tarp MQTT brokerio ir „NodeMCU“. Šiame skyriuje sužinosime, kaip ši funkcija veikia išsamiai.
Nustatykite „Arduino IDE“ ir įkelkite kodą:
Jei kodą į „ NodeMCU“ įkeliate pirmą kartą, pirmiausia turite nustatyti „ Arduino IDE“. Norėdami tai padaryti, atlikite toliau pateiktą paprastą instrukciją.
Pirmiausia atidarykite „Arduino IDE“, tada eikite į Failas–> Nuostatos–> Nustatymai .
Tada nukopijuokite žemiau esantį URL ir įklijuokite jį į lauką „Papildomas valdybos tvarkyklės URL “ ir spustelėkite „Gerai“. Norėdami sužinoti, kaip mes tai padarėme, galite patikrinti žemiau esantį vaizdą.
Nuoroda:
Tada eikite į „ Tools“> „Board“> „Boards Manager“ . Valdybos lango valdytojo lange paieškos laukelyje įveskite ESP 8266 ir paspauskite Enter. Tada išskleidžiamajame meniu pasirinkite naujausią versiją ir spustelėkite diegti. Žemiau pateiktas vaizdas suteiks jums aiškią idėją.
Galiausiai, kai baigsite diegti, eikite į „ Tools“ -> „Board“ -> ir pasirinkite „NodeMCU 1.0“ (ESP-12E modulis). Dabar galite programuoti „NodeMCU“ naudodami „Arduino IDE“. Baigę nustatyti „Arduino IDE“, dabar galime įkelti visą kodą. Tačiau pirmiausia perskaitykite greitą viso kodo paaiškinimą.
Pirmiausia įtraukėme „ESP8266WiFi.h“, skirtą naudoti ESP8266, ir „PubSubClient.h“, skirtą MQTT.
ESP8266 biblioteką galite rasti iš anksto sukurtoje „Arduino“ bibliotekoje, tačiau turite atsisiųsti „PubSubClient“ biblioteką iš susietos „GitHub“ saugyklos.
# įtraukti
Tada nustatykite tinklo kredencialus, pvz., „Wi-Fi“ vartotojo vardą ir slaptažodį. Atitinkamai pakeiskite savo kredencialus vietoje „admin“ ir „12345678“.
const char * ssid = "administratorius"; const char * password = "12345678";
Tada turime sukonfigūruoti MQTT serverį. Šiam projektui naudojome „Eclipse MQTT“ serverį, todėl serverio adresas nurodomas kaip „mqtt.eclipse.org“. Bet jei planuojate naudoti bet kurį kitą serverį, pvz., „Mosquitto“, „Adafruit“, galite jį pakeisti savo konkrečiu serverio adresu ir prievado numeriu.
const char * mqtt_server = "mqtt.eclipse.org"; const int mqtt_port = 1883;
Tada bus sukurtos klasės „ WiFiClient“ ir „ PubSubClient“ egzemplioriai , kurie bus naudojami visoje programoje.
„WiFiClient espClient“; „PubSubClient“ klientas (espClient);
Skiltyje setup () pirmiausia mes vadiname „ WiFi.begin“ () , iškvietę šį metodą, ESP bus prijungtas prie jūsų pageidaujamo „HotSpot“.
„WiFi.begin“ (ssid, slaptažodis);
Toliau mes patikriname, ar sėkmingas tinklo ryšys, naudojant „ WiFi.status ()“ metodą. Po sėkmingo ryšio „Serial Monitor“ išspausdinamas pranešimas su prijungto tinklo SSID.
while (WiFi.status ()! = WL_CONNECTED) {delsa (500); Serial.println ("Prisijungimas prie WiFi.."); } Serial.print („Prisijungta prie„ WiFi “:); Serial.println („WiFi.SSID“);
Dabar turime sukurti tarpininką. Tam mes naudojome setServer metodą; Šis metodas reikalauja dviejų argumentų, kuriuos mes iš anksto apibrėžėme anksčiau. Dabar, jei norime gauti pranešimus iš serverio, turime sukurti atgalinio skambinimo funkciją. Tam mes naudojame metodą setCallback (callback) .
klientas.setServer (mqtt_server, mqtt_port); klientas.setCallback (MQTTcallback);
Dabar prisijungdami prie ESP8266 kliento naudojome prisijungimo (kliento ID) funkciją. Čia kliento ID yra kliento vardas ir jis turi būti unikalus. Jei jis prijungtas, nuosekliame ekrane gali būti rodomas sėkmės pranešimas.
if (klientas. prisijungti ("ESP8266")) {Serial.println ("prijungtas"); } else {Serial.print ("nepavyko su valstybe") Serial.println (kliento.valstis ()); vėlavimas (2000); }
Tada mes paskambinsime į klientą.subscribe () , integruotą MQTT funkciją, kuri naudojama tam tikrai temai užsiprenumeruoti. Šiame projekte mes naudojome „ esp / test “ kaip savo abonento vardą.
klientas.prenumeruoti ("esp / testas");
Dabar, norint patikrinti, ar yra atnaujintos informacijos, iškviečiama „MQTTcallback“ funkcija. Jei yra naujų duomenų, ši funkcija tvarko gautus duomenis ir serijos monitoriuje išspausdina pranešimą su originaliu pranešimu ir temos pavadinimu, kur gaunamas pranešimas.
Tada mes konvertuojame pranešimus į eilutę, kad būtų galima palyginti ir patikrinti, ar nėra jokių suaktyvinančių veiksmų. Šiame projekte šviesos diodas įjungiamas / išjungiamas naudojant MQTT komandas, kaip parodyta žemiau esančiame kode.
už (int i = 0; i <ilgis; i ++) {pranešimas = pranešimas + (char) naudingoji apkrova; } Serial.print (pranešimas); if (pranešimas == "įjungtas") {digitalWrite (LED, HIGH); }
Galiausiai paskelbti informaciją šia tema. Naudojama kliento.publish () funkcija. Šiame projekte patikrinama mygtuko būsena, jei paspaudžiamas mygtukas, tada pranešimas paskelbiamas temoje „ esp / test1 “, kaip parodyta žemiau.
if (digitalRead (D1) == 0)) {klientas.publikuoti ("esp / test1", "Sveiki nuo ESP8266"); } Kitas; klientas.lankas ();
MQTT testavimas naudojant ESP8266 naudojant „Arduino“
Savo paskutiniam bandymui naudosime „Android“ programą, kurią sukūrėme anksčiau.
Atidarykite „MQTT“ kliento programą ir įsitikinkite, kad jūsų mobiliajame telefone yra aktyvus interneto ryšys. Be to, viešosios interneto prieigos taškas, prie kurio prijungtas „NodeMCU“, turėtų turėti aktyvų interneto ryšį. Kai viskas bus prijungta prie interneto, iš ESP modulio išsiųsime „Hello from ESP8266“ eilutę, kuri atsispindės „Android“ programoje, ir gausime pranešimą. Tada mes išsiųsime eilutę iš „Android“ programos, kuri įjungs LED, kuris yra prijungtas prie ESP8266 „Node“ MCU plokštės.
1 veiksmas: (užsiprenumeruokite temą):
Programoje spustelėkite parinktį Išsaugota MQTT, kurią sukonfigūravome anksčiau. Jis pasirodys ekrane, kur bus paraginta „Prenumeruoti temą“. Anksčiau mes sukonfigūravome temą kaip „ esp / test1 “. Taigi „Android“ programoje parašysime „ esp / test1 “. Spustelėkite „Prenumeruoti“. Tai atlikus bus pateiktas toks ekranas, kaip žemiau, kur jis bus parašytas kaip „Nėra pranešimo“ iš konkrečios temos.
Dabar spustelėkite mygtuką „Prisijungta“, kuris yra prijungtas prie mazgoMCU. Pagal mūsų kodą pranešimas „ Labas iš ESP8266 “ bus paskelbtas temoje, o ekrane bus pranešimas su gautu pranešimu, kaip parodyta žemiau.
2 žingsnis: paskelbti temoje:
Dabar, norėdami paskelbti temoje, spustelėkite programos mygtuką Į viršų rodyklę ir jis atidarys ekraną, kaip parodyta žemiau.
Dabar lauke Tema parašykite „ esp / test “, o pranešimų lauke - „ on “ arba „ off “, kad įjungtumėte ir išjungtumėte šviesos diodą. Pavyzdžiui, jei tema yra paskelbta „įjungta“, tada šviesos diodas bus įjungtas, o jei tema bus paskelbta „išjungta“, šviesos diodas bus išjungtas.
Tikiuosi, kad jums patiko straipsnis ir sužinojote kažką naujo. Jei turite klausimų apie šį straipsnį, nedvejodami pakomentuokite žemiau arba galite naudoti mūsų forumą.