Uso de ESP-01 con MQTT: Cómo conectar y controlar dispositivos IoT

Uso de ESP-01 con MQTT: Cómo conectar y controlar dispositivos IoT

Tener un presupuesto limitado no significa necesariamente que no pueda asumir proyectos avanzados de bricolaje. Si está buscando un módulo WiFi pequeño, asequible y conveniente para escalar sus proyectos de IoT, el módulo ESP-01 es una excelente opción. Sin embargo, integrar un módulo de este tipo con un protocolo liviano como MQTT puede ser complicado, especialmente si es nuevo en el desarrollo de IoT.

Programar solo la placa ESP-01 puede ser un desafío en comparación con otros módulos de la serie ESP8266. Pero repasemos los conceptos básicos de toda la configuración de hardware y software que necesita para comenzar a usar el módulo, así como también cómo configurar MQTT de una manera simple y procedimental.

Conociendo la Junta

ESP8266 ESP-01 es un módulo WiFi pequeño y compacto que viene con un chip ESP8266EX, que es un SoC altamente integrado diseñado para aplicaciones IoT.

Uso de ESP-01 con MQTT: Cómo conectar y controlar dispositivos IoT

El módulo incluye un microcontrolador inalámbrico de un solo chip con una pila de protocolos TCP/IP y es capaz de conectarse a una red inalámbrica o actuar como un punto de acceso. El módulo ESP-01 también cuenta con un encabezado de 2x4 pines que brinda acceso a sus pines GPIO, alimentación y tierra, y la interfaz UART.

Configuración del hardware

El módulo no es compatible con la placa de prueba en absoluto. Para mayor comodidad, puede comprar una placa de extensión preconstruida o simplemente seguir el método antiguo: usar cables de puente y una placa de prueba.

Hay un programador dedicado, la placa del módulo serie ESP8266, que puede facilitar su experiencia de programación. Si prefiere seguir esta ruta, DIYHOBI tiene un práctico tutorial sobre cómo actualizar un programa en el módulo ESP-01 usando un programador (incluido el adaptador del módulo convertidor USB a TTL CH340G).

Pero aún puede programar el módulo usando una placa Arduino. Mire el diagrama del circuito a continuación como referencia.

Uso de ESP-01 con MQTT: Cómo conectar y controlar dispositivos IoT

Si bien puede parecer tentador, generalmente no recomendamos conectar el módulo directamente al pin de 3.3v de Arduino, ya que requiere más corriente que la que proporciona el pin. En su lugar, conecte el Arduino 5V a un regulador de voltaje de 3.3V como LM1117/LD117, luego encienda el módulo WiFi desde el regulador.

No conecte los pines VCC y CH_PD del ESP al pin de 5V del Arduino. Conectar el módulo a una fuente de alimentación de 5 V puede dañarlo.

Todos los capacitores son de 10uF y la resistencia es de 1K .

Requisitos de Software

El módulo ESP-01 se usa comúnmente con la plataforma Arduino. Como tal, configurar el software es bastante simple, especialmente si está familiarizado con Arduino C. Sin embargo, si está más familiarizado con Raspberry, hay muchos proyectos de Raspberry Pi IoT que puede probar.

Estos son los requisitos básicos:

  • Un agente o servidor MQTT (como Mosquitto o CloudMQTT).
  • Un IDE de Arduino con la biblioteca central ESP8266.
  • La biblioteca PubSubClient para Arduino.

Debe recordar que tener su propio servidor MQTT localmente le brinda flexibilidad dentro de sus proyectos.

Instalación de las bibliotecas necesarias

Primero, descargue e instale el IDE de Arduino en su computadora. Una vez instalado, abra el IDE de Arduino y vaya a Archivo > Preferencias .

Uso de ESP-01 con MQTT: Cómo conectar y controlar dispositivos IoT

En el campo URL del administrador de tableros adicionales , ingrese la siguiente URL:

http://arduino.esp8266.com/stable/package_esp8266com_index.json

Haga clic en Aceptar para cerrar la ventana de Preferencias.

Uso de ESP-01 con MQTT: Cómo conectar y controlar dispositivos IoT

A continuación, vaya a Herramientas > Tablero > Administrador de tableros .

Luego busque esp8266 e instale el paquete de la placa esp8266; esto incluye todas las bibliotecas necesarias para el módulo ESP-01.

Uso de ESP-01 con MQTT: Cómo conectar y controlar dispositivos IoT

Para instalar la biblioteca PubSubClient, vaya a Sketch > Incluir biblioteca > Administrar bibliotecas .

Uso de ESP-01 con MQTT: Cómo conectar y controlar dispositivos IoT

Busque PubSubClient y haga clic en la biblioteca para instalarlo.

Uso de ESP-01 con MQTT: Cómo conectar y controlar dispositivos IoT

Una vez que tenga todas las bibliotecas necesarias instaladas, puede comenzar a programar el módulo ESP-01. Sin embargo, una cosa a tener en cuenta es que puede usar Wifi.h que se incluye en la biblioteca, o descargar la biblioteca ESPWifi.h e incluirla en su boceto.

Establecimiento de una conexión entre ESP-01 y MQTT Broker

Un broker MQTT es un servidor que actúa como intermediario entre los clientes MQTT. Permite a los clientes enviar y recibir mensajes entre sí a través de un modelo de publicación-suscripción.

Para conectar su módulo ESP-01 a un corredor MQTT, deberá especificar la dirección IP y el número de puerto del corredor en su código. También deberá proporcionar una ID de cliente única que identifique su módulo ESP-01 al corredor.

Primero, incluya las bibliotecas necesarias en la parte superior de su boceto

