Comunicación entre dos Arduino Nano ESP32 mediante MQTT

En este tutorial, cubriremos lo siguiente:

La comunicación entre dos Arduinos vía MQTT.

Hardware Requerido

2×Arduino Nano ESP32
2×Cable USB Tipo-C
1×Botón para Protoboard con Tapa
1×Kit de Botón para Protoboard
1×Botón Pulsador de Panel
1×Módulo de Botón Pulsador
1×LED Kit
1×LED (red)
1×LED Module
1×220Ω Resistor
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.

Buy Note: Use the LED Module for easier wiring. It includes an integrated resistor.

Acerca de Arduino Nano ESP32 y MQTT

Tenemos un tutorial detallado sobre cómo usar Arduino Nano ESP32 con MQTT aquí:

Comunicación entre dos Arduino Nano ESP32 mediante MQTT

Dos placas Arduino Nano ESP32 pueden comunicarse entre sí utilizando un servidor MQTT. Si prefiere que se comuniquen directamente sin usar un servidor MQTT, consulte el tutorial sobre Arduino Nano ESP32 a Arduino Nano ESP32 comunicación TCP Cliente/Servidor.

Cuando Arduino Nano ESP32 #1 y Arduino Nano ESP32 #2 intercambian datos a través de un broker MQTT:

  • Ambos Arduino Nano ESP32 se conectan al broker MQTT.
  • Para que Arduino Nano ESP32 #2 envíe datos a Arduino Nano ESP32 #1:
    • Arduino Nano ESP32 #1 se suscribe a un tema, por ejemplo: arduino-nano-esp32-1/data.
    • Arduino Nano ESP32 #2 puede enviar datos a Arduino Nano ESP32 #1 publicando los datos en el tema al que Arduino Nano ESP32 #1 está suscrito.
  • De manera similar, para que Arduino Nano ESP32 #1 envíe datos a Arduino Nano ESP32 #2:
    • Arduino Nano ESP32 #2 se suscribe a un tema, por ejemplo: arduino-nano-esp32-2/data.
    • Arduino Nano ESP32 #1 puede enviar datos a Arduino Nano ESP32 #2 publicando los datos en el tema al que Arduino Nano ESP32 #2 está suscrito.

    Siguiendo este método, dos placas Arduino Nano ESP32 pueden intercambiar datos de forma bidireccional.

Ejemplo de caso de uso

Vamos a realizar la siguiente aplicación: Un botón/conmutador conectado a Arduino Nano ESP32 #1 controla un LED conectado a Arduino Nano ESP32 #2 a través de MQTT.

comunicación entre dos Arduinos

Como se mencionó anteriormente, hay algunos protocolos de aplicación que podemos usar. En este ejemplo, para simplificarlo, definiremos un protocolo por nuestra cuenta (un protocolo definido por nosotros mismos).

Cómo funciona

Vamos a establecer un protocolo sencillo:

  • Tanto Arduino Nano ESP32 #1 como Arduino Nano ESP32 #2 se conectan a un broker MQTT (servidor MQTT).
  • Para Arduino Nano ESP32 #1:
    • Arduino Nano ESP32 #1 envía un mensaje MQTT a un tópico cada vez que cambia el estado de un interruptor.
    • Cuando el botón o interruptor se enciende, la carga útil del mensaje MQTT se establece en 1.
    • Cuando el botón o interruptor se apaga, la carga útil del mensaje MQTT se establece en 0.
  • Para Arduino Nano ESP32 #2:
    • Arduino Nano ESP32 #2 se suscribe al tópico.
    • Si Arduino Nano ESP32 #2 recibe un mensaje MQTT con una carga útil de 1, enciende un LED.
    • Si Arduino Nano ESP32 #2 recibe un mensaje MQTT con una carga útil de 0, apaga el LED.

    Diagrama de cableado

    • Arduino Nano ESP32 #1 - Diagrama de cableado entre Arduino Nano ESP32 y el botón
    Diagrama de cableado del botón Arduino Nano ESP32

    This image is created using Fritzing. Click to enlarge image

    • Arduino Nano ESP32 #2 - Diagrama de cableado entre Arduino Nano ESP32 y LED
    Diagrama de cableado LED para Arduino Nano ESP32

    This image is created using Fritzing. Click to enlarge image

