Arduino UNO R4 - MQTT

En este tutorial, aprenderemos a usar el Arduino UNO R4 para enviar y recibir datos a un broker MQTT utilizando el protocolo MQTT. Abordaremos los siguientes detalles:

Arduino UNO R4 MQTT

Analizaremos dos ejemplos diferentes:

Acerca de Arduino UNO R4 y MQTT

Aprenderemos a programar un Arduino UNO R4 para enviar y recibir datos a través de un broker MQTT (también llamado servidor MQTT). El broker MQTT puede ser:

  • Broker MQTT en Internet, como Mosquitto o AWS IoT.
  • Broker MQTT configurado en tu ordenador, como Mosquitto o HiveMQ.
  • Broker MQTT ejecutándose en tu Raspberry Pi, por ejemplo, Mosquitto.
  • Broker MQTT en la nube, como Mosquitto o HiveMQ en AWS EC2.

En esta guía, comenzaremos verificando si Arduino UNO R4 puede conectarse a un broker Mosquitto en línea. Arduino UNO R4 enviará y recibirá mensajes hacia y desde este broker a través de internet.

A continuación, instalaremos el broker Mosquitto en nuestra computadora. Después de eso, conectaremos el Arduino UNO R4 al broker MQTT en nuestra computadora. Lo usaremos para enviar y recibir datos a través de este broker local.

Conectar Arduino UNO R4 a un broker MQTT en línea

En esta sección, entenderemos cómo conectar Arduino UNO R4 con test.mosquitto.org, un servicio MQTT en línea proporcionado por Mosquitto. Recuerda que este servicio está destinado únicamente para pruebas.

Código de Arduino UNO R4

Este código de Arduino UNO R4 realiza las siguientes tareas:

  • Conéctese al broker MQTT
  • Suscríbase a un tema
  • Envíe mensajes regularmente al mismo tema al que se suscribió
/* * Este código de Arduino UNO R4 fue desarrollado por es.newbiely.com * Este código de Arduino UNO R4 se proporciona al público sin ninguna restricción. * Para tutoriales completos y diagramas de cableado, visite: * https://es.newbiely.com/tutorials/arduino-uno-r4/arduino-uno-r4-mqtt */ #include <WiFiS3.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-arduino-uno-r4"; // 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 Arduino should publish/subscribe const char PUBLISH_TOPIC[] = "YOUR-NAME-arduino-uno-r4/loopback"; // CHANGE IT AS YOU DESIRE const char SUBSCRIBE_TOPIC[] = "YOUR-NAME-arduino-uno-r4/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); int status = WL_IDLE_STATUS; while (status != WL_CONNECTED) { Serial.print("Arduino UNO R4 - Attempting to connect to SSID: "); Serial.println(WIFI_SSID); // Connect to WPA/WPA2 network. Change this line if using open or WEP network: status = WiFi.begin(WIFI_SSID, WIFI_PASSWORD); // wait 5 seconds for connection: delay(5000); } // print your board's IP address: Serial.print("IP Address: "); Serial.println(WiFi.localIP()); 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 UNO R4 - 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 UNO R4 - MQTT broker Timeout!"); return; } // Subscribe to a topic, the incoming messages are processed by messageHandler() function if (mqtt.subscribe(SUBSCRIBE_TOPIC)) Serial.print("Arduino UNO R4 - Subscribed to the topic: "); else Serial.print("Arduino UNO R4 - Failed to subscribe to the topic: "); Serial.println(SUBSCRIBE_TOPIC); Serial.println("Arduino UNO R4 - 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 UNO R4 - 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 UNO R4 - received from MQTT:"); Serial.println("- topic: " + topic); Serial.println("- payload:"); Serial.println(payload); }

Pasos R\u00e1pidos

Sigue estas instrucciones paso a paso:

  • Si es la primera vez que usas Arduino Uno R4 WiFi/Minima, consulta el tutorial sobre configurar el entorno para Arduino Uno R4 WiFi/Minima en el IDE de Arduino.
  • Conecta la placa Arduino Uno R4 a tu computadora usando un cable USB.
  • Inicia el IDE de Arduino en tu computadora.
  • Selecciona la placa adecuada Arduino Uno R4 (p. ej., Arduino Uno R4 WiFi) y el puerto COM.
  • Haz clic en el icono de "Administrador de bibliotecas" que se encuentra en el lado izquierdo del IDE de Arduino para abrirlo.
  • En el cuadro de búsqueda, escribe MQTT y busca la biblioteca MQTT de Joel Gaehwiler.
  • Haz clic en el botón Instalar para añadir la biblioteca MQTT.
Biblioteca MQTT para Arduino UNO R4
  • Busca ArduinoJson en la caja de búsqueda y encuentra la biblioteca ArduinoJson de Benoit Blanchon. Luego, haz clic en el botón Instalar para instalar la biblioteca.
