Arduino Nano ESP32 - MQTT

En esta guía, profundizaremos en el uso del Arduino Nano ESP32 para enviar y recibir datos hacia/desde un broker MQTT a través del protocolo MQTT. Específicamente, cubriremos:

Arduino Nano ESP32 MQTT

Examinaremos dos escenarios distintos:

Hardware Requerido

1×Arduino Nano ESP32
1×Cable USB Tipo-A a Tipo-C (para PC USB-A)
1×Cable USB Tipo-C a Tipo-C (para PC USB-C)
1×Protoboard
1×Cables Puente
1×(Recomendado) Placa de Expansión de Terminales de Tornillo para Arduino Nano
1×(Recomendado) Placa de Expansión Breakout para Arduino Nano
1×(Recomendado) Divisor de Alimentación para Arduino Nano ESP32

Or you can buy the following kits:

1×DIYables Sensor Kit (30 sensors/displays)
1×DIYables Sensor Kit (18 sensors/displays)
Divulgación: Algunos de los enlaces proporcionados en esta sección son enlaces de afiliado de Amazon. Podemos recibir una comisión por las compras realizadas a través de estos enlaces sin costo adicional para usted. Apreciamos su apoyo.

Acerca de Arduino Nano ESP32 y MQTT

Si ya estás familiarizado con el protocolo MQTT, ¡genial! Si no, puedes buscarlo en línea. Este tutorial se centra en usar Arduino Nano ESP32 para enviar y recibir datos mediante MQTT.

A continuación se presentan diferentes formas en que Arduino Nano ESP32 puede utilizarse con MQTT:

  • Puedes conectar Arduino Nano ESP32 a un broker MQTT en línea como Mosquitto o AWS IoT.
  • Puedes conectar Arduino Nano ESP32 a un broker MQTT instalado en tu computadora, como Mosquitto o HiveMQ.
  • Puedes conectar Arduino Nano ESP32 a un broker MQTT que se ejecuta en tu Raspberry Pi, por ejemplo, Mosquitto.
  • También puedes conectar Arduino Nano ESP32 a un broker MQTT basado en la nube, como Mosquitto o HiveMQ en AWS EC2.

En este tutorial, comenzaremos comprobando si Arduino Nano ESP32 puede conectarse a un broker Mosquitto en línea. Haremos que Arduino Nano ESP32 intercambie datos a través de este broker por Internet.

Después de eso, configuraremos el broker Mosquitto en nuestra computadora. Luego, conectaremos Arduino Nano ESP32 a este broker local y continuaremos enviando y recibiendo datos.

Una vez que hayas completado este tutorial, puedes profundizar más consultando estos tutoriales adicionales:

Estos tutoriales proporcionarán más información sobre temas relacionados.

Conectar Arduino Nano ESP32 a un broker MQTT en línea

En esta parte, aprenderemos cómo conectar Arduino Nano ESP32 a test.mosquitto.org, un broker MQTT en línea creado por Mosquitto. Tenga en cuenta que este broker debe usarse solo con fines de prueba.

Código de Arduino Nano ESP32

El código Arduino Nano ESP32 que se muestra abajo hace:

  • Conectar al broker MQTT
  • Suscribirse a un tema
  • Publicar periódicamente mensajes en el mismo tema al que se suscribe
