- Kaj je protokol MQTT?
- Kako deluje MQTT?
- Posrednik Eclipse Mosquitto
- Potrebne komponente
- Eclipse MQTT Test-Circuit - Shema
- Programiranje ESP8266 za vzpostavitev komunikacije z posrednikom
- Testiranje MQTT z ESP8266 z uporabo Arduina
V zadnjih nekaj letih so naprave IoT (Internet stvari) postale neločljiv del našega vsakdana. Od pametnih domov, pametnih žarnic do pametnih naprav; ustvarjalci in razvijalci to tehnologijo vključujejo, da ustvarijo mrežo povezanih naprav, ki naredijo naše vsakdanje življenje nekoliko bolj razburljivo. Vse to je bilo omogočeno zaradi enostavne komunikacije. Obstaja veliko možnih načinov za komunikacijo med napravami, toda v komercialnih in hobi izdelkih je en sam protokol, ki se pogosto uporablja, telemetrični transport sporočil v čakalni vrsti (MQTT). Pred tem smo z Arduinom in Googlovim asistentom zgradili FM-radio z glasovnim nadzorom, ki uporablja MQTT za komunikacijo s ploščo NodeMCU. Preverite, ali se vam to zdi zanimivo.
V tem projektu bomo uporabili brezplačnega in priljubljenega posrednika Eclipse MQTT ter se naučili, kako povezati napravo IoT (v našem primeru je to modul NodeMCU) na posrednika MQTT in prenesti podatke med posrednikom MQTT in NodeMCU.
Kaj je protokol MQTT?
Preden bomo nadaljevali vse nadaljnje, je bolje, da imajo jasno predstavo o MQTT (Message Queuing telemetrije Promet) protokola. Gre za lahek protokol za sporočanje, ki uporablja metodo objave / naročanja in prevaja sporočila med več napravami. S protokolom MQTT lahko pošiljamo / prejemamo podatke in nadzorujemo različne izhodne naprave, kot so podatki o branju senzorjev itd. Razvit je na vrhu TCP, zato je hitrejši od podobnih protokolov, kot je HTTP. Razen tega ima še veliko drugih prednosti pred drugimi protokoli, kot je zelo lahek, zato ne porabi odvečnega pomnilnika, lahko deluje z zelo malo pasovne širine omrežja, poleg tega pa ima vgrajen močan varnostni protokol. Zaradi teh lastnosti je primeren za številne aplikacije.
Kako deluje MQTT?
Da bi razumeli delovanje protokola MQTT, moramo razumeti le tri osnovne stvari; zgornji diagram to kaže. Prav tako smo to pojasnili spodaj v članku.
Naročnik MQTT:
MQTT stranka je vsaka naprava (to je lahko mikrokrmilnik ali strežnik), ki poteka MQTT funkcije in komunicira z osrednjim strežnikom, ki je znan kot " posrednik ". Posrednik skrbi za podatkovno komunikacijo med povezanimi odjemalci.
Založnik MQTT:
Ko stranka želi poslati kakršne koli informacije, je znana kot »založnik«. Založnik bo objavil informacije o določeni temi. » Tema « je pot, na kateri lahko objavimo / naročimo sporočila. Nato posrednik podatke, ki jih objavi uporabnik, pošlje strankam (znanim tudi kot naročnik), ki so naročene na to določeno temo.
Naročnik MQTT:
Naročnik MQTT se naroči na teme posrednika MQTT, da bere sporočila, ki jih pošlje posrednik.
Posrednik Eclipse Mosquitto
Eclipse Mosquitto je odprtokodni posrednik MQTT, ki je lahek in primeren za uporabo na napravah IoT za komunikacijo. MQTT protokol omogoča lahek način prenosa podatkov z uporabo objavljajo / naročiti modela. Če želite izvedeti več o tej temi, lahko obiščete uradno spletno stran komarjev.
Nastavitev posrednika Eclipse Mosquitto:
Da bi vzpostavili komunikacijo s posrednikom, jo moramo najprej nastaviti. V tem projektu se aplikacija Android uporablja za objavo in naročanje informacij pri posredniku. Naslednji koraki vam bodo dali boljšo predstavo o postopku namestitve.
Korak 1:
Najprej prenesite katero koli aplikacijo »odjemalec MQTT«, ki je na voljo v trgovini Google Play / App Store, in jo namestite. V tem projektu je uporabljena aplikacija z imenom »odjemalec MQTT«, ki je videti kot spodnja slika.
2. korak:
Kliknite znak "+", da izpišete dodatne možnosti v aplikaciji, kamor bomo dodali novega posrednika. Ko kliknete gumb, se prikaže nov zaslon, kot je prikazano spodaj.
3. korak:
Nato je treba v zahtevanem polju izpolniti podatke o posredniku. Najprej kliknite možnost »Omogočeno«, prikazano v aplikaciji. V tem projektu se uporablja posrednik Eclipse MQTT, podrobnosti, ki jih je treba izpolniti, so navedene spodaj:
Vzdevek: Vnesite ime po svoji želji
Gostitelj: mqtt.eclipse.org
Pristanišče: 1883
ID stranke: navedite ID svoje nastavitve
Zgornje podrobnosti je treba izpolniti v njihovih poljih. Vsa druga polja niso potrebna in jih lahko pustite prazna. Po uspešnem zaključku kliknite gumb shrani, da shranite podrobnosti posrednika.
Po končanem postopku namestitve aplikacije za Android je konec in zdaj lahko preidemo na strojno stran stvari.
Potrebne komponente
Popoln seznam zahtevanih delov je opisan spodaj. Ker je to vezje preprosto, lahko v lokalni trgovini s hobiji najdete vse potrebne dele.
- NodeMCU
- LED
- Breadboard
- Priključne žice
- Programski kabel
Eclipse MQTT Test-Circuit - Shema
Shema vezij za osnovni projekt MQTT je podana spodaj:
Programiranje ESP8266 za vzpostavitev komunikacije z posrednikom
Preprosta koda Arduino skrbi za vso potrebno komunikacijo med posrednikom MQTT in NodeMCU. V tem poglavju bomo podrobno izvedeli, kako deluje ta funkcionalnost.
Nastavite Arduino IDE in naložite kodo:
Če kodo prvič naložite v NodeMCU, morate najprej nastaviti IDE za Arduino. Če želite to narediti, preprosto sledite spodnjim navodilom.
Najprej odprite Arduino IDE, nato pojdite na Datoteka–> Nastavitve–> Nastavitve .
Nato kopirajte spodnji URL in ga prilepite v polje »Dodatni URL upravitelja plošč « in kliknite »V redu«. Na spodnji sliki lahko preverite, kako smo to storili.
Povezava:
Nato pojdite na Orodja> Plošča> Upravitelj plošč . V okno upravitelja plošče v iskalno polje vnesite ESP 8266 in pritisnite Enter. Nato v spustnem meniju izberite najnovejšo različico in kliknite na namestitev. Spodnja slika vam bo dala jasno predstavo.
Ko je namestitev končana, pojdite na Orodja -> Plošča -> in izberite NodeMCU 1.0 (modul ESP-12E). Zdaj lahko NodeMCU programirate z Arduino IDE. Ko smo končali z nastavitvijo Arduino IDE, lahko zdaj naložimo celotno kodo. Najprej pa preberite hitro razlago celotne kode.
Najprej smo vključili »ESP8266WiFi.h« za uporabo ESP8266 in »PubSubClient.h« za MQTT.
Knjižnico ESP8266 lahko najdete vnaprej zgrajeno znotraj knjižnice Arduino, vendar morate knjižnico PubSubClient prenesti iz pripadajočega skladišča GitHub.
#include
Nato določite poverilnice omrežja, kot sta uporabniško ime in geslo za Wi-Fi. Zamenjajte svoje poverilnice namesto »admin« oziroma »12345678«.
const char * ssid = "admin"; const char * geslo = "12345678";
Nato moramo konfigurirati strežnik MQTT. Za ta projekt smo uporabili strežnik Eclipse MQTT, zato je naslov strežnika podan kot "mqtt.eclipse.org". Če pa nameravate uporabiti kateri koli drug strežnik, kot sta Mosquitto, Adafruit, ga lahko zamenjate s svojim naslovom in številko vrat strežnika.
const char * mqtt_server = "mqtt.eclipse.org"; const int mqtt_port = 1883;
Nato se ustvarijo primerki za razred WiFiClient in PubSubClient , ki se bosta uporabljala v celotnem programu.
WiFiClient espClient; PubSubClient odjemalec (espClient);
V razdelku setup () najprej pokličemo WiFi.begin () , če pokličemo to metodo, bomo povezali ESP z želeno HotSpot.
WiFi.begin (ssid, geslo);
Nato z metodo WiFi.status () preverimo uspešno omrežno povezavo . Po uspešni povezavi se na Serial Monitor natisne sporočilo s SSID povezanega omrežja.
medtem ko (WiFi.status ()! = WL_CONNECTED) {zamuda (500); Serial.println ("Povezovanje z WiFi.."); } Serial.print ("Povezan z WiFi:"); Serial.println (WiFi.SSID ());
Zdaj moramo ustvariti posrednika. Za to smo uporabili metodo setServer ; ta metoda ima dva argumenta, ki smo jih predhodno določili. Če želimo prejemati sporočila s strežnika, moramo ustvariti funkcijo povratnega klica. Za to uporabljamo metodo setCallback (povratni klic) .
client.setServer (mqtt_server, mqtt_port); client.setCallback (MQTTcallback);
Zdaj smo za povezavo z odjemalcem ESP8266 uporabili funkcijo connect (clientID) . Tu je clientID ime odjemalca in mora biti unikat. Če je povezan, se lahko v serijskem monitorju prikaže sporočilo o uspehu.
če (client.connect ("ESP8266")) {Serial.println ("povezan"); } else {Serial.print ("neuspešno s stanjem") Serial.println (client.state ()); zamuda (2000); }
Nato pokličemo client.subscribe () , vgrajeno funkcijo MQTT, ki se uporablja za naročanje na določeno temo. Za ta projekt smo kot svoje naročniško ime uporabili » esp / test «.
client.subscribe ("esp / test");
Zdaj se pokliče funkcija MQTTcallback, da preveri, ali so na voljo posodobljene informacije. Če so na voljo novi podatki, ta funkcija obdeluje prejete podatke in na serijski monitor natisne sporočilo z izvirnim sporočilom in imenom teme, kjer je sporočilo prejeto.
Nato sporočila pretvorimo v niz, da ga lahko primerjamo in preverimo, ali so sprožilna dejanja. V tem projektu se LED vklopi / izklopi z ukazi MQTT, kot je prikazano v spodnji kodi.
for (int i = 0; i <length; i ++) {message = message + (char) payload; } Serial.print (sporočilo); if (message == "on") {digitalWrite (LED, HIGH); }
Za konec pa še objavo informacij o temi. Uporabljena je funkcija client.publish () . V tem projektu se preveri stanje gumba, če gumb pritisnete, se objavi sporočilo v temo “ esp / test1 ”, kot je prikazano spodaj.
if (digitalRead (D1) == 0)) {client.publish ("esp / test1", "Hello from ESP8266"); } drugače; client.loop ();
Testiranje MQTT z ESP8266 z uporabo Arduina
Za končno testiranje bomo uporabili aplikacijo Android, ki smo jo nastavili že prej.
Odprite odjemalsko aplikacijo MQTT in se prepričajte, da ima vaš mobilnik aktivno internetno povezavo. Prav tako mora imeti dostopna točka, na katero je povezan NodeMCU, aktivno internetno povezavo. Ko bo vse povezano z internetom, bomo iz modula ESP poslali niz »Hello from ESP8266«, ki se bo prikazal v aplikaciji Android, in prejeli bomo obvestilo. Nato bomo iz aplikacije za Android poslali niz, ki bo vklopil LED, ki je priključen na ploščo MCU vozlišča ESP8266.
1. korak: (Naročite se na temo):
V aplikaciji kliknite možnost Shranjeno MQTT, ki smo jo že nastavili. Odprl se bo zaslon, na katerem bo pozvan "Naročite se na temo". Pred tem smo temo konfigurirali kot » esp / test1 «. Tako bomo v aplikaciji za Android napisali » esp / test1 «. Kliknite Naroči se, s tem se vam prikaže zaslon, kot je spodaj, kjer bo iz določene teme zapisano kot "No message received"
Zdaj kliknite gumb 'Povezano', ki je povezan z nodeMCU. Zdaj bo po naši kodi v temi objavljeno sporočilo » Pozdravljeni iz ESP8266 «, na zaslonu pa bo prikazano obvestilo s prejetim sporočilom, kot je prikazano spodaj.
2. korak: Objavi na temo:
Zdaj za objavo v temi kliknite gumb PUŠČICA GOR v aplikaciji in odprl se bo zaslon, kot je prikazano spodaj.
Zdaj v polje Tema napišite “ esp / test ”, v polje za sporočilo pa “ on ” ali “ off ”, da vklopite in izklopite LED. Če je na primer v temi objavljeno »on«, bo LED vklopljena, če pa je v temi objavljeno »off«, bo LED izklopljen.
Upam, da vam je bil članek všeč in ste se naučili kaj novega. Če imate kakršna koli vprašanja v zvezi s tem člankom, vas prosimo, da komentirate spodaj ali pa namesto tega uporabite naš forum.