- Što je MQTT protokol?
- Kako MQTT djeluje?
- Posrednik Eclipse Mosquitto
- Komponente potrebne
- Eclipse MQTT ispitni krug - shematski
- Programiranje ESP8266 za uspostavljanje komunikacije s brokerom
- Testiranje MQTT-a s ESP8266 pomoću Arduina
Tijekom posljednjih nekoliko godina IoT (Internet of Things) uređaji postali su nerazdvojni dio naše svakodnevice. Od pametnih domova, pametnih žarulja do pametnih uređaja; kreatori i programeri uključuju ovu tehnologiju kako bi stvorili mrežu povezanih uređaja koja naš svakodnevni život čine malo uzbudljivijim. Sve je to omogućeno zbog lakoće komunikacije. Postoji mnogo mogućih načina komunikacije između uređaja, ali u komercijalnim i hobi proizvodima jedan se uobičajeni protokol Telemetrijski transport u redu čekanja poruka (MQTT). Prethodno smo izgradili FM radio s glasovnim upravljanjem koristeći Arduino i Google Assistant koji koriste MQTT za komunikaciju s pločom NodeMCU. Provjerite čini li vam se to zanimljivim.
U ovom ćemo projektu koristiti besplatni i popularni Eclipse MQTT posrednik i naučiti kako povezati IoT uređaj (u našem slučaju to je NodeMCU modul) s MQTT posrednikom i prenositi podatke između MQTT brokera i NodeMCU.
Što je MQTT protokol?
Prije nego što nastavite dalje, to je bolje imati jasnu ideju o MQTT (Poruka čekanja telemetriju prometa) protokol. To je lagani protokol za razmjenu poruka koji koristi metodu objavljivanja / pretplate i prevodi poruke s više uređaja. Korištenjem MQTT protokola također možemo slati / primati podatke i kontrolirati razne izlazne uređaje, poput podataka za očitavanje senzora itd. Razvijen je na vrhu TCP-a, zbog čega je brži od sličnih protokola poput HTTP-a. Osim toga, ima mnogo drugih prednosti u odnosu na druge protokole poput vrlo laganog, tako da ne troši višak memorije, može raditi s vrlo manjom mrežnom propusnošću, povrh toga ima ugrađen robustan sigurnosni protokol. Ove značajke čine ga prikladnim za mnoge primjene.
Kako MQTT djeluje?
Da bismo razumjeli rad MQTT protokola, trebamo razumjeti tri osnovne stvari; gornji dijagram to pokazuje. Također, objasnili smo to u nastavku u članku.
MQTT klijent:
MQTT klijent je bilo koji uređaj (to može biti mikrokontrolera ili poslužitelj) koji se izvodi MQTT funkcije i komunicira sa središnjim poslužiteljem, koji je poznat kao „ posrednik ”. Posrednik rukuje podatkovnom komunikacijom između povezanih klijenata.
MQTT Izdavač:
Kada klijent želi poslati bilo kakve podatke, poznat je pod nazivom „Izdavač“. Izdavač će objaviti informacije o određenoj temi. " Tema " je put na kojem možemo objaviti / pretplatiti poruke. Posrednik zatim podatke koje je korisnik objavio šalje klijentima (poznatim i kao Pretplatnik) koji su se pretplatili na tu određenu temu.
Pretplatnik MQTT:
MQTT Pretplatnik pristaje na teme na MQTT brokera čitati poruke poslane od strane brokera.
Posrednik Eclipse Mosquitto
Eclipse Mosquitto je MQTT posrednik otvorenog koda, lagan i pogodan za upotrebu na IoT uređajima za komunikaciju. MQTT protokol osigurava laganu metodu za prijenos podataka putem objaviti / pretplatite model. Ako želite saznati više o toj temi, možete posjetiti službenu web stranicu protiv komaraca.
Postavljanje brokera Eclipse Mosquitto:
Da bismo uspostavili komunikaciju s posrednikom, prvo ga moramo postaviti. U ovom se projektu koristi Android aplikacija za objavljivanje i pretplatu na podatke kod brokera. Sljedeći koraci dat će vam bolju ideju o postupku postavljanja.
Korak 1:
Prvo preuzmite bilo koju aplikaciju "MQTT klijent" dostupnu u Trgovini Google Play / App Store i instalirajte je. U ovom se projektu koristi aplikacija nazvana “MQTT klijent”, koja izgleda poput donje prikazane slike.

Korak 2:
Kliknite znak "+" da biste popisali dodatne opcije u aplikaciji, gdje ćemo dodati novog brokera. Kada se klikne gumb, pojavit će se novi zaslon kao što je prikazano u nastavku.

