Comunicación entre dos ESP32
Este tutorial explica cómo crear una conexión entre dos ESP32 mediante TCP/IP a través de WiFi y intercambiar datos. Un ESP32 actúa como cliente TCP y el otro como servidor TCP. También aprenderemos en detalle con un ejemplo:
- ESP32 #1 se conecta a un botón y actúa como cliente TCP.
- ESP32 #2 se conecta a un LED y actúa como servidor TCP.
- Dos ESP32 se conectan entre sí a través de Internet.
- Cuando se presiona el botón en ESP32 #1, el LED en ESP32 #2 se enciende.

Hardware Requerido
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) |
Comunicación entre dos ESP32 - Descripción general
Hay muchas formas de hacer que ESP32 #1 se comuniqe con ESP32 #2. Dependiendo de la distancia, podemos elegir una de las siguientes formas:
| 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 conectamos ambos ESP32 a Internet, la distancia de comunicación es ilimitada
- Si no conectamos ambos ESP32 a Internet, pero los conectamos a la misma red LAN, la distancia de comunicación se restringe dentro de la red LAN.
Este tutorial va a usar WiFi para la comunicación entre dos ESP32.
Comunicación entre dos ESP32 a través de WiFi
Dos ESP32 pueden comunicarse entre sí a través de WiFi si:
- Dos ESP32 en la misma red LAN. No necesitan conectarse a Internet.
- Dos ESP32 en diferentes redes LAN. Necesitan conectarse a Internet.
Hay dos formas en las que dos ESP32 pueden comunicarse entre sí.
- Dos ESP32 se comunican entre sí directamente: un ESP32 es un cliente TCP, el otro es un servidor TCP.
- Dos ESP32 se comunican entre sí indirectamente a través de un servidor centralizado (p. ej., servidor MQTT): ambos ESP32 son clientes TCP. Consulta el tutorial Comunicación ESP32-ESP32 vía MQTT.
Se necesita un protocolo de aplicación que dos ESP32 usen para comunicarse entre sí. Por ejemplo:
- Protocolo propio sobre TCP crudo (directamente)
- Modbus TCP (directamente)
- HTTP (directamente)
- Telnet (directamente)
- SSH (directamente)
- MQTT (indirectamente a través de un servidor)
※ Nota:
- El protocolo UDP está fuera del alcance de este tutorial.
Aplicación de ejemplo
Realicemos la siguiente aplicación: un botón o interruptor conectado al ESP32 #1 controla un LED conectado al ESP32 #2 mediante WiFi.

Para hacerlo más sencillo, este tutorial utilizará un protocolo autodefinido (definido por nosotros, sin estándar).
Protocolo definido por el usuario
Definimos un protocolo simple de la siguiente manera:
- Crear una conexión TCP entre ESP32 #1 y ESP32 #2
- ESP32 #1:
- Cliente TCP: realiza activamente una solicitud de conexión TCP a ESP32 #2
- Si el estado del interruptor cambia a ON, ESP32 #1 envía un byte (comando) con valor 1 a ESP32 #2.
- Si el estado del interruptor cambia a OFF, ESP32 #1 envía un byte (comando) con valor 0 a ESP32 #2.
- ESP32 #2:
- Servidor TCP: escucha una solicitud de conexión TCP desde ESP32 #1. Si hay una solicitud TCP, la acepta y se crea la conexión.
- Si recibe un byte:
- Si el valor es 1, enciende el LED
- Si el valor es 0, apaga el LED
- Diagrama de cableado para ESP32 #1: Cliente TCP + un botón/interruptor
- Diagrama de cableado para ESP32 #2: Servidor TCP + un LED
- ESP32 - LED tutorial
- ESP32 - Botón tutorial
- Si esta es la primera vez que usas ESP32, consulta cómo configurar el entorno para ESP32 en Arduino IDE.
- Conecta un botón o interruptor a ESP32 #1
- Conecta un LED a ESP32 #2
- Abre Arduino IDE (llamado Arduino IDE #1)
- Instala la biblioteca ezButton en Arduino IDE
- Conecta ESP32 #1 al PC mediante un cable USB y selecciona el puerto COM de 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 ESP32 #2 al PC mediante un cable USB y selecciona el puerto COM de ESP32 #2 en Arduino IDE #2
- Copia el código de ESP32 #1, pégalo en Arduino IDE #1 y guárdalo (llamado ESP321)
- Copia el código de ESP32 #2, pégalo en Arduino IDE #2 y guárdalo (llamado ESP322)
- Carga el código de ESP32 #2 a ESP32 #2 primero
- Abre el Monitor Serial en Arduino IDE #2, obtén la dirección IP del servidor TCP
- Actualizar la dirección IP del servidor TCP en el código de ESP32 #1
- Subir el código de ESP32 #1 al ESP32 #1
- Abrir el Monitor Serial en Arduino IDE #1
- Presiona y mantén pulsado el botón en ESP32 #1 → ver el estado del LED en ESP32 #2 (ENCENDIDO)
- Suelta el botón en ESP32 #1 → ver el estado del LED en ESP32 #2 (APAGADO)
- Realiza el proceso anterior varias veces.
- Ver la salida en ambos Monitores Serial
- Monitor Serial de ESP32 #1
- Monitor de serie del ESP32 #2
- (): Si abre la ventana del IDE de Arduino #2 a través de "Archivo" → "Nuevo" o "Abrir" desde la ventana del IDE de Arduino #2, NO podrá abrir dos monitores serie para dos ESP32 en la misma PC al mismo tiempo.
- Existe una alternativa a este protocolo autodefinido. Es el Modbus TCP. El protocolo Modbus está estandarizado; tiene muchas ventajas sobre el protocolo autodefinido. Ver más en el tutorial ESP32 - Modbus.
Diagrama de cableado

This image is created using Fritzing. Click to enlarge image
Si no sabe c\u00f3mo alimentar ESP32 y otros componentes, encuentre instrucciones en el siguiente tutorial: C\u00f3mo alimentar 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 ESP32 para ESP32 #1
Código ESP32 para ESP32 #2
Pasos R\u00e1pidos
※ Nota:
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.