Comunicación entre dos Arduino Nano ESP32

Esta guía te muestra cómo establecer una conexión entre dos dispositivos Arduino Nano ESP32 utilizando TCP/IP a través de WiFi y intercambiar datos. Un Arduino Nano ESP32 funciona como cliente TCP, mientras que el otro actúa como servidor TCP. Vamos a profundizar en el proceso con un ejemplo:

comunicación entre dos ESP32

Hardware Requerido

2×Módulo de Desarrollo ESP32 ESP-WROOM-32
2×Cable Micro USB
1×Push Button
1×LED Kit
1×LED (red)
1×LED Module
1×Protoboard
1×Cables Puente
1×(Recomendado) Placa de Expansión de Terminales de Tornillo para ESP32
1×(Recomendado) Breakout Expansion Board for ESP32
1×(Recomendado) Divisor de Alimentación para ESP32

Or you can buy the following kits:

1×DIYables ESP32 Starter Kit (ESP32 included)
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.

Comunicación entre dos Arduino Nano ESP32 - Visión general

Existen varios métodos para permitir la comunicación entre "Arduino Nano ESP32 #1" y "Arduino Nano ESP32 #2". La elección del método depende de la distancia entre ellos. Algunas de las opciones incluyen:

Methods Distance
SPI very short
I2C very short
UART (TTL) very short
UART (RS-232/485/422) short
Bluetooth short
LoRa long
WiFi unlimited(*)

※ Nota:

(*):

  • Si ambos dispositivos Arduino Nano ESP32 están conectados a Internet, la distancia de comunicación es ilimitada.
  • Si ambos dispositivos Arduino Nano ESP32 no están conectados a Internet, pero están conectados a la misma LAN (Red de Área Local), la distancia de comunicación está limitada a la red LAN.

Este tutorial va a utilizar WiFi para la comunicación entre dos ESP32.

Comunicación entre dos Arduino Nano ESP32 vía WiFi

Dos dispositivos Arduino Nano ESP32 pueden establecer comunicación a través de WiFi bajo las siguientes condiciones:

  • Si ambos dispositivos Arduino Nano ESP32 están dentro de la misma LAN (red de área local), pueden comunicarse sin necesidad de conectarse a Internet.
  • Si los dos dispositivos Arduino Nano ESP32 se encuentran en diferentes redes LAN, deben conectarse a Internet para facilitar la comunicación.

Hay dos métodos principales de comunicación entre dos dispositivos Arduino Nano ESP32:

  • Comunicación Directa:
    • En este método, un Arduino Nano ESP32 actúa como cliente TCP, mientras que el otro sirve como servidor TCP. Se comunican directamente entre sí a través de WiFi.

    ^ Comunicación indirecta a través de un servidor centralizado (p. ej., servidor MQTT):

    • Ambos dispositivos Arduino Nano ESP32 actúan como clientes TCP y se comunican indirectamente a través de un servidor centralizado, como un servidor MQTT. Puede consultar el tutorial en Comunicación entre ESP32 y Arduino Nano ESP32 vía MQTT para obtener detalles de implementación.

    Necesita un protocolo de aplicación que dos Arduino Nano ESP32 utilizan para comunicarse entre sí. Por ejemplo:

    • Protocolo propio sobre TCP crudo (utilizado para comunicación directa)
    • Modbus TCP (utilizado para comunicación directa)
    • HTTP (utilizado para comunicación directa)
    • Telnet (utilizado para comunicación directa)
    • SSH (utilizado para comunicación directa)
    • MQTT (utilizado para comunicación indirecta a través de un servidor)

Aplicación de ejemplo

Implementemos la siguiente aplicación: Un botón o interruptor conectado a Arduino Nano ESP32 #1 controlará un LED conectado a Arduino Nano ESP32 #2 a través de WiFi.

comunicación entre dos ESP32

Para simplificar, usaremos un protocolo autodefinido (creado por nosotros, no es un estándar).

Protocolo definido por uno mismo

