- Ce este Protocolul MQTT?
- Cum funcționează MQTT?
- Brokerul Eclipse Mosquitto
- Componente necesare
- Eclipse MQTT Test-Circuit - Schematic
- Programarea ESP8266 pentru a stabili comunicarea cu brokerul
- Testarea MQTT cu ESP8266 folosind Arduino
În ultimii ani, dispozitivele IoT (Internet of Things) au devenit o parte indistinctivă a vieții noastre de zi cu zi. De la case inteligente, becuri inteligente la aparate inteligente; creatorii și dezvoltatorii încorporează această tehnologie pentru a crea o rețea de dispozitive conectate care face viața noastră de zi cu zi un pic mai interesantă. Toate acestea au fost posibile datorită ușurinței comunicării. Există multe modalități posibile de a comunica între dispozitive, dar în produsele comerciale și hobby, un singur protocol care este utilizat în mod obișnuit este Message Queuing Telemetry Transport (MQTT). Am construit anterior un radio FM controlat prin voce folosind Arduino și Google Assistant care utilizează MQTT pentru a comunica cu placa NodeMCU. Verificați dacă sună interesant pentru dvs.
În acest proiect, vom folosi un broker Eclipse MQTT gratuit și popular și vom învăța cum să conectăm un dispozitiv IoT (în cazul nostru, este un modul NodeMCU) la un broker MQTT și să transferăm date între brokerul MQTT și NodeMCU.
Ce este Protocolul MQTT?
Înainte de a trece mai departe, este mai bine să aibă o idee clară despre MQTT (Message Queuing Telemetry Transport) protocolul. Este un protocol ușor de mesagerie care folosește metoda de publicare / abonare și traduce mesajele între mai multe dispozitive. Folosind protocolul MQTT, putem, de asemenea, să trimitem / să primim date și să controlăm diferite dispozitive de ieșire, cum ar fi citirea datelor senzorilor etc. Este dezvoltat pe partea de sus a TCP, motiv pentru care este mai rapid decât protocoalele similare precum HTTP. În afară de asta, are multe alte avantaje față de alte protocoale, cum ar fi foarte ușor, deci nu consumă exces de memorie, poate funcționa cu o lățime de bandă de rețea foarte mică, pe lângă aceasta, are un protocol de securitate robust încorporat. Aceste caracteristici îl fac potrivit pentru multe aplicații.
Cum funcționează MQTT?
Pentru a înțelege funcționarea protocolului MQTT, trebuie doar să înțelegem trei lucruri de bază; diagrama de mai sus arată că. De asemenea, am explicat-o mai jos în articol.
Client MQTT:
Un client MQTT este orice dispozitiv (poate fi un microcontroler sau un server) care rulează funcții MQTT și comunică cu un server central, cunoscut sub numele de „ broker ”. Brokerul se ocupă de comunicarea datelor între clienții conectați.
Editor MQTT:
Atunci când un client dorește să trimită orice informație, clientul este cunoscut ca „Publisher”. Editorul va publica informațiile despre un anumit subiect. „ Subiect ” este o cale în care putem publica / abona mesaje. Brokerul trimite apoi informațiile publicate de utilizator către clienții (cunoscuți și ca Abonat) care s-au abonat la acel subiect specific.
Abonat MQTT:
MQTT Abonatul subscrie la subiectele pe un MQTT broker pentru a citi mesajele trimise de broker.
Brokerul Eclipse Mosquitto
Eclipse Mosquitto este un broker open-source MQTT, care este ușor și este potrivit pentru utilizarea pe dispozitive IoT pentru comunicare. Protocolul MQTT oferă o metodă ușoară de a transfera informații folosind o publica / abona model. Dacă doriți să aflați mai multe despre acest subiect, puteți vizita site-ul oficial al țânțarilor.
Configurarea brokerului Eclipse Mosquitto:
Pentru a stabili comunicarea cu brokerul, trebuie să o configurăm mai întâi. În acest proiect, o aplicație Android este utilizată pentru a publica și abona informațiile cu Brokerul. Următorii pași vă vor oferi o idee mai bună despre procesul de configurare.
Pasul 1:
Mai întâi, descărcați orice aplicație „client MQTT” disponibilă în Google Play Store / App Store și instalați-o. În acest proiect, este utilizată o aplicație numită „client MQTT”, care arată ca imaginea prezentată mai jos.
Pasul 2:
Faceți clic pe semnul „+” pentru a afișa opțiunile suplimentare din aplicație, unde vom adăuga un nou broker. Când se face clic pe buton, apare un nou ecran așa cum se arată mai jos.
Pasul 3:
Ulterior, detaliile brokerului trebuie completate în câmpul obligatoriu. Mai întâi, faceți clic pe opțiunea „Enabled” afișată în aplicație. În acest proiect, este utilizat brokerul Eclipse MQTT, detaliile care urmează să fie completate sunt prezentate mai jos:
Pseudonim: Dați un nume de preferință
Gazdă: mqtt.eclipse.org
Port: 1883
ID-ul clientului: dați un ID al preferinței dvs.
Detaliile de mai sus trebuie completate în câmpurile respective. Toate celelalte câmpuri nu sunt necesare și pot fi lăsate necompletate. După finalizarea cu succes, faceți clic pe butonul de salvare pentru a salva detaliile brokerului.
Odată terminat, procesul de configurare a aplicației Android s-a încheiat și acum putem trece la partea hardware a lucrurilor.
Componente necesare
O listă completă a pieselor necesare este descrisă mai jos. Deoarece acest circuit este simplu, puteți găsi toate piesele necesare la magazinul local de hobby-uri.
- NodeMCU
- LED
- Breadboard
- Conectarea firelor
- Cablu de programare
Eclipse MQTT Test-Circuit - Schematic
Schema circuitului pentru proiectul Basic MQTT este prezentată mai jos:
Programarea ESP8266 pentru a stabili comunicarea cu brokerul
Un cod Arduino simplu are grijă de toate comunicațiile necesare între brokerul MQTT și NodeMCU. În această secțiune, vom afla cum funcționează în detaliu această funcționalitate.
Configurați IDE Arduino și încărcați codul:
Dacă încărcați codul pe NodeMCU pentru prima dată, trebuie mai întâi să configurați ID-ul Arduino. Pentru a face acest lucru, trebuie doar să urmați instrucțiunile simple de mai jos.
Mai întâi, deschideți Arduino IDE, apoi accesați Fișier–> Preferințe–> Setări .
Apoi, copiați adresa URL de mai jos și lipiți-o în câmpul „Adresa URL suplimentară a administratorului de bord ” și faceți clic pe „Ok”. Puteți verifica imaginea de mai jos pentru a afla cum am făcut asta.
Link:
Apoi, accesați Instrumente> Placă> Manager placi . În fereastra Manager consiliului, tastați ESP 8266 în caseta de căutare și apăsați Enter. Apoi selectați cea mai recentă versiune din meniul derulant și faceți clic pe instalare. Imaginea de mai jos vă va oferi o idee clară.
În cele din urmă, odată ce instalarea este finalizată, accesați Instrumente -> Placă -> și selectați NodeMCU 1.0 (ESP-12E Module). Acum, puteți programa NodeMCU cu Arduino IDE. După ce am terminat de configurat Arduino IDE, putem încărca acum codul complet. Dar mai întâi, citiți explicația rapidă a întregului cod.
În primul rând, am inclus „ESP8266WiFi.h” pentru utilizarea ESP8266 și „PubSubClient.h” pentru MQTT.
Puteți găsi biblioteca ESP8266 preconstruită în biblioteca Arduino, dar trebuie să descărcați biblioteca PubSubClient din depozitul GitHub asociat.
#include
Apoi, definiți acreditările de rețea, cum ar fi numele de utilizator și parola Wi-Fi. Înlocuiți acreditările în locul „admin” și respectiv „12345678”.
const char * ssid = "admin"; const char * password = "12345678";
Apoi, trebuie să configurăm serverul MQTT. Am folosit serverul Eclipse MQTT pentru acest proiect, motiv pentru care adresa serverului este dată „mqtt.eclipse.org”. Dar dacă intenționați să utilizați orice alt server cum ar fi Mosquitto, Adafruit, atunci îl puteți înlocui cu adresa serverului specific și cu numărul portului.
const char * mqtt_server = "mqtt.eclipse.org"; const int mqtt_port = 1883;
Apoi, instanțele sunt create pentru clasa WiFiClient și PubSubClient , care vor fi utilizate pe tot parcursul programului.
WiFiClient espClient; Clientul PubSubClient (espClient);
În secțiunea setup () , apelăm mai întâi WiFi.begin () , apelând această metodă se va conecta ESP la HotSpot-ul preferat.
WiFi.begin (ssid, parolă);
Apoi, verificăm dacă există o conexiune de rețea reușită folosind metoda WiFi.status () . După o conexiune reușită, un mesaj este tipărit pe Serial Monitor cu SSID-ul rețelei conectate.
while (WiFi.status ()! = WL_CONNECTED) {întârziere (500); Serial.println ("Conectarea la WiFi.."); } Serial.print ("Conectat la WiFi:"); Serial.println (WiFi.SSID ());
Acum, trebuie să creăm un broker. Pentru aceasta, am folosit metoda setServer ; această metodă ia două argumente pe care le-am predefinit anterior. Acum, dacă dorim să primim mesaje de la server, trebuie să creăm o funcție de apel invers. Pentru aceasta, folosim metoda setCallback (callback) .
client.setServer (mqtt_server, mqtt_port); client.setCallback (MQTTcallback);
Acum, am folosit funcția de conectare (clientID) pentru a ne conecta la clientul ESP8266. Aici clientID este numele clientului și trebuie să fie unic. Dacă este conectat, atunci un mesaj de succes poate fi afișat în interiorul monitorului serial.
if (client.connect ("ESP8266")) {Serial.println ("conectat"); } else {Serial.print ("a eșuat cu starea") Serial.println (client.state ()); întârziere (2000); }
Apoi, numim client.subscribe () , o funcție MQTT încorporată, care este utilizată pentru a vă abona la un anumit subiect. Pentru acest proiect, am folosit „ esp / test ” ca nume de abonat.
client.subscribe ("esp / test");
Acum, funcția MQTTcallback este apelată pentru a verifica dacă sunt disponibile sau nu informații actualizate. Dacă sunt disponibile date noi, această funcție gestionează datele primite și tipărește un mesaj pe monitorul serial cu mesajul original și numele subiectului unde este primit mesajul.
Apoi, convertim mesajele într-un șir, astfel încât să poată fi comparate și verificate pentru orice acțiune de declanșare. În acest proiect, un LED este pornit / oprit folosind comenzile MQTT, așa cum se arată în codul de mai jos.
for (int i = 0; i <length; i ++) {message = message + (char) payload; } Serial.print (mesaj); if (mesaj == "activat") {digitalWrite (LED, HIGH); }
În cele din urmă, să publicați informațiile despre subiect. Este utilizată funcția client.publish () . În acest proiect, se verifică starea unui buton, dacă butonul este apăsat, atunci un mesaj este publicat la un subiect „ esp / test1 ”, așa cum se arată mai jos.
if (digitalRead (D1) == 0)) {client.publish ("esp / test1", "Hello from ESP8266"); } altfel; client.loop ();
Testarea MQTT cu ESP8266 folosind Arduino
Pentru testarea finală, vom folosi aplicația Android, pe care am configurat-o mai devreme.
Deschideți aplicația client MQTT și asigurați-vă că telefonul dvs. mobil are o conexiune activă la internet. De asemenea, hotspot-ul la care este conectat NodeMCU ar trebui să aibă o conexiune activă la internet. Odată ce totul este conectat la internet, vom trimite un șir „Bună ziua de la ESP8266” din modulul ESP, care va fi reflectat în aplicația Android și vom primi o notificare. Apoi, vom trimite un șir din aplicația Android, care va porni un LED care este conectat la placa MCU ESP8266 Node.
Pasul 1: (Abonați-vă la subiect):
Faceți clic pe opțiunea MQTT salvată din aplicație, pe care am configurat-o mai devreme. Se va afișa un ecran, unde i se solicită „Abonați-vă la un subiect”. Am configurat anterior subiectul ca „ esp / test1 ”. Deci, în aplicația pentru Android, vom scrie „ esp / test1 ”. Faceți clic pe Abonare, astfel veți prezenta un ecran ca mai jos, unde va fi scris ca „Niciun mesaj primit” din subiectul respectiv.
Acum, faceți clic pe butonul „Conectat” care este conectat la nodeMCU. Acum, conform codului nostru, un mesaj „ Bună ziua de la ESP8266 ” va fi publicat subiectului și va apărea o notificare pe ecran cu mesajul primit așa cum se arată mai jos.
Pasul 2: publicați la subiect:
Acum, pentru a publica în subiect, faceți clic pe butonul SĂGEATĂ sus a aplicației și va deschide un ecran așa cum se arată mai jos.
Acum, în câmpul Subiect, scrieți „ esp / test ” și în câmpul mesajului, scrieți „ pornit ” sau „ oprit ” pentru a porni și a opri respectiv LED-ul. De exemplu, dacă „On” este publicat în Topic, atunci LED-ul va fi aprins și dacă „off” este publicat în Topic, atunci LED-ul va fi oprit.
Sper că ți-a plăcut articolul și ai învățat ceva nou. Dacă aveți întrebări cu privire la acest articol, vă rugăm să nu ezitați să comentați mai jos sau puteți folosi forumul nostru în schimb.