Comunicación entre dos Arduino Nano ESP32 mediante MQTT

Código Arduino Nano ESP32 #1

/* * 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/communication-between-two-arduino-nano-esp32-via-mqtt */ // ESP32 #1: CONNECTED TO A BUTTON/SWITCH, ACTED AS A MQTT PUBLISHER #include <WiFi.h> #include <MQTTClient.h> #include <ezButton.h> #define BUTTON_PIN D2 // The Arduino Nano ESP32 pin connected to the button 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.5"; // CHANGE TO MQTT BROKER'S IP ADDRESS const int MQTT_PORT = 1883; const char MQTT_CLIENT_ID[] = "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 MQTT_TOPIC[] = "esp32/command"; // CHANGE IT AS YOU DESIRE WiFiClient network; MQTTClient mqtt = MQTTClient(256); ezButton button(BUTTON_PIN); // create ezButton that attach to pin 7 void setup() { Serial.begin(9600); button.setDebounceTime(100); // set debounce time to 100 milliseconds Serial.println("Arduino Nano ESP32 #1: CONNECTED TO A BUTTON/SWITCH, ACTED AS A MQTT PUBLISHER"); 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(); button.loop(); // MUST call the loop() function first if (button.isPressed()) { Serial.println("- The button is pressed, send command: 1"); sendToMQTT('1'); } if (button.isReleased()) { Serial.println("- The button is released, send command: 0"); sendToMQTT('0'); } } void connectToMQTT() { // Connect to the MQTT broker mqtt.begin(MQTT_BROKER_ADRRESS, MQTT_PORT, network); 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; } Serial.println("Arduino Nano ESP32 - MQTT broker Connected!"); } void sendToMQTT(char command) { char messageBuffer[1]; messageBuffer[0] = command; mqtt.publish(MQTT_TOPIC, messageBuffer); Serial.println("Arduino Nano ESP32 - sent to MQTT:"); Serial.print("- topic: "); Serial.println(MQTT_TOPIC); Serial.print("- payload:"); Serial.println(messageBuffer); }

Arduino Nano ESP32 Código #2