Korak 3:
Nakon toga, detalji brokera moraju se popuniti u traženom polju. Prvo kliknite opciju "Omogućeno" prikazanu u aplikaciji. U ovom se projektu koristi posrednik Eclipse MQTT, detalji koje treba popuniti navedeni su u nastavku:
Nadimak: Dajte ime po svom izboru
Voditelj: mqtt.eclipse.org
Luka: 1883
ID klijenta: Dajte ID svojih postavki
Gore navedene detalje potrebno je popuniti u njihovim poljima. Sva ostala polja nisu potrebna i mogu se ostaviti prazna. Nakon uspješnog završetka, kliknite gumb Spremi da biste spremili detalje o posredniku.

Kada završite, postupak postavljanja android aplikacije je gotov i sada možemo prijeći na hardversku stranu stvari.
Komponente potrebne
Cjelovit popis potrebnih dijelova opisan je u nastavku. Kako je ovaj sklop jednostavan, sve potrebne dijelove možete pronaći u lokalnoj hobi trgovini.
- NodeMCU
- LED
- Breadboard
- Spajanje žica
- Kabel za programiranje
Eclipse MQTT ispitni krug - shematski
Shema spoja za osnovni projekt MQTT dana je u nastavku:

Programiranje ESP8266 za uspostavljanje komunikacije s brokerom
Jednostavni Arduino kôd brine se o svim potrebnim komunikacijama između MQTT brokera i NodeMCU. U ovom ćemo odjeljku detaljno naučiti kako funkcionira ova funkcija.
Postavite Arduino IDE i prenesite kôd:
Ako kôd prenosite na NodeMCU prvi put, prvo morate postaviti Arduino IDE. Da biste to učinili, samo slijedite jednostavne upute dane u nastavku.
Prvo otvorite Arduino IDE, a zatim idite na Datoteka–> Postavke–> Postavke .

Zatim kopirajte URL u nastavku i zalijepite ga u polje "Dodatni URL upravitelja ploče " i kliknite "U redu". Na donjoj slici možete provjeriti kako smo to učinili.
Link:

Zatim idite na Alati> Ploča> Upravitelj ploča . U prozor upravitelja ploče upišite ESP 8266 u okvir za pretraživanje i pritisnite Enter. Zatim s padajućeg izbornika odaberite najnoviju verziju i kliknite na install. Slika u nastavku dat će vam jasnu ideju.

