- Què és el protocol MQTT?
- Com funciona MQTT?
- El corredor Eclipse Mosquitto
- Components necessaris
- Circuit de prova Eclipse MQTT: esquema
- Programació ESP8266 per establir comunicació amb Broker
- Provant MQTT amb ESP8266 mitjançant Arduino
Durant els darrers anys, els dispositius IoT (Internet of Things) s’han convertit en una part indistingible de la nostra vida quotidiana. Des de cases intel·ligents, bombetes intel·ligents fins a electrodomèstics intel·ligents; els creadors i desenvolupadors incorporen aquesta tecnologia per crear una xarxa de dispositius connectats que fa que el nostre dia a dia sigui una mica més emocionant. Tot això ha estat possible gràcies a la facilitat de comunicació. Hi ha moltes maneres possibles de comunicar-se entre els dispositius, però en productes comercials i d'oci, un protocol únic que s'utilitza habitualment és el transport de telemetria de missatges de cua (MQTT). Anteriorment hem creat una ràdio FM controlada per veu mitjançant Arduino i Google Assistant que utilitza MQTT per comunicar-se amb la placa NodeMCU. Comproveu-ho si us sembla interessant.
En aquest projecte, utilitzarem un broker Eclipse MQTT gratuït i popular i aprendrem a connectar un dispositiu IoT (en el nostre cas, és un mòdul NodeMCU) a un broker MQTT i transferir dades entre el broker MQTT i NodeMCU.
Què és el protocol MQTT?
Abans de continuar, és millor tenir una idea clara sobre el protocol MQTT (Message Queuing Telemetry Transport). És un protocol de missatgeria lleuger que utilitza el mètode de publicació / subscripció i tradueix missatges entre diversos dispositius. Mitjançant el protocol MQTT, també podem enviar / rebre dades i controlar diversos dispositius de sortida, com llegir dades del sensor, etc. Es desenvolupa a la part superior de TCP, motiu pel qual és més ràpid que protocols similars com HTTP. A part d’això, té molts altres avantatges respecte a altres protocols com el seu pes molt lleuger, de manera que no consumeix excés de memòria, pot funcionar amb una amplada de banda de xarxa molt inferior, a més, té un protocol de seguretat robust incorporat. Aquestes característiques el fan adequat per a moltes aplicacions.
Com funciona MQTT?
Per entendre el funcionament del protocol MQTT, només hem d’entendre tres coses bàsiques; el diagrama anterior ho mostra. A més, ho hem explicat a continuació a l'article.
Client MQTT:
Un client MQTT és qualsevol dispositiu (pot ser un microcontrolador o un servidor) que executa funcions MQTT i es comunica amb un servidor central, que es coneix com a " intermediari ". El corredor gestiona la comunicació de dades entre els clients connectats.
Editor MQTT:
Quan un client vol enviar qualsevol informació, es coneix com a "editor". L’editor publicarà la informació sobre un tema concret. " Tema " és un camí on podem publicar / subscriure missatges. A continuació, l'agent envia la informació publicada per l'usuari als clients (també coneguts com a subscriptors) que s'han subscrit a aquest tema específic.
Subscriptor MQTT:
El subscriptor de MQTT es subscriu a temes d’un broker MQTT per llegir els missatges enviats pel broker.
El corredor Eclipse Mosquitto
Eclipse Mosquitto és un broker MQTT de codi obert, lleuger i adequat per a ús en dispositius IoT per a la comunicació. El protocol MQTT proporciona un mètode lleuger de transferència d’informació mitjançant un model de publicació / subscripció. Si voleu obtenir més informació sobre el tema, podeu visitar el lloc web oficial dels mosquits.
Configuració del corredor Eclipse Mosquitto:
Per establir una comunicació amb l’agent, primer hem de configurar-la. En aquest projecte, s’utilitza una aplicació per a Android per publicar i subscriure’s a la informació amb l’agent. Els passos següents us donaran una millor idea del procés de configuració.
Pas 1:
En primer lloc, descarregueu qualsevol aplicació "client MQTT" disponible a Google Play Store / App Store i instal·leu-la. En aquest projecte, s'utilitza una aplicació anomenada "client MQTT", que s'assembla a la imatge que es mostra a continuació.

Pas 2:
Feu clic al signe "+" per llistar les opcions addicionals a l'aplicació, on afegirem un broker nou. Quan es fa clic al botó, apareix una nova pantalla com es mostra a continuació.