/* * 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/communication-between-two-arduino-nano-esp32-via-mqtt */ // ESP32 #2: CONNECTED TO A LED, ACTED AS A MQTT SUBSCRIBER #include <WiFi.h> #include <MQTTClient.h> #define LED_PIN D5 // The Arduino Nano ESP32 pin connected to LED 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.5"; // CHANGE TO MQTT BROKER'S IP ADDRESS const int MQTT_PORT = 1883; const char MQTT_CLIENT_ID[] = "esp32-002"; // 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 MQTT_TOPIC[] = "esp32/command"; // CHANGE IT AS YOU DESIRE WiFiClient network; MQTTClient mqtt = MQTTClient(256); void setup() { Serial.begin(9600); pinMode(LED_PIN, OUTPUT); Serial.println("Arduino Nano ESP32 #2: CONNECTED TO A LED, ACTED AS A MQTT SUBSCRIBER"); 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(); } void connectToMQTT() { // Connect to the MQTT broker mqtt.begin(MQTT_BROKER_ADRRESS, MQTT_PORT, network); // Create a handler for incoming messages mqtt.onMessage(messageReceived); 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 messageReceived() function if (mqtt.subscribe(MQTT_TOPIC)) Serial.print("Arduino Nano ESP32 - Subscribed to the topic: "); else Serial.print("Arduino Nano ESP32 - Failed to subscribe to the topic: "); Serial.println(MQTT_TOPIC); Serial.println("Arduino Nano ESP32 - MQTT broker Connected!"); } void messageReceived(String &topic, String &payload) { Serial.println("Arduino Nano ESP32 - received from MQTT:"); Serial.println("- topic: " + topic); Serial.print("- payload: "); Serial.println(payload); char command = payload[0]; if (command == '1') { Serial.print("- Received command: "); Serial.print(command); Serial.println(" => Turned LED on"); digitalWrite(LED_PIN, HIGH); // Turn LED on } else if (command == '0') { Serial.print("- Received command: "); Serial.print(command); Serial.println(" => Turned LED off"); digitalWrite(LED_PIN, LOW); // Turn LED off } else { Serial.print("- Received an unsupported command: "); Serial.println(command); } }

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 computadora mediante un cable USB.
  • Inicie el IDE de Arduino en su computadora.
  • Seleccione la placa Arduino Nano ESP32 y su puerto COM correspondiente.
  • Conecte un botón/interruptor a Arduino Nano ESP32 #1
  • Conecte un LED a Arduino Nano ESP32 #2
  • Abra el IDE de Arduino (llamado IDE de Arduino #1)
  • Abra otra ventana del IDE de Arduino (llamado IDE de Arduino #2) haciendo clic en el icono del IDE de Arduino en su PC (¡importante!())
  • Abra el Administrador de Bibliotecas haciendo clic en 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 ezButton en la caja de búsqueda, luego busca la biblioteca de botones de ArduinoGetStarted
  • Haz clic en el botón Instalar para instalar la biblioteca ezButton.
Biblioteca de botones para Arduino Nano ESP32
  • Conectar Arduino Nano ESP32 #1 a la PC mediante un cable USB y seleccionar el puerto COM de Arduino Nano ESP32 #1 en el IDE de Arduino #1
  • Conectar Arduino Nano ESP32 #2 a la PC mediante un cable USB y seleccionar el puerto COM de Arduino Nano ESP32 #2 en el IDE de Arduino #2
  • Copiar el código de Arduino Nano ESP32 #1, pegarlo en el IDE de Arduino #1 y guardarlo (con el nombre Arduino Nano ESP32-1)
  • Copiar el código de Arduino Nano ESP32 #2, pegarlo en el IDE de Arduino #2 y guardarlo (con el nombre Arduino Nano ESP32-2)
  • Reemplaza la información de WiFi (SSID y contraseña) en ambos códigos con la tuya.
  • Reemplaza la dirección del broker MQTT en ambos códigos (nombre de dominio o dirección IP).
  • Cargar el código de Arduino Nano ESP32 #1 en Arduino Nano ESP32 #1
  • Cargar el código de Arduino Nano ESP32 #2 en Arduino Nano ESP32 #2
  • Abrir el Monitor Serial en el IDE de Arduino #1
  • Abrir el Monitor Serial en el IDE de Arduino #2
  • Presiona y mantén presionado el botón en Arduino Nano ESP32 #1 para ver el estado del LED en Arduino Nano ESP32 #2 (ENCENDIDO)
  • Suelta el botón en Arduino Nano ESP32 #1 para ver el estado del LED en Arduino Nano ESP32 #2 (APAGADO)
  • Presiona, mantén y suelta el botón varias veces.
  • Ver la salida en ambos Monitores Serial
    • Monitor Serial de Arduino Nano ESP32 #1
    COM6
    Send
    Arduino Nano ESP32 #1: CONNECTED TO A BUTTON/SWITCH, ACTED AS A MQTT PUBLISHER Arduino Nano ESP32 - Attempting to connect to SSID: YOUR_WIFI_SSID Arduino Nano ESP32 - Connecting to MQTT broker Arduino Nano ESP32 - MQTT broker Connected! - The button is pressed, send command: 1 Arduino Nano ESP32 - sent to MQTT: - topic: arduino/command - payload:1 - The button is released, send command: 0 Arduino Nano ESP32 - sent to MQTT: - topic: arduino/command - payload:0
    Autoscroll Show timestamp
    Clear output
    9600 baud  
    Newline  
    • Monitor Serial de Arduino Nano ESP32 #2
    COM6
    Send
    Arduino Nano ESP32 #2: CONNECTED TO A LED, ACTED AS A MQTT SUBSCRIBER Arduino Nano ESP32 - Attempting to connect to SSID: YOUR_WIFI_SSID Arduino Nano ESP32 - Connecting to MQTT broker Arduino Nano ESP32 - Subscribed to the topic: arduino/command Arduino Nano ESP32 - MQTT broker Connected! Arduino Nano ESP32 - received from MQTT: - topic: arduino/command - payload: 1 - Received command: 1 => Turned LED on Arduino Nano ESP32 - received from MQTT: - topic: arduino/command - payload: 0 - Received command: 0 => Turned LED off
    Autoscroll Show timestamp
    Clear output
    9600 baud  
    Newline  

※ 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!