Napokon, nakon što je instalacija dovršena, idite na Alati -> Ploča -> i odaberite NodeMCU 1.0 (ESP-12E modul). Sada možete programirati NodeMCU pomoću Arduino IDE-a. Kako smo završili s postavljanjem Arduino IDE-a, sada možemo prenijeti kompletan kod. Ali prvo pročitajte brzo objašnjenje cijelog koda.
Prvo, uključili smo "ESP8266WiFi.h" za upotrebu ESP8266 i "PubSubClient.h" za MQTT.
Možete pronaći unaprijed izgrađenu biblioteku ESP8266 unutar biblioteke Arduino, ali morate preuzeti biblioteku PubSubClient iz povezanog spremišta GitHub.
#include
Zatim definirajte mrežne vjerodajnice kao što su korisničko ime i lozinka za Wi-Fi. Zamijenite svoje vjerodajnice umjesto "admin" i "12345678".
const char * ssid = "admin"; const char * lozinka = "12345678";
Dalje, moramo konfigurirati MQTT poslužitelj. Za ovaj smo projekt koristili Eclipse MQTT poslužitelj, zbog čega je adresa poslužitelja navedena kao "mqtt.eclipse.org". Ali ako planirate koristiti bilo koji drugi poslužitelj poput Mosquitto, Adafruit, tada ga možete zamijeniti vašom određenom adresom poslužitelja i brojem porta.
const char * mqtt_server = "mqtt.eclipse.org"; const int mqtt_port = 1883;
Dalje se izrađuju instance za klasu WiFiClient i PubSubClient , koje će se koristiti u cijelom programu.
WiFiClient espClient; PubSubClient klijent (espClient);
U odjeljku setup () prvo pozivamo WiFi.begin () , pozivanjem ove metode povezat ćete ESP s željenim HotSpot-om.
WiFi.begin (ssid, lozinka);
Dalje provjeravamo je li mrežna veza uspješna pomoću metode WiFi.status () . Nakon uspješne veze, na Serial Monitor se ispisuje poruka s SSID-om povezane mreže.
while (WiFi.status ()! = WL_CONNECTED) {delay (500); Serial.println ("Spajanje na WiFi.."); } Serial.print ("Povezano na WiFi:"); Serial.println (WiFi.SSID ());
Sada moramo stvoriti brokera. Za to smo koristili metodu setServer ; ova metoda uzima dva argumenta koja smo prethodno definirali. Sada, ako želimo primati poruke s poslužitelja, moramo stvoriti funkciju povratnog poziva. Za to koristimo metodu setCallback (povratni poziv) .
client.setServer (mqtt_server, mqtt_port); client.setCallback (MQTTcallback);
Sada smo koristili funkciju povezivanja (clientID) za povezivanje s klijentom ESP8266. Ovdje je clientID ime klijenta i mora biti jedinstveno. Ako je povezan, poruka se o uspjehu može prikazati unutar serijskog monitora.
if (client.connect ("ESP8266")) {Serial.println ("connected"); } else {Serial.print ("neuspjelo sa stanjem") Serial.println (client.state ()); kašnjenje (2000); }
Dalje nazivamo client.subscribe () , ugrađenu MQTT funkciju koja se koristi za pretplatu na određenu temu. Za ovaj projekt koristili smo " esp / test " kao ime pretplatnika.
client.subscribe ("esp / test");
Sada se poziva funkcija MQTTcallback da bi se provjerilo jesu li dostupne neke ažurirane informacije ili ne. Ako su dostupni novi podaci, ova funkcija obrađuje primljene podatke i ispisuje poruku na serijski monitor s izvornom porukom i nazivom teme na koju se poruka prima.
Dalje, pretvaramo poruke u niz, tako da se može usporediti i provjeriti ima li pokretanja. U ovom projektu LED se uključuje / isključuje pomoću MQTT naredbi, kao što je prikazano u donjem kodu.
for (int i = 0; i <length; i ++) {message = message + (char) payload; } Serial.print (poruka); if (poruka == "uključeno") {digitalWrite (LED, VISOKO); }
Konačno, objaviti informacije o temi. Client.publish () se funkcija koristi. U ovom se projektu provjerava status tipke, ako se tipka pritisne, tada se objavljuje poruka u temi “ esp / test1 ” kao što je prikazano dolje.
if (digitalRead (D1) == 0)) {client.publish ("esp / test1", "Hello from ESP8266"); } ostalo; client.loop ();
Testiranje MQTT-a s ESP8266 pomoću Arduina
Za naše konačno testiranje koristit ćemo Android aplikaciju koju smo ranije postavili.
Otvorite klijentsku aplikaciju MQTT i pobrinite se da vaš mobitel ima aktivnu internetsku vezu. Također, žarišna točka na koju je povezan NodeMCU trebala bi imati aktivnu internetsku vezu. Nakon što se sve poveže s internetom, poslat ćemo niz "Pozdrav iz ESP8266" iz modula ESP, koji će se odraziti u Android aplikaciji, a mi ćemo dobiti obavijest. Dalje ćemo poslati niz iz Android aplikacije koji će UKLJUČITI LED koji je povezan s MCU pločom ESP8266 Node.
Korak 1: (Pretplatite se na temu):
Kliknite opciju Spremljeno MQTT u aplikaciji, koju smo ranije konfigurirali. Otvorit će se zaslon na kojem se traži "Pretplatite se na temu". Prethodno smo temu konfigurirali kao " esp / test1 ". Dakle, u aplikaciji za Android napisat ćemo " esp / test1 ". Kliknite Pretplati se, tako će se prikazati zaslon kao u nastavku, gdje će iz određene teme biti napisano kao "Nije primljena nijedna poruka".

Sada kliknite gumb 'Povezano' koji je povezan s nodeMCU. Sada će, prema našem kodu, u temu biti objavljena poruka " Pozdrav iz ESP8266 ", a na zaslonu će se pojaviti obavijest s primljenom porukom kao što je prikazano u nastavku.

Korak 2: Objavi na temu:
Sada za objavljivanje u Temi, kliknite gumb STRELICA GORE u aplikaciji i otvorit će se zaslon kao što je prikazano u nastavku.

Sada u polje Tema napišite „ esp / test “, a u polje za poruke napišite „ on “ ili „ off “ da biste uključili i isključili LED diodu. Na primjer, ako je "uključeno" objavljeno u Tema, tada će se uključiti LED, a ako se u Temu objavi "isključeno", tada će se LED isključiti.
Nadam se da vam se svidio članak i naučili ste nešto novo. Ako imate bilo kakvih pitanja u vezi s ovim člankom, slobodno komentirajte u nastavku ili umjesto toga možete koristiti naš forum.