#include ESP8266WiFi.h> #include PubSubClient.h>

A continuación, defina los detalles de la conexión WiFi y MQTT.

const char* ssid = "YOUR_SSID"; const char* password = "YOUR_PASSWORD"; const char* mqtt_server = "YOUR_MQTT_SERVER";

No olvide reemplazar los marcadores de posición con sus propios detalles de conexión WiFi y MQTT.

Después de eso, crea un cliente WiFi y conéctate a tu red WiFi local:

WiFiClient espClient; void setup_wifi() {   delay(10);   WiFi.begin(ssid, password);   while (WiFi.status() != WL_CONNECTED) {     delay(500);   } }

Esta función debe llamarse en la función setup() de su boceto.

A continuación, deberá crear un cliente MQTT y conectarse a su corredor MQTT:

PubSubClient client(espClient); void reconnect() {   while (!client.connected()) {     if (client.connect("ESP01", mqtt_user, mqtt_password)) {       // Subscribe to a topic       client.subscribe("test/topic");     } else {       delay(5000);     }   } }

Una vez que se haya conectado a su corredor MQTT, puede comenzar a publicar y suscribirse a temas.

Publicación de datos de ESP-01 a MQTT Broker

Ahora que ha conectado con éxito su módulo ESP01 al corredor MQTT, veamos cómo puede publicar datos desde el ESP-01 al corredor.

Para publicar datos, utilice la función client.publish() para publicar un mensaje en el tema de inTopic .

client.publish("inTopic", "Hello from ESP-01");

Esto publicará el mensaje "Hola desde ESP-01" en el tema de inTopic .

También puede publicar datos de sensores del ESP-01 en el intermediario. Por ejemplo, si tiene un sensor de temperatura conectado a su ESP-01, puede publicar los datos de temperatura en el corredor como se muestra a continuación.

float temperature = 25.5; String temperatureString = String(temperature); char temperatureChar[5]; temperatureString.toCharArray(temperatureChar, 5); client.publish("Temp", temperatureChar);

Esto publicará los datos de temperatura en el tema Temp .

Los datos se pueden publicar en un bucle o en intervalos regulares, según los requisitos de su proyecto. Asegúrese de no inundar al corredor con demasiados datos y de publicar en un intervalo razonable.

Suscripción a temas de MQTT y recepción de datos en ESP-01

Para suscribirse a un tema, utilice la función client.subscribe() . Para nuestro caso a continuación, el cliente se suscribe al tema outTopic .

client.subscribe("outTopic");

Una vez que se haya suscrito a un tema, puede recibir mensajes publicados en ese tema usando la función client.loop() en la función loop() en el boceto a continuación:

void loop() {   if (!client.connected()) {     reconnect();   }   client.loop(); }

Esto verificará continuamente si hay nuevos mensajes y ejecutará la función de devolución de llamada cuando se haya recibido un nuevo mensaje.

Para manejar los mensajes recibidos, defina una función de devolución de llamada como la que se muestra a continuación:

void callback(char* topic, byte* payload, unsigned int length) {   // Print the received message   Serial.print("Message received on topic: ");   Serial.print(topic);   Serial.print(". Message: ");   for (int i=0;i     Serial.print((char)payload[i]);   }   Serial.println(); }

Esta función se llamará cuando se reciba un nuevo mensaje sobre el tema suscrito. Imprimirá el mensaje recibido al Serial Monitor.

Uso de niveles de QoS (calidad de servicio) y funciones de seguridad

Una de las técnicas más importantes utilizadas en el manejo de solicitudes es el uso de niveles de QoS (Calidad de servicio) para sus mensajes MQTT. Los niveles de QoS definen cómo el corredor y los suscriptores deben manejar sus mensajes. Hay tres niveles de QoS: 0, 1 y 2.

El nivel 0 de QoS es el menos confiable, ya que los mensajes se envían solo una vez y no se garantiza que se entreguen al suscriptor. El nivel 1 de QoS es más confiable, ya que los mensajes se envían al menos una vez y se garantiza que se entregarán al suscriptor al menos una vez. El nivel 2 de QoS es el más confiable, ya que los mensajes se envían exactamente una vez y se garantiza que se entregarán al suscriptor exactamente una vez. La forma en que se comunican sus dispositivos se alinea con otros problemas comunes de seguridad de Internet de las cosas (IoT) y soluciones que desea mantener al tanto.

Para usar los niveles de QoS, puede especificar el nivel deseado al publicar mensajes usando la función client.publish() :

client.publish("topic", "Hello, world!", 1);

Esto publicará el mensaje Hello, world! al tema tema con QoS nivel 1 .

Otra técnica avanzada es el uso de mensajes de última voluntad y testamento (LWT) . Los mensajes LWT son mensajes que envía el intermediario cuando un cliente se desconecta inesperadamente. Creemos que esto es importante para detectar dispositivos fuera de línea o para activar acciones cuando un dispositivo se desconecta.

Para usar mensajes LWT, puede especificar el mensaje LWT cuando se conecta al corredor usando la función client.setWill() :

client.setWill("status", "offline", 1, true);

Esto configurará el mensaje LWT como fuera de línea en el tema de estado con el nivel 1 de QoS y el indicador de retención establecido en verdadero .

Prepárese para su próximo proyecto de IoT

El módulo ESP-01 es una solución asequible y compacta para proyectos de IoT, y usarlo con MQTT puede llevar su proyecto al siguiente nivel. Aunque la configuración inicial puede ser desalentadora, los beneficios de MQTT, como la comunicación ligera y la alta escalabilidad, hacen que valga la pena la inversión.