Biblioteca JSON de Arduino UNO R4
  • Copia el código y ábrelo en el IDE de Arduino.
  • Cambia los detalles de WiFi (SSID y contraseña) en el código por los tuyos.
  • Encontrarás 'YOUR-NAME' tres veces en el código. Reemplázalo por tu nombre o por cualquier letra (sin espacios). Este cambio es importante para evitar conflictos entre múltiples usuarios que ejecuten el mismo código.
  • Haz clic en el botón Upload en el IDE de Arduino para cargar el código a tu Arduino UNO R4.
  • Abre el Monitor Serial.
  • Comprueba los resultados en el Monitor Serial.
COM6
Send
IP Address: 192.168.0.2 Arduino UNO R4 - Connecting to MQTT broker Arduino UNO R4 - Subscribed to the topic: YOUR-NAME-arduino-uno-r4/loopback Arduino UNO R4 - MQTT broker Connected! Arduino UNO R4 - sent to MQTT: - topic: YOUR-NAME-arduino-uno-r4/loopback - payload:{"timestamp":11757,"data":255} Arduino UNO R4 - received from MQTT: - topic: YOUR-NAME-arduino-uno-r4/loopback - payload: {"timestamp":11757,"data":255} Arduino UNO R4 - sent to MQTT: - topic: YOUR-NAME-arduino-uno-r4/loopback - payload:{"timestamp":16896,"data":259} Arduino UNO R4 - received from MQTT: - topic: YOUR-NAME-arduino-uno-r4/loopback - payload: {"timestamp":16896,"data":259}
Autoscroll Show timestamp
Clear output
9600 baud  
Newline  

El Arduino UNO R4 envía mensajes al broker MQTT y luego recibe el mismo mensaje. Esto ocurre porque está configurado para recibir mensajes del mismo tema al que los envía. Si no quieres que el Arduino UNO R4 reciba sus propios mensajes, usa diferentes temas para enviar y recibir.

Conecta Arduino UNO R4 al broker MQTT instalado en tu PC

Instalación del broker MQTT de Mosquitto

  • Instálalo en la unidad D:, no en la unidad C:. Esto ayuda a evitar posibles problemas.

Ejecutar el broker MQTT de Mosquitto

Ahora, vamos a ver si el broker MQTT está funcionando correctamente siguiendo estos pasos:

  • Navega a la carpeta donde instalaste Mosquitto, por ejemplo D:\Draft\mosquitto. Crea un archivo llamado test.conf, pega los siguientes detalles en él y guarda el archivo en esta carpeta.
listener 1883 allow_anonymous true
  • Abre un símbolo del sistema como Administrador en tu computadora. Nómbralo como "Broker Window". Recuerda no cerrar esta ventana hasta que termines el tutorial.
Administrador del símbolo del sistema de Windows
  • Ejecute los siguientes comandos de forma secuencial:
cd /d D:\Draft\mosquitto mosquitto -v -c test.conf
  • Notará:
Command Prompt
Microsoft Windows [Version 10.0.19045.3930] (c) Microsoft Corporation. All rights reserved. C:\WINDOWS\system32>cd /d D:\Draft\mosquitto D:\Draft\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
  • Abra un nuevo símbolo del sistema como administrador en su ordenador.
  • Para encontrar la dirección IP de su ordenador, ejecute este comando:
ipconfig
Command Prompt
C:\WINDOWS\system32>ipconfig Windows IP Configuration Ethernet adapter: Subnet Mask . . . . . . . . . . . : 255.0.0.0 IPv4 Address. . . . . . . . . . . : 192.168.0.11 Subnet Mask . . . . . . . . . . . : 255.255.255.0 Default Gateway . . . . . . . . . :
  • Por favor, tome nota de la dirección IP para futuras referencias. En el ejemplo proporcionado: 192.168.0.11.

Probar si funciona el broker Mosquitto

  • Abre otro Símbolo del sistema como Administrador en tu computadora. Nos referiremos a ella como "Ventana del Suscriptor."
  • Para suscribirte a un tema, ingresa los siguientes comandos uno por uno, reemplazando "tu dirección IP" por tu dirección IP real:
cd /d D:\Draft\mosquitto mosquitto_sub -h 192.168.0.11 -p 1883 -t arduino-uno-r4/send
  • Abre una ventana adicional del Símbolo del sistema con privilegios de administrador en tu ordenador. Nómbrala Ventana del Publicador.
  • Para publicar un mensaje en el mismo tema, ejecuta los siguientes comandos uno tras otro (sustitúyela por tu dirección IP):
cd /d D:\Draft\mosquitto mosquitto_pub -h 192.168.0.11 -p 1883 -t arduino-uno-r4/send -m "Hello, MQTT!"
  • Notarás:
Command Prompt
Microsoft Windows [Version 10.0.19045.3930] (c) Microsoft Corporation. All rights reserved. C:\WINDOWS\system32>cd /d D:\Draft\mosquitto D:\Draft\mosquitto>mosquitto_pub -h 192.168.0.11 -p 1883 -t arduino-uno-r4/send -m "Hello, MQTT!" D:\Draft\mosquitto>

El mensaje se envía a la Ventana de Suscripción de esta forma:

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

Has instalado correctamente el broker MQTT de Mosquitto en tu PC. Por favor, no cierres tres ventanas: la Ventana del Broker, la Ventana del Suscriptor y la Ventana del Publicador. Las usaremos a continuación.