/* * Este código de Arduino Nano ESP32 fue desarrollado por es.newbiely.com * Este código de Arduino Nano ESP32 se proporciona al público sin ninguna restricción. * Para tutoriales completos y diagramas de cableado, visite: * https://es.newbiely.com/tutorials/arduino-nano-esp32/arduino-nano-esp32-mqtt */ #include <WiFi.h> #include <MQTTClient.h> #include <ArduinoJson.h> const char WIFI_SSID[] = "YOUR_WIFI_SSID"; // CHANGE TO YOUR WIFI SSID const char WIFI_PASSWORD[] = "YOUR_WIFI_PASSWORD"; // CHANGE TO YOUR WIFI PASSWORD const char MQTT_BROKER_ADRRESS[] = "test.mosquitto.org"; // CHANGE TO MQTT BROKER'S ADDRESS const int MQTT_PORT = 1883; const char MQTT_CLIENT_ID[] = "YOUR-NAME-esp32-001"; // CHANGE IT AS YOU DESIRE const char MQTT_USERNAME[] = ""; // CHANGE IT IF REQUIRED, empty if not required const char MQTT_PASSWORD[] = ""; // CHANGE IT IF REQUIRED, empty if not required // The MQTT topics that ESP32 should publish/subscribe const char PUBLISH_TOPIC[] = "YOUR-NAME-esp32-001/loopback"; // CHANGE IT AS YOU DESIRE const char SUBSCRIBE_TOPIC[] = "YOUR-NAME-esp32-001/loopback"; // CHANGE IT AS YOU DESIRE const int PUBLISH_INTERVAL = 5000; // 5 seconds WiFiClient network; MQTTClient mqtt = MQTTClient(256); unsigned long lastPublishTime = 0; void setup() { Serial.begin(9600); // set the ADC attenuation to 11 dB (up to ~3.3V input) analogSetAttenuation(ADC_11db); WiFi.mode(WIFI_STA); WiFi.begin(WIFI_SSID, WIFI_PASSWORD); Serial.println("Arduino Nano ESP32 - Connecting to Wi-Fi"); while (WiFi.status() != WL_CONNECTED) { delay(500); Serial.print("."); } Serial.println(); connectToMQTT(); } void loop() { mqtt.loop(); if (millis() - lastPublishTime > PUBLISH_INTERVAL) { sendToMQTT(); lastPublishTime = millis(); } } void connectToMQTT() { // Connect to the MQTT broker mqtt.begin(MQTT_BROKER_ADRRESS, MQTT_PORT, network); // Create a handler for incoming messages mqtt.onMessage(messageHandler); Serial.print("Arduino Nano ESP32 - Connecting to MQTT broker"); while (!mqtt.connect(MQTT_CLIENT_ID, MQTT_USERNAME, MQTT_PASSWORD)) { Serial.print("."); delay(100); } Serial.println(); if (!mqtt.connected()) { Serial.println("Arduino Nano ESP32 - MQTT broker Timeout!"); return; } // Subscribe to a topic, the incoming messages are processed by messageHandler() function if (mqtt.subscribe(SUBSCRIBE_TOPIC)) Serial.print("Arduino Nano ESP32 - Subscribed to the topic: "); else Serial.print("Arduino Nano ESP32 - Failed to subscribe to the topic: "); Serial.println(SUBSCRIBE_TOPIC); Serial.println("Arduino Nano ESP32 - MQTT broker Connected!"); } void sendToMQTT() { StaticJsonDocument<200> message; message["timestamp"] = millis(); message["data"] = analogRead(0); // Or you can read data from other sensors char messageBuffer[512]; serializeJson(message, messageBuffer); mqtt.publish(PUBLISH_TOPIC, messageBuffer); Serial.println("Arduino Nano ESP32 - sent to MQTT:"); Serial.print("- topic: "); Serial.println(PUBLISH_TOPIC); Serial.print("- payload:"); Serial.println(messageBuffer); } void messageHandler(String &topic, String &payload) { Serial.println("Arduino Nano ESP32 - received from MQTT:"); Serial.println("- topic: " + topic); Serial.println("- payload:"); Serial.println(payload); }

Pasos R\u00e1pidos

Para empezar con Arduino Nano ESP32, siga estos pasos:

  • Si eres nuevo en Arduino Nano ESP32, consulta el tutorial sobre cómo configurar el entorno para Arduino Nano ESP32 en el IDE de Arduino.
  • Conecte los componentes de acuerdo con el diagrama proporcionado.
  • Conecte la placa Arduino Nano ESP32 a su ordenador usando un cable USB.
  • Inicie el IDE de Arduino en su ordenador.
  • Seleccione la placa Arduino Nano ESP32 y su puerto COM correspondiente.
  • Abra el IDE de Arduino en su PC.
  • Abra el icono Administrador de Bibliotecas en la barra de navegación izquierda del IDE de Arduino.
  • Escriba MQTT en la caja de búsqueda, luego busque la biblioteca MQTT de Joel Gaehwiler.
  • Haga clic en el botón Instalar para instalar la biblioteca MQTT.
Biblioteca MQTT para Arduino Nano ESP32
  • Escribe Arduino Nano ESP32Json en la caja de búsqueda, luego busca la biblioteca Arduino Nano ESP32Json de Benoit Blanchon.
  • Haz clic en el botón Instalar para instalar la biblioteca Arduino Nano ESP32Json.
Biblioteca JSON para Arduino Nano ESP32
  • Copia el código anterior y ábrelo con el IDE de Arduino
  • Reemplaza la información de WiFi (SSID y contraseña) en el código por la tuya.
  • En el código, verás la palabra 'YOUR-NAME' tres veces. Reemplaza esa palabra por tu nombre o por caracteres aleatorios (solo caracteres alfabéticos, sin espacios). Esto es necesario porque si no haces el cambio, puede haber varias personas ejecutando este código al mismo tiempo, lo que podría provocar conflictos porque los IDs de cliente MQTT y los temas son los mismos para todos.
  • Haz clic en el botón Subir en el IDE de Arduino para subir el código al Arduino Nano ESP32
  • Abre el Monitor Serial
  • Observa el resultado en el Monitor Serial.