Definimos un protocolo simple de la siguiente manera:

  • Crear una conexión TCP entre Arduino Nano ESP32 #1 y Arduino Nano ESP32 #2
  • Arduino Nano ESP32 #1:
    • Cliente TCP: realiza activamente una solicitud de conexión TCP a Arduino Nano ESP32 #2
    • Si el estado del interruptor cambia a ENCENDIDO, Arduino Nano ESP32 #1 envía un byte (comando) con un valor de 1 a Arduino Nano ESP32 #2.
    • Si el estado del interruptor cambia a APAGADO, Arduino Nano ESP32 #1 envía un byte (comando) con un valor de 0 a Arduino Nano ESP32 #2.
  • Arduino Nano ESP32 #2:
    • Servidor TCP: escucha una solicitud de conexión TCP de Arduino Nano ESP32 #1. Si hay una solicitud TCP, la acepta y se crea la conexión.
    • Si recibe un byte:
      • Si el valor es 1, encender LED
      • Si el valor es 0, apagar LED

      Diagrama de cableado

      • Diagrama de cableado para Arduino Nano ESP32 #1: CLIENTE TCP + UN BOTÓN/INTERRUPTOR
      Diagrama de cableado del botón para Arduino Nano ESP32

      This image is created using Fritzing. Click to enlarge image

      • Diagrama de cableado para Arduino Nano ESP32 #2: Servidor TCP + un LED
      Diagrama de cableado de LED para Arduino Nano ESP32

      This image is created using Fritzing. Click to enlarge image

      ※ Nota:

      Es necesario usar una resistencia para el LED si no tiene una resistencia integrada. Tenemos tutoriales dedicados para el botón y el LED. Puedes aprender más sobre ellos en:

      Código para Arduino Nano ESP32 nº 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 */ // ESP32: TCP CLIENT + A BUTTON/SWITCH #include <ezButton.h> #include <WiFi.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* serverAddress = "192.168.0.180"; // CHANGE TO ESP32#2'S IP ADDRESS const int serverPort = 4080; ezButton button(BUTTON_PIN); // create ezButton WiFiClient TCPclient; void setup() { Serial.begin(9600); button.setDebounceTime(50); // set debounce time to 50 milliseconds Serial.println("Arduino Nano ESP32 #1: TCP CLIENT + A BUTTON/SWITCH"); // Connect to Wi-Fi WiFi.begin(WIFI_SSID, WIFI_PASSWORD); while (WiFi.status() != WL_CONNECTED) { delay(1000); Serial.println("Connecting to WiFi..."); } Serial.println("Connected to WiFi"); // connect to TCP server (Arduino #2) if (TCPclient.connect(serverAddress, serverPort)) { Serial.println("Connected to TCP server"); } else { Serial.println("Failed to connect to TCP server"); } } void loop() { button.loop(); // MUST call the loop() function first if (!TCPclient.connected()) { Serial.println("Connection is disconnected"); TCPclient.stop(); // reconnect to TCP server (Arduino #2) if (TCPclient.connect(serverAddress, serverPort)) { Serial.println("Reconnected to TCP server"); } else { Serial.println("Failed to reconnect to TCP server"); } } if (button.isPressed()) { TCPclient.write('1'); TCPclient.flush(); Serial.println("- The button is pressed, sent command: 1"); } if (button.isReleased()) { TCPclient.write('0'); TCPclient.flush(); Serial.println("- The button is released, sent command: 0"); } }

      Código para Arduino Nano ESP32 Arduino Nano ESP32 #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 */ // ESP32 #2: TCP SERVER + AN LED #include <WiFi.h> #define LED_PIN D5 // The Arduino Nano ESP32 pin connected to LED #define SERVER_PORT 4080 const char WIFI_SSID[] = "YOUR_WIFI_SSID"; // CHANGE TO YOUR WIFI SSID const char WIFI_PASSWORD[] = "YOUR_WIFI_PASSWORD"; // CHANGE TO YOUR WIFI PASSWORD WiFiServer TCPserver(SERVER_PORT); void setup() { Serial.begin(9600); pinMode(LED_PIN, OUTPUT); Serial.println("Arduino Nano ESP32 #2: TCP SERVER + AN LED"); // Connect to Wi-Fi WiFi.begin(WIFI_SSID, WIFI_PASSWORD); while (WiFi.status() != WL_CONNECTED) { delay(1000); Serial.println("Connecting to WiFi..."); } Serial.println("Connected to WiFi"); // Print your local IP address: Serial.print("ESP32 #2: TCP Server IP address: "); Serial.println(WiFi.localIP()); Serial.println("ESP32 #2: -> Please update the serverAddress in ESP32 #1 code"); // Start listening for a TCP client (from ESP32 #1) TCPserver.begin(); } void loop() { // Wait for a TCP client from ESP32 #1: WiFiClient client = TCPserver.available(); if (client) { // Read the command from the TCP client: char command = client.read(); Serial.print("ESP32 #2: - Received command: "); Serial.println(command); if (command == '1') digitalWrite(LED_PIN, HIGH); // Turn LED on else if (command == '0') digitalWrite(LED_PIN, LOW); // Turn LED off client.stop(); } }

      Pasos R\u00e1pidos

      • Si es la primera vez que usas ESP32, consulta cómo configurar el entorno para Arduino Nano ESP32 en Arduino IDE.
      • Conecta un botón/interruptor a Arduino Nano ESP32 #1
      • Conecta un LED a Arduino Nano ESP32 #2
      • Abre Arduino IDE (llamado Arduino IDE #1)
      • Instala la biblioteca ezButton en Arduino IDE
      • Conecta Arduino Nano ESP32 #1 al PC mediante un cable USB y selecciona el puerto COM de Arduino Nano ESP32 #1 en Arduino IDE #1
      • Abre otra ventana de Arduino IDE (llamada Arduino IDE #2) haciendo clic en el icono de Arduino IDE en tu PC (¡importante!())
      • Conecta Arduino Nano ESP32 #2 al PC mediante un cable USB y selecciona el puerto COM de Arduino Nano ESP32 #2 en Arduino IDE #2
      • Copia el código de Arduino Nano ESP32 #1, pégalo en Arduino IDE #1 y guárdalo (llamado ESP321)
      • Copia el código de Arduino Nano ESP32 #2, pégalo en Arduino IDE #2 y guárdalo (llamado ESP322)
      • Sube el código de Arduino Nano ESP32 #2 a Arduino Nano ESP32 #2 primero
      • Abre el Monitor Serial en Arduino IDE #2, obtén la dirección IP del servidor TCP
      COM6
      Send
      Arduino Nano ESP32 #2: TCP SERVER + AN LED TCP Server IP address: 192.168.0.2 -> Please update the serverAddress in Arduino Nano ESP32 #1 code
      Autoscroll Show timestamp
      Clear output
      9600 baud  
      Newline  
      • Actualiza la dirección IP del servidor TCP en el código de Arduino Nano ESP32 #1.
      • Sube el código de Arduino Nano ESP32 #1 al Arduino Nano ESP32 #1.
      • Abre el Monitor Serial en Arduino IDE #1.
      • Mantén presionado el botón en Arduino Nano ESP32 #1 → ver el estado del LED en Arduino Nano ESP32 #2 (ENCENDIDO).
      • Suelta el botón en Arduino Nano ESP32 #1 → ver el estado del LED en Arduino Nano ESP32 #2 (APAGADO).
      • Realiza el proceso anterior varias veces.
      • Ver la salida en ambos Monitores Serial.
      • Monitor Serial de Arduino Nano ESP32 #1.
      COM6
      Send
      Arduino Nano ESP32 #1: TCP CLIENT + A BUTTON/SWITCH Arduino Nano ESP32 #1: Connected to TCP server Arduino Nano ESP32 #1: - The button is pressed, sent command: 1 Arduino Nano ESP32 #1: - The button is released, sent command: 0 Arduino Nano ESP32 #1: - The button is pressed, sent command: 1 Arduino Nano ESP32 #1: - The button is released, sent command: 0 Arduino Nano ESP32 #1: - The button is pressed, sent command: 1 Arduino Nano ESP32 #1: - The button is released, sent command: 0
      Autoscroll Show timestamp
      Clear output
      9600 baud  
      Newline  
      • Monitor de serie de Arduino Nano ESP32 #2
      COM6
      Send
      Arduino Nano ESP32 #2: TCP SERVER + AN LED Arduino Nano ESP32 #2: TCP Server IP address: 192.168.0.2 Arduino Nano ESP32 #2: -> Please update the serverAddress in Arduino Nano ESP32 #1 code Arduino Nano ESP32 #2: - Received command: 1 Arduino Nano ESP32 #2: - Received command: 0 Arduino Nano ESP32 #2: - Received command: 1 Arduino Nano ESP32 #2: - Received command: 0 Arduino Nano ESP32 #2: - Received command: 1 Arduino Nano ESP32 #2: - Received command: 0
      Autoscroll Show timestamp
      Clear output
      9600 baud  
      Newline  

      ※ Nota:

      • (): Si abres la ventana del Arduino IDE #2 mediante "Archivo" → "Nuevo" o "Abrir" desde la ventana del IDE #2, NO podrás abrir dos Monitores Serie para dos Arduino Nano ESP32 en la misma PC al mismo tiempo.
      • Existe una alternativa a este protocolo auto-definido. Es el Modbus TCP. El protocolo Modbus está estandarizado, tiene muchas ventajas sobre el protocolo auto-definido. Ver más en Arduino Nano ESP32 - Modbus tutorial

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.

Cómo conectar dos Arduino Nano ESP32 a través de Internet

Ver Cómo conectar dos dispositivos a través de Internet

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