Código Arduino UNO R4

El siguiente código es para Arduino UNO R4 y hace lo siguiente:

  • Conéctate al broker MQTT
  • Suscríbete a un tema
  • Envía mensajes regularmente a un tema diferente
/* * Este código de Arduino UNO R4 fue desarrollado por es.newbiely.com * Este código de Arduino UNO R4 se proporciona al público sin ninguna restricción. * Para tutoriales completos y diagramas de cableado, visite: * https://es.newbiely.com/tutorials/arduino-uno-r4/arduino-uno-r4-mqtt */ #include <WiFiS3.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 char MQTT_BROKER_ADRRESS[] = "192.168.0.11"; // CHANGE TO MQTT BROKER'S IP ADDRESS const int MQTT_PORT = 1883; const char MQTT_CLIENT_ID[] = "arduino-uno-r4"; // 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 Arduino should publish/subscribe const char PUBLISH_TOPIC[] = "arduino-uno-r4/send"; // CHANGE IT AS YOU DESIRE const char SUBSCRIBE_TOPIC[] = "arduino-uno-r4/receive"; // 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); int status = WL_IDLE_STATUS; while (status != WL_CONNECTED) { Serial.print("Arduino UNO R4 - Attempting to connect to SSID: "); Serial.println(WIFI_SSID); // Connect to WPA/WPA2 network. Change this line if using open or WEP network: status = WiFi.begin(WIFI_SSID, WIFI_PASSWORD); // wait 10 seconds for connection: delay(10000); } // print your board's IP address: Serial.print("IP Address: "); Serial.println(WiFi.localIP()); 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 UNO R4 - 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 UNO R4 - MQTT broker Timeout!"); return; } // Subscribe to a topic, the incoming messages are processed by messageHandler() function if (mqtt.subscribe(SUBSCRIBE_TOPIC)) Serial.print("Arduino UNO R4 - Subscribed to the topic: "); else Serial.print("Arduino UNO R4 - Failed to subscribe to the topic: "); Serial.println(SUBSCRIBE_TOPIC); Serial.println("Arduino UNO R4 - 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 UNO R4 - 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 UNO R4 - 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

  • Copia el código anterior y ábrelo con Arduino IDE
  • Cambia los datos de WiFi (SSID y contraseña) en el código por los tuyos.
  • Cambia la dirección del broker MQTT en el código (ya sea nombre de dominio o dirección IP).
  • Haz clic en el botón Subir en Arduino IDE para enviar el código a tu Arduino UNO R4.

Enviar mensaje desde Arduino UNO R4 a la PC mediante MQTT

El Arduino UNO R4 envía información al tema MQTT llamado arduino-uno-r4/send. En una computadora, la ventana de suscripción se suscribe a ese tema para recibir los datos.

  • Abre el Monitor Serial para ver que el Arduino UNO R4 envía regularmente un mensaje a un tema.
COM6
Send
IP Address: 192.168.0.2 Arduino UNO R4 - Connecting to MQTT broker Arduino UNO R4 - Subscribed to the topic: arduino-uno-r4/receive Arduino UNO R4 - MQTT broker Connected! Arduino UNO R4 - sent to MQTT: - topic: arduino-uno-r4/send - payload:{"timestamp":10708,"data":311} Arduino UNO R4 - sent to MQTT: - topic: arduino-uno-r4/send - payload:{"timestamp":15837,"data":298} Arduino UNO R4 - sent to MQTT: - topic: arduino-uno-r4/send - payload:{"timestamp":20965,"data":291} Arduino UNO R4 - sent to MQTT: - topic: arduino-uno-r4/send - payload:{"timestamp":26094,"data":286}
Autoscroll Show timestamp
Clear output
9600 baud  
Newline  
  • Mira la Ventana del Suscriptor y verás que muestra el mensaje enviado por el Arduino UNO R4 así:
Command Prompt
Microsoft Windows [Version 10.0.19045.3930] (c) Microsoft Corporation. All rights reserved. C:\WINDOWS\system32>cd /d D:\Draft\mosquitto D:\Draft\mosquitto>mosquitto_sub -h 192.168.0.11 -p 1883 -t arduino-uno-r4/send Hello, MQTT! {"timestamp":10708,"data":311} {"timestamp":15837,"data":298} {"timestamp":20965,"data":291} {"timestamp":26094,"data":286}

Enviar mensaje desde la PC a Arduino UNO R4 vía MQTT

El Arduino UNO R4 está configurado para recibir mensajes del tema arduino-uno-r4/receive. La ventana del publicador en la PC envía mensajes a este tema para comunicarse con el Arduino UNO R4.

  • Enviar un mensaje al tema al que Arduino UNO R4 está suscrito usando este comando en la Ventana del Publicador:
mosquitto_pub -h 192.168.0.11 -p 1883 -t arduino-uno-r4/receive -m "Hello, Arduino UNO R4!"
  • Notarás que Arduino UNO R4 recibe este mensaje, como se muestra en el Monitor Serial:
COM6
Send
Arduino UNO R4 - received from MQTT: - topic: arduino-uno-r4/receive - payload: Hello, Arduino UNO R4!
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!