COM6
Send
Arduino Nano ESP32 - Connecting to MQTT broker Arduino Nano ESP32 - Subscribed to the topic: YOUR-NAME-esp32-001/loopback Arduino Nano ESP32 - MQTT broker Connected! Arduino Nano ESP32 - sent to MQTT: - topic: YOUR-NAME-esp32-001/loopback - payload:{"timestamp":11757,"data":255} Arduino Nano ESP32 - received from MQTT: - topic: YOUR-NAME-esp32-001/loopback - payload: {"timestamp":11757,"data":255} Arduino Nano ESP32 - sent to MQTT: - topic: YOUR-NAME-esp32-001/loopback - payload:{"timestamp":16896,"data":259} Arduino Nano ESP32 - received from MQTT: - topic: YOUR-NAME-esp32-001/loopback - payload: {"timestamp":16896,"data":259}
Autoscroll Show timestamp
Clear output
9600 baud  
Newline  

Como puedes ver, Arduino Nano ESP32 publica mensajes en el broker MQTT y luego recibe de vuelta el mismo mensaje. Eso se debe a que el código anterior se suscribe al mismo tema al que publica los datos. Si no quieres que Arduino Nano ESP32 reciba el mensaje que publica, simplemente haz que el tema de suscripción sea diferente del tema de publicación.

Conecta Arduino Nano ESP32 al broker MQTT instalado en tu PC

Instalación del broker MQTT de Mosquitto

  • Instálalo en la unidad D: en lugar de la unidad C:. Evita instalar el broker Mosquitto en la unidad C: para evitar posibles problemas.

Ejecutar el broker MQTT de Mosquitto

Ahora, vamos a comprobar si el broker MQTT funciona correctamente siguiendo estos pasos:

  • Ve al directorio donde se instaló Mosquitto. Por ejemplo: D:\mosquitto>
  • Crea un nuevo archivo llamado test.conf, copia el contenido que se muestra a continuación y guárdalo en ese directorio:
listener 1883 allow_anonymous true
  • Ejecuta un símbolo del sistema como administrador en tu PC. Llamémosla Ventana del Bróker. No lo cierres hasta el final del tutorial.
Administrador del símbolo del sistema de Windows
  • Ejecute los comandos a continuación uno por uno:
cd /d D:\mosquitto mosquitto -v -c test.conf
  • Verás:
Command Prompt
Microsoft Windows [Version 10.0.19045.3930] (c) Microsoft Corporation. All rights reserved. C:\WINDOWS\system32>cd /d D:\mosquitto D:\mosquitto>mosquitto -v -c test.conf 1710918939: mosquitto version 2.0.18 starting 1710918939: Config loaded from test.conf. 1710918939: Opening ipv6 listen socket on port 1883. 1710918939: Opening ipv4 listen socket on port 1883. 1710918939: mosquitto version 2.0.18 running
  • Abre otro Símbolo del sistema como administrador en tu PC.
  • Encuentra la dirección IP de tu PC ejecutando el siguiente comando:
ipconfig
Command Prompt
C:\WINDOWS\system32>ipconfig Windows IP Configuration Ethernet adapter: Subnet Mask . . . . . . . . . . . : 255.0.0.0 IPv4 Address. . . . . . . . . . . : 192.168.0.5 Subnet Mask . . . . . . . . . . . : 255.255.255.0 Default Gateway . . . . . . . . . :
  • Escriba la dirección IP para uso posterior. En el ejemplo anterior: 192.168.0.5

Prueba si funciona el broker de Mosquitto

  • Abre otro símbolo del sistema como administrador en tu PC. Llamémoslo Ventana del Suscriptor
  • Suscríbete a un tema ejecutando los comandos que se indican a continuación, uno por uno (reemplázalo por tu dirección IP):
cd /d D:\mosquitto mosquitto_sub -h 192.168.0.5 -p 1883 -t esp32-001/send
  • Abre otro símbolo del sistema como administrador en tu PC. Llamémoslo Ventana del Publicador
  • Publica un mensaje en el mismo tema ejecutando los siguientes comandos uno por uno (reemplázala por tu dirección IP):
cd /d D:\mosquitto mosquitto_pub -h 192.168.0.5 -p 1883 -t esp32-001/send -m "Hello, MQTT!"
  • Verás:
Command Prompt
Microsoft Windows [Version 10.0.19045.3930] (c) Microsoft Corporation. All rights reserved. C:\WINDOWS\system32>cd /d D:\mosquitto D:\mosquitto>mosquitto_pub -h 192.168.0.5 -p 1883 -t esp32-001/send -m "Hello, MQTT!" D:\mosquitto>

Verá que el mensaje se reenvía a la Ventana del Suscriptor de la siguiente manera:

Command Prompt
Microsoft Windows [Version 10.0.19045.3930] (c) Microsoft Corporation. All rights reserved. C:\WINDOWS\system32>cd /d D:\mosquitto D:\mosquitto>mosquitto_sub -h 192.168.0.5 -p 1883 -t esp32-001/send Hello, MQTT!

Ahora, has instalado con éxito el broker Mosquitto MQTT en tu PC. Por favor, NO cierres las tres ventanas: Ventana del Broker, Ventana del Suscriptor y Ventana del Publicador. Las utilizaremos a continuación.

Código de Arduino Nano ESP32

El código de Arduino Nano ESP32 que se muestra a continuación hace:

  • Conectar al broker MQTT
  • Suscribirse a un tema
  • Publicar periódicamente mensajes en otro tema
/* * Este código de Arduino Nano ESP32 fue desarrollado por es.newbiely.com * Este código de Arduino Nano ESP32 se proporciona al público sin ninguna restricción. * Para tutoriales completos y diagramas de cableado, visite: * https://es.newbiely.com/tutorials/arduino-nano-esp32/arduino-nano-esp32-mqtt */ #include <WiFi.h> #include <MQTTClient.h> #include <ArduinoJson.h> #define CLIENT_ID "ESP32-001" // CHANGE IT AS YOU DESIRE const char WIFI_SSID[] = "YOUR_WIFI_SSID"; // CHANGE TO YOUR WIFI SSID const char WIFI_PASSWORD[] = "YOUR_WIFI_PASSWORD"; // CHANGE TO YOUR WIFI PASSWORD const char MQTT_BROKER_ADRRESS[] = "192.168.0.5"; // CHANGE TO MQTT BROKER'S IP ADDRESS const int MQTT_PORT = 1883; const char MQTT_USERNAME[] = ""; // CHANGE IT IF REQUIRED const char MQTT_PASSWORD[] = ""; // CHANGE IT IF REQUIRED // The MQTT topics that this device should publish/subscribe #define PUBLISH_TOPIC "esp32-001/send" #define SUBSCRIBE_TOPIC "esp32-001/receive" #define PUBLISH_INTERVAL 5000 // 4 seconds WiFiClient network; MQTTClient mqtt = MQTTClient(256); unsigned long lastPublishTime = 0; void setup() { Serial.begin(9600); // set the ADC attenuation to 11 dB (up to ~3.3V input) analogSetAttenuation(ADC_11db); WiFi.mode(WIFI_STA); WiFi.begin(WIFI_SSID, WIFI_PASSWORD); Serial.println("Arduino Nano ESP32 - Connecting to Wi-Fi"); while (WiFi.status() != WL_CONNECTED) { delay(500); Serial.print("."); } Serial.println(); connectToMQTT(); } void loop() { mqtt.loop(); if (millis() - lastPublishTime > PUBLISH_INTERVAL) { sendToMQTT(); lastPublishTime = millis(); } } void connectToMQTT() { // Connect to the MQTT broker mqtt.begin(MQTT_BROKER_ADRRESS, MQTT_PORT, network); // Create a handler for incoming messages mqtt.onMessage(messageHandler); Serial.print("Arduino Nano ESP32 - Connecting to MQTT broker"); while (!mqtt.connect(CLIENT_ID, MQTT_USERNAME, MQTT_PASSWORD)) { Serial.print("."); delay(100); } Serial.println(); if (!mqtt.connected()) { Serial.println("Arduino Nano ESP32 - MQTT broker Timeout!"); return; } // Subscribe to a topic, the incoming messages are processed by messageHandler() function if (mqtt.subscribe(SUBSCRIBE_TOPIC)) Serial.print("Arduino Nano ESP32 - Subscribed to the topic: "); else Serial.print("Arduino Nano ESP32 - Failed to subscribe to the topic: "); Serial.println(SUBSCRIBE_TOPIC); Serial.println("Arduino Nano ESP32 - MQTT broker Connected!"); } void sendToMQTT() { StaticJsonDocument<200> message; message["timestamp"] = millis(); message["data"] = analogRead(0); // Or you can read data from other sensors char messageBuffer[512]; serializeJson(message, messageBuffer); mqtt.publish(PUBLISH_TOPIC, messageBuffer); Serial.println("Arduino Nano ESP32 - sent to MQTT:"); Serial.print("- topic: "); Serial.println(PUBLISH_TOPIC); Serial.print("- payload:"); Serial.println(messageBuffer); } void messageHandler(String &topic, String &payload) { Serial.println("Arduino Nano ESP32 - received from MQTT:"); Serial.println("- topic: " + topic); Serial.println("- payload:"); Serial.println(payload); // You can process the incoming data as json object, then control something /* StaticJsonDocument<200> doc; deserializeJson(doc, payload); const char* message = doc["message"]; */ }