Pas 3:
Posteriorment, cal omplir les dades del corredor al camp obligatori. Primer, feu clic a l'opció "Habilitat" que apareix a l'aplicació. En aquest projecte, s’utilitza el broker Eclipse MQTT, a continuació es detallen les dades que s’han d’emplenar:
Sobrenom: doneu un nom a la vostra preferència
Amfitrió: mqtt.eclipse.org
Port: 1883
Identificador de client: proporcioneu un identificador de la vostra preferència
Cal omplir els detalls anteriors als seus camps respectius. La resta de camps no són necessaris i es poden deixar en blanc. Després de completar-la correctament, feu clic al botó Desa per desar la informació del corredor.

Un cop fet, s’ha acabat el procés de configuració de l’aplicació per a Android i ara podem passar al maquinari de les coses.
Components necessaris
A continuació es descriu una llista completa de les peces necessàries. Com que aquest circuit és senzill, podeu trobar totes les peces necessàries a la vostra botiga d’aficionats local.
- NodeMCU
- LED
- Taula de pa
- Connexió de cables
- Cable de programació
Circuit de prova Eclipse MQTT: esquema
A continuació es mostra el diagrama de circuits del projecte Basic MQTT:

Programació ESP8266 per establir comunicació amb Broker
Un simple codi Arduino s’encarrega de totes les comunicacions necessàries entre l’agent MQTT i el NodeMCU. En aquesta secció, aprendrem com funciona aquesta funcionalitat en detall.
Configureu Arduino IDE i pengeu el codi:
Si esteu penjant el codi al NodeMCU per primera vegada, primer heu de configurar l’ IDE Arduino. Per fer-ho, només cal que seguiu les senzilles instruccions que es donen a continuació.
Primer, obriu Arduino IDE i, a continuació, aneu a Fitxer–> Preferències–> Configuració .

A continuació, copieu l'URL següent i enganxeu-lo al camp " URL del gestor de taules addicionals " i feu clic a "D'acord". Podeu consultar la imatge següent per saber com ho hem fet.
Enllaç:

A continuació, aneu a Eines> Tauler> Gestor de taulers . A la finestra Administrador del fòrum, escriviu ESP 8266 al quadre de cerca i premeu Retorn. A continuació, seleccioneu la versió més recent del menú desplegable i feu clic a Instal·la. La imatge següent us donarà una idea clara.

