- ¿Qué es el protocolo MQTT?
- ¿Cómo funciona MQTT?
- El corredor de Eclipse Mosquitto
- Componentes requeridos
- Circuito de prueba Eclipse MQTT - Esquema
- Programación de ESP8266 para establecer comunicación con el corredor
- Probando MQTT con ESP8266 usando Arduino
En los últimos años, los dispositivos IoT (Internet of Things) se han convertido en una parte indistinguible de nuestra vida diaria. Desde hogares inteligentes, bombillas inteligentes hasta electrodomésticos inteligentes; los creadores y desarrolladores están incorporando esta tecnología para crear una red de dispositivos conectados que hace que nuestro día a día sea un poco más emocionante. Todo esto ha sido posible gracias a la facilidad de comunicación. Hay muchas formas posibles de comunicarse entre dispositivos, pero en productos comerciales y de pasatiempo, un único protocolo que se usa comúnmente es el transporte de telemetría de Message Queue Server (MQTT). Anteriormente construimos una radio FM controlada por voz usando Arduino y Google Assistant que utiliza MQTT para comunicarse con la placa NodeMCU. Compruébalo si te parece interesante.
En este proyecto, utilizaremos un bróker Eclipse MQTT gratuito y popular y aprenderemos cómo conectar un dispositivo IoT (en nuestro caso, es un módulo NodeMCU) a un bróker MQTT y transferiremos datos entre el bróker MQTT y NodeMCU.
¿Qué es el protocolo MQTT?
Antes de continuar, es mejor tener una idea clara sobre el protocolo MQTT (Message Queue Server Telemetry Transport). Es un protocolo de mensajería ligero que utiliza el método de publicación / suscripción y traduce mensajes entre varios dispositivos. Usando el protocolo MQTT, también podemos enviar / recibir datos y controlar varios dispositivos de salida, como leer datos de sensores, etc. Está desarrollado sobre TCP, por lo que es más rápido que protocolos similares como HTTP. Aparte de eso, tiene muchas otras ventajas sobre otros protocolos como su peso muy ligero, por lo que no consume un exceso de memoria, puede trabajar con un ancho de banda de red muy inferior, además de eso, tiene incorporado un protocolo de seguridad robusto. Estas características lo hacen adecuado para muchas aplicaciones.
¿Cómo funciona MQTT?
Para comprender el funcionamiento del protocolo MQTT, solo necesitamos comprender tres cosas básicas; el diagrama anterior muestra eso. Además, lo hemos explicado a continuación en el artículo.
Cliente MQTT:
Un cliente MQTT es cualquier dispositivo (puede ser un microcontrolador o un servidor) que ejecuta funciones MQTT y se comunica con un servidor central, que se conoce como el " intermediario ". El corredor maneja la comunicación de datos entre los clientes conectados.
Editorial MQTT:
Cuando un cliente desea enviar cualquier información, el cliente se conoce como un "editor". El editor publicará la información sobre un tema en particular. " Tema " es una ruta donde podemos publicar / suscribir mensajes. Luego, el corredor envía la información publicada por el usuario a los clientes (también conocidos como suscriptores) que se han suscrito a ese tema específico.
Suscriptor de MQTT:
El suscriptor de MQTT se suscribe a temas en un intermediario MQTT para leer los mensajes enviados por el intermediario.
El corredor de Eclipse Mosquitto
Eclipse Mosquitto es un bróker MQTT de código abierto, que es liviano y adecuado para su uso en dispositivos IoT para la comunicación. El protocolo MQTT proporciona un método ligero para transferir información utilizando un modelo de publicación / suscripción. Si desea obtener más información sobre el tema, puede visitar el sitio web oficial de mosquitos.
Configuración del corredor Eclipse Mosquitto:
Para establecer la comunicación con el corredor, primero debemos configurarlo. En este proyecto, se utiliza una aplicación de Android para publicar y suscribirse a la información con el Broker. Los siguientes pasos le darán una mejor idea del proceso de configuración.
Paso 1:
Primero, descargue cualquier aplicación de “cliente MQTT” disponible en Google Play Store / App Store e instálela. En este proyecto, se utiliza una aplicación llamada "cliente MQTT", que se parece a la imagen que se muestra a continuación.
Paso 2:
Haga clic en el signo "+" para enumerar las opciones adicionales en la aplicación, donde vamos a agregar un nuevo corredor. Cuando se hace clic en el botón, aparece una nueva pantalla como se muestra a continuación.
Paso 3:
A partir de entonces, los detalles del corredor deben completarse en el campo requerido. Primero, haga clic en la opción "Habilitado" que se muestra en la Aplicación. En este proyecto, se utiliza el broker Eclipse MQTT, los detalles que se deben completar se detallan a continuación:
Apodo: da un nombre de tu preferencia
Anfitrión: mqtt.eclipse.org
Puerto: 1883
Identificación de cliente: proporcione una identificación de su preferencia
Los detalles anteriores deben completarse en sus respectivos campos. Todos los demás campos no son necesarios y pueden dejarse en blanco. Después de completar con éxito, haga clic en el botón Guardar para guardar los detalles del corredor.
Una vez hecho esto, el proceso de configuración de la aplicación de Android ha terminado y ahora podemos pasar al lado del hardware.
Componentes requeridos
A continuación se describe una lista completa de las piezas necesarias. Como este circuito es simple, puede encontrar todas las piezas necesarias en su tienda de hobby local.
- NodeMCU
- LED
- Tablero de circuitos
- Cables de conexión
- Cable de programación
Circuito de prueba Eclipse MQTT - Esquema
El diagrama de circuito del proyecto Basic MQTT se muestra a continuación:
Programación de ESP8266 para establecer comunicación con el corredor
Un simple código Arduino se encarga de todas las comunicaciones necesarias entre el bróker MQTT y NodeMCU. En esta sección, aprenderemos cómo funciona esta funcionalidad en detalle.
Configure Arduino IDE y cargue el código:
Si está cargando el código en NodeMCU por primera vez, primero debe configurar el IDE de Arduino. Para hacer eso, simplemente siga las instrucciones simples que se dan a continuación.
Primero, abra Arduino IDE, luego vaya a Archivo–> Preferencias–> Configuración .
A continuación, copie la siguiente URL y péguela en el campo " URL adicional del administrador del tablero " y haga clic en "Aceptar". Puede consultar la imagen a continuación para saber cómo lo hemos hecho.
Enlace:
A continuación, vaya a Herramientas> Tablero> Administrador de tableros . En la ventana del Administrador del tablero, escriba ESP 8266 en el cuadro de búsqueda y presione enter. Luego, seleccione la última versión del menú desplegable y haga clic en instalar. La siguiente imagen le dará una idea clara.
Finalmente, una vez finalizada la instalación, vaya a Herramientas -> Placa -> y seleccione NodeMCU 1.0 (Módulo ESP-12E). Ahora, puede programar NodeMCU con Arduino IDE. Cuando hemos terminado de configurar el IDE de Arduino, ahora podemos cargar el código completo. Pero primero, lea la explicación rápida de todo el código.
En primer lugar, hemos incluido “ESP8266WiFi.h” para usar ESP8266 y “PubSubClient.h” para MQTT.
Puede encontrar la biblioteca ESP8266 precompilada dentro de la biblioteca Arduino, pero necesita descargar la biblioteca PubSubClient desde su repositorio asociado de GitHub.
#incluir
Luego, defina las credenciales de la red, como su nombre de usuario y contraseña de Wi-Fi. Reemplace sus credenciales en lugar de "admin" y "12345678" respectivamente.
const char * ssid = "admin"; const char * contraseña = "12345678";
A continuación, necesitamos configurar el servidor MQTT. Hemos utilizado el servidor Eclipse MQTT para este proyecto, por lo que la dirección del servidor se da como “mqtt.eclipse.org”. Pero si planea usar cualquier otro servidor como Mosquitto, Adafruit, puede reemplazarlo con su dirección de servidor y número de puerto específicos.
const char * mqtt_server = "mqtt.eclipse.org"; const int mqtt_port = 1883;
A continuación, se crean las instancias para la clase WiFiClient y PubSubClient , que se utilizarán en todo el programa.
WiFiClient espClient; Cliente PubSubClient (espClient);
En la sección setup () , primero llamamos a WiFi.begin () , llamar a este método conectará el ESP a su HotSpot preferido.
WiFi.begin (ssid, contraseña);
A continuación, verificamos una conexión de red exitosa usando el método WiFi.status () . Después de una conexión exitosa, se imprime un mensaje en Serial Monitor con el SSID de la red conectada.
while (WiFi.status ()! = WL_CONNECTED) {retraso (500); Serial.println ("Conectando a WiFi…"); } Serial.print ("Conectado a WiFi:"); Serial.println (WiFi.SSID ());
Ahora, necesitamos crear un corredor. Para eso, hemos utilizado el método setServer ; este método toma dos argumentos que hemos predefinido anteriormente. Ahora, si queremos recibir mensajes del servidor, necesitamos crear una función de devolución de llamada. Para eso, estamos usando el método setCallback (callback) .
client.setServer (mqtt_server, mqtt_port); client.setCallback (MQTTcallback);
Ahora, hemos utilizado la función connect (clientID) para conectarnos al cliente ESP8266. Aquí clientID es el nombre del cliente y debe ser único. Si está conectado, se puede mostrar un mensaje de éxito dentro del monitor en serie.
if (client.connect ("ESP8266")) {Serial.println ("conectado"); } else {Serial.print ("falló con el estado") Serial.println (client.state ()); retraso (2000); }
A continuación, llamamos a client.subscribe () , una función MQTT incorporada, que se utiliza para suscribirse a un tema en particular. Para este proyecto, hemos utilizado " esp / test " como nuestro nombre de suscriptor.
client.subscribe ("esp / test");
Ahora, se llama a la función MQTTcallback para comprobar si hay información actualizada disponible o no. Si hay nuevos datos disponibles, esta función maneja los datos recibidos e imprime un mensaje en el monitor serial con el mensaje original y el nombre del tema donde se recibe el mensaje.
A continuación, convertimos los mensajes en una cadena, de modo que se pueda comparar y verificar si hay acciones desencadenantes. En este proyecto, un LED se enciende / apaga usando comandos MQTT, como se muestra en el código siguiente.
para (int i = 0; i <longitud; i ++) {mensaje = mensaje + (char) payload; } Serial.print (mensaje); if (mensaje == "encendido") {digitalWrite (LED, HIGH); }
Finalmente, publicar la información sobre el tema. Se utiliza la función client.publish () . En este proyecto, se verifica el estado de un botón, si se presiona el botón, se publica un mensaje en un tema “ esp / test1 ” como se muestra a continuación.
if (digitalRead (D1) == 0)) {client.publish ("esp / test1", "Hola desde ESP8266"); } más; client.loop ();
Probando MQTT con ESP8266 usando Arduino
Para nuestra prueba final, usaremos la aplicación de Android, que hemos configurado anteriormente.
Abra la aplicación cliente MQTT y asegúrese de que su móvil tenga una conexión a Internet activa. Además, el punto de acceso al que está conectado NodeMCU debe tener una conexión a Internet activa. Una vez que todo esté conectado a Internet, vamos a enviar una cadena “Hola desde ESP8266” desde el módulo ESP, que se reflejará dentro de la aplicación de Android, y recibiremos una notificación. A continuación, enviaremos una cadena desde la aplicación de Android, que encenderá un LED que está conectado a la placa MCU del nodo ESP8266.
Paso 1: (suscribirse al tema):
Haga clic en la opción MQTT guardada en la aplicación, que hemos configurado anteriormente. Aparecerá una pantalla, donde se le pedirá que "Suscribirse a un tema". Previamente hemos configurado el tema como “ esp / test1 ”. Entonces, en la aplicación de Android, escribiremos “ esp / test1 ”. Haga clic en Suscribirse, al hacerlo se le presentará una pantalla como la siguiente, donde se escribirá como "No se recibió ningún mensaje" del tema en particular.
Ahora, haga clic en el botón 'Conectado' que está conectado al nodeMCU. Ahora, según nuestro código, se publicará un mensaje " Hola desde ESP8266 " en el tema y habrá una notificación en la pantalla con el mensaje recibido como se muestra a continuación.
Paso 2: publicar en el tema:
Ahora para publicar en el tema, haga clic en el botón FLECHA ARRIBA de la aplicación y se abrirá una pantalla como se muestra a continuación.
Ahora, en el campo Tema, escriba “ esp / test ” y en el campo de mensaje, escriba “ on ” o “ off ” para encender y apagar el LED respectivamente. Por ejemplo, si se publica "on" en el tema, entonces el LED se encenderá y si se publica "off" en el tema, entonces el LED se apagará.
Espero que les haya gustado el artículo y hayan aprendido algo nuevo. Si tiene alguna pregunta con respecto a este artículo, no dude en comentar a continuación o puede utilizar nuestro foro.