Pasos R\u00e1pidos

Para empezar con Arduino Nano ESP32, sigue estos pasos:

  • Si es nuevo en Arduino Nano ESP32, consulte el tutorial sobre cómo configurar el entorno para Arduino Nano ESP32 en el IDE de Arduino.
  • Conecte los componentes de acuerdo con el diagrama proporcionado.
  • Conecte la placa Arduino Nano ESP32 a su ordenador usando un cable USB.
  • Inicie el IDE de Arduino en su ordenador.
  • Seleccione la placa Arduino Nano ESP32 y su puerto COM correspondiente.
  • Copie el código anterior y ábralo con el IDE de Arduino.
  • Reemplace la información de WiFi (SSID y contraseña) en el código por la suya.
  • Reemplace la dirección del broker MQTT en el código (nombre de dominio o dirección IP).
  • Haga clic en el botón Subir en el IDE de Arduino para subir el código al Arduino Nano ESP32

Enviar mensaje desde Arduino Nano ESP32 a la PC vía MQTT

Los códigos de Arduino Nano ESP32 publican datos en el tema MQTT esp32-001/send, Ventana del Suscriptor en la PC se suscribe a ese tema para recibir los datos.

  • Abre el Monitor Serial; verás que Arduino Nano ESP32 publica periódicamente un mensaje en un tema.
COM6
Send
Arduino Nano ESP32 - Connecting to MQTT broker Arduino Nano ESP32 - Subscribed to the topic: esp32-001/receive Arduino Nano ESP32 - MQTT broker Connected! Arduino Nano ESP32 - sent to MQTT: - topic: esp32-001/send - payload:{"timestamp":10708,"data":311} Arduino Nano ESP32 - sent to MQTT: - topic: esp32-001/send - payload:{"timestamp":15837,"data":298} Arduino Nano ESP32 - sent to MQTT: - topic: esp32-001/send - payload:{"timestamp":20965,"data":291} Arduino Nano ESP32 - sent to MQTT: - topic: esp32-001/send - payload:{"timestamp":26094,"data":286}
Autoscroll Show timestamp
Clear output
9600 baud  
Newline  
  • Verifique la Ventana del Suscriptor, verá que recibe el mensaje publicado por Arduino Nano ESP32 como se muestra a continuación:
Command Prompt
Microsoft Windows [Version 10.0.19045.3930] (c) Microsoft Corporation. All rights reserved. C:\WINDOWS\system32>cd /d D:\mosquitto D:\mosquitto>mosquitto_sub -h 192.168.0.5 -p 1883 -t esp32-001/send Hello, MQTT! {"timestamp":10708,"data":311} {"timestamp":15837,"data":298} {"timestamp":20965,"data":291} {"timestamp":26094,"data":286}

Enviar mensaje desde la PC al Arduino Nano ESP32 mediante MQTT

Arduino Nano ESP32 se suscribe al tema esp32-001/receive; Ventana del Publicador en la PC publica un mensaje en ese tema para enviarlo al Arduino Nano ESP32.

  • Publica un mensaje en el tema al que Arduino Nano ESP32 se suscribió ejecutando el siguiente comando en la Ventana de Publicación:
mosquitto_pub -h 192.168.0.5 -p 1883 -t esp32-001/receive -m "Hello, Arduino Nano ESP32!"
  • Verás que este mensaje es recibido por Arduino Nano ESP32 en el Monitor Serial como se muestra a continuación:
COM6
Send
Arduino Nano ESP32 - received from MQTT: - topic: esp32-001/receive - payload: Hello, Arduino Nano ESP32!
Autoscroll Show timestamp
Clear output
9600 baud  
Newline  

Video Tutorial

Estamos considerando crear tutoriales en video. Si considera que los tutoriales en video son importantes, suscríbase a nuestro canal de YouTube para motivarnos a crear los videos.

※ NUESTROS MENSAJES

  • No dude en compartir el enlace de este tutorial. Sin embargo, por favor no use nuestro contenido en otros sitios web. Hemos invertido mucho esfuerzo y tiempo en crear el contenido, ¡por favor respete nuestro trabajo!