Finalment, un cop finalitzada la instal·lació, aneu a Eines -> Tauler -> i seleccioneu NodeMCU 1.0 (mòdul ESP-12E). Ara podeu programar NodeMCU amb Arduino IDE. Quan hem acabat de configurar l'IDE Arduino, ara podem penjar el codi complet. En primer lloc, llegiu la ràpida explicació de tot el codi.
En primer lloc, hem inclòs "ESP8266WiFi.h" per utilitzar ESP8266 i "PubSubClient.h" per a MQTT.
Podeu trobar la biblioteca ESP8266 preconstruïda dins de la biblioteca Arduino, però heu de descarregar la biblioteca PubSubClient des del seu repositori GitHub associat.
#incloure
A continuació, definiu les credencials de xarxa, com ara el vostre nom d'usuari i contrasenya de Wi-Fi. Substituïu les vostres credencials en lloc de "administrador" i "12345678" respectivament.
const char * ssid = "administrador"; const char * password = "12345678";
A continuació, hem de configurar el servidor MQTT. Hem utilitzat el servidor Eclipse MQTT per a aquest projecte, motiu pel qual l'adreça del servidor s'indica com "mqtt.eclipse.org". Però si teniu previst utilitzar qualsevol altre servidor com Mosquitto, Adafruit, podeu substituir-lo per la vostra adreça i número de port específics.
const char * mqtt_server = "mqtt.eclipse.org"; const int mqtt_port = 1883;
A continuació, es creen les instàncies per a la classe WiFiClient i PubSubClient , que s’utilitzaran a tot el programa.
WiFiClient espClient; Client PubSubClient (espClient);
A la secció setup () , primer anomenem WiFi.begin () , en trucar a aquest mètode es connectarà l’ESP al vostre HotSpot preferit.
WiFi.begin (ssid, contrasenya);
A continuació, comprovem si la connexió de xarxa té èxit mitjançant el mètode WiFi.status () . Després d’una connexió correcta, s’imprimeix un missatge a Serial Monitor amb l’SSID de la xarxa connectada.
while (WiFi.status ()! = WL_CONNECTED) {demora (500); Serial.println ("Connexió a WiFi.."); } Serial.print ("Connectat a WiFi:"); Serial.println (WiFi.SSID ());
Ara, hem de crear un broker. Per a això, hem utilitzat el mètode setServer ; aquest mètode pren dos arguments que hem predefinit anteriorment. Ara, si volem rebre missatges del servidor, hem de crear una funció de devolució de trucada. Per a això, fem servir el mètode setCallback (callback) .
client.setServer (mqtt_server, mqtt_port); client.setCallback (MQTTcallback);
Ara hem utilitzat la funció connect (clientID) per connectar-nos al client ESP8266. Aquí clientID és el nom del client i ha de ser únic. Si està connectat, es pot mostrar un missatge d'èxit dins del monitor sèrie.
if (client.connect ("ESP8266")) {Serial.println ("connectat"); } else {Serial.print ("ha fallat amb l'estat") Serial.println (client.state ()); endarreriment (2000); }
A continuació, anomenem client.subscribe () , una funció MQTT integrada, que s’utilitza per subscriure’s a un tema concret. Per a aquest projecte, hem utilitzat " esp / test " com a nom de subscriptor.
client.subscribe ("esp / test");
Ara, es crida a la funció MQTTcallback per comprovar si hi ha informació actualitzada disponible o no. Si hi ha dades noves disponibles, aquesta funció gestiona les dades rebudes i imprimeix un missatge al monitor sèrie amb el missatge original i el nom del tema on es rep el missatge.
A continuació, convertim els missatges en una cadena, de manera que es pugui comparar i comprovar si hi ha accions desencadenants. En aquest projecte, s’encén / apaga un LED mitjançant ordres MQTT, tal com es mostra al codi següent.
per a (int i = 0; i <longitud; i ++) {missatge = missatge + (char) càrrega útil; } Serial.print (missatge); if (missatge == "activat") {digitalWrite (LED, HIGH); }
Finalment, publicar la informació sobre el tema. El client.publish () s'utilitza la funció. En aquest projecte, es marca l'estat d'un polsador, si es prem el botó, es publica un missatge a un tema " esp / test1 ", tal com es mostra a continuació.
if (digitalRead (D1) == 0)) {client.publish ("esp / test1", "Hello from ESP8266"); } altra cosa; client.loop ();
Provant MQTT amb ESP8266 mitjançant Arduino
Per a la nostra prova final, farem servir l’aplicació Android, que hem creat anteriorment.
Obriu l'aplicació client MQTT i assegureu-vos que el vostre mòbil tingui una connexió a Internet activa. A més, el punt d'accés al qual està connectat el NodeMCU hauria de tenir una connexió a Internet activa. Un cop tot estigui connectat a Internet, enviarem una cadena "Hello from ESP8266" des del mòdul ESP, que es reflectirà a l'aplicació d'Android i rebrem una notificació. A continuació, enviarem una cadena des de l'aplicació d'Android, que engegarà un LED connectat a la placa MCU ESP8266 Node.
Pas 1: (Subscriviu-vos al tema):
Feu clic a l'opció MQTT desada a l'aplicació, que hem configurat anteriorment. Apareixerà una pantalla on se li demanarà "Subscriure's a un tema". Anteriorment, hem configurat el tema com a " esp / test1 ". Per tant, a l’aplicació per a Android escriurem “ esp / test1 ”. Feu clic a Subscriu-vos, de manera que us presentarà una pantalla com la següent, on s'escriurà com "No s'ha rebut cap missatge" del tema en particular.

Ara feu clic al botó "Connectat" que està connectat al nodeMCU. Ara, segons el nostre codi, es publicarà un missatge " Hola des de ESP8266 " al tema i hi haurà una notificació a la pantalla amb el missatge rebut tal com es mostra a continuació.

Pas 2: publiqueu al tema:
Ara, per publicar-lo al tema, feu clic al botó FLETXA AMUNT de l'aplicació i s'obrirà una pantalla com es mostra a continuació.

Ara, al camp Tema, escriviu " esp / test " i al camp del missatge, escriviu " activat " o " apagat " per encendre i apagar el LED respectivament. Per exemple, si es publica “On” al tema, el LED s’encendrà i si es publica “Off” al tema, el LED s’apagarà.
Espero que us hagi agradat l'article i hàgiu après alguna cosa nova. Si teniu cap pregunta sobre aquest article, no dubteu a fer comentaris a continuació o bé podeu fer servir el nostre fòrum.
