Comunicação entre dois ESP32
Este tutorial ensina você a criar uma conexão entre dois ESP32 via TCP/IP sobre WiFi e a trocar dados. Um ESP32 atua como cliente TCP e o outro atua como servidor TCP. Também vamos aprender em detalhes por meio de um exemplo:
- O ESP32 #1 é conectado a um botão e atua como cliente TCP.
- O ESP32 #2 é conectado a um LED e atua como servidor TCP.
- Os dois ESP32 se conectam um ao outro pela internet .
- Quando o botão do ESP32 #1 é pressionado, o LED do ESP32 #2 acende.

Hardware Necessário
Or you can buy the following kits:
| 1 | × | DIYables ESP32 Starter Kit (ESP32 included) | |
| 1 | × | DIYables ESP32 S3 Starter Kit (ESP32 S3 included) | |
| 1 | × | DIYables Sensor Kit (18 sensors/displays) |
Comunicação entre dois ESP32 - Visão Geral
Existem muitas formas de fazer o ESP32 #1 se comunicar com o ESP32 #2. Dependendo da distância, podemos escolher uma das formas abaixo:
| Métodos | Distância |
|---|---|
| SPI | muito curta |
| I2C | muito curta |
| UART (TTL) | muito curta |
| UART (RS-232/485/422) | curta |
| Bluetooth | curta |
| LoRa | longa |
| WiFi | ilimitada(*) |
※ Nota:
(*):
- Se conectarmos os dois ESP32 à Internet, a distância de comunicação é ilimitada
- Se não conectarmos os dois ESP32 à Internet, mas os conectarmos à mesma rede LAN, a distância de comunicação fica restrita à rede LAN.
Este tutorial vai usar WiFi para a comunicação entre dois ESP32.
Comunicação entre dois ESP32 via WiFi
Dois ESP32 podem se comunicar via WiFi se:
- Os dois ESP32 estiverem na mesma rede LAN. Eles não precisam se conectar à Internet
- Os dois ESP32 estiverem em redes LAN diferentes. Eles precisam se conectar à Internet
Existem duas formas de dois ESP32 se comunicarem.
- Os dois ESP32 se comunicam diretamente: um ESP32 é cliente TCP e o outro é servidor TCP.
- Os dois ESP32 se comunicam indiretamente por meio de um servidor centralizado (por exemplo, servidor MQTT): os dois ESP32 são clientes TCP. Consulte o tutorial Comunicação ESP32-para-ESP32 via MQTT.
É preciso um protocolo de aplicação que os dois ESP32 usem para se comunicar. Por exemplo:
- Protocolo próprio sobre TCP puro (diretamente)
- Modbus TCP (diretamente)
- HTTP (diretamente)
- Telnet (diretamente)
- SSH (diretamente)
- MQTT (indiretamente via servidor)
※ Nota:
- O protocolo UDP está fora do escopo deste tutorial.
Aplicação de Exemplo
Vamos realizar a seguinte aplicação: um botão/chave conectado ao ESP32 #1 controla um LED conectado ao ESP32 #2 via WiFi.

Para simplificar, este tutorial vai usar um protocolo próprio (definido por nós, sem padrão)
Protocolo Próprio
Definimos um protocolo simples da seguinte forma:
- Criar uma conexão TCP entre o ESP32 #1 e o ESP32 #2
- ESP32 #1:
- Cliente TCP: faz ativamente a requisição de conexão TCP ao ESP32 #2
- Se o estado da chave mudar para ON, o ESP32 #1 envia um byte (comando) com valor 1 ao ESP32 #2.
- Se o estado da chave mudar para OFF, o ESP32 #1 envia um byte (comando) com valor 0 ao ESP32 #2.
- ESP32 #2:
- Servidor TCP: escuta uma requisição de conexão TCP do ESP32 #1. Se houver uma requisição TCP, ele a aceita e a conexão é criada.
- Se ele receber um byte:
- Se o valor for 1, acende o LED
- Se o valor for 0, apaga o LED
- Diagrama de Ligação do ESP32 #1: CLIENTE TCP + UM BOTÃO/CHAVE
- Diagrama de Ligação do ESP32 #2: SERVIDOR TCP + UM LED
- Tutorial ESP32 - LED
- Tutorial ESP32 - Botão
- Se esta é a primeira vez que você usa o ESP32, veja como configurar o ambiente para ESP32 no Arduino IDE.
- Ligue um botão/chave ao ESP32 #1
- Ligue um LED ao ESP32 #2
- Abra o Arduino IDE (chamado de Arduino IDE #1)
- Instale a biblioteca ezButton no Arduino IDE
- Conecte o ESP32 #1 ao PC por cabo USB e selecione a porta COM do ESP32 #1 no Arduino IDE #1
- Abra outra janela do Arduino IDE (chamada de Arduino IDE #2) clicando no ícone do Arduino IDE no seu PC (importante!())
- Conecte o ESP32 #2 ao PC por cabo USB e selecione a porta COM do ESP32 #2 no Arduino IDE #2
- Copie o código do ESP32 #1, cole no Arduino IDE #1 e salve (com o nome ESP321)
- Copie o código do ESP32 #2, cole no Arduino IDE #2 e salve (com o nome ESP322)
- Faça upload do código do ESP32 #2 para o ESP32 #2 primeiro
- Abra o Serial Monitor no Arduino IDE #2 e obtenha o endereço IP do Servidor TCP
- Atualize o endereço IP do Servidor TCP no código do ESP32 #1
- Faça upload do código do ESP32 #1 para o ESP32 #1
- Abra o Serial Monitor no Arduino IDE #1
- Pressione e segure o botão do ESP32 #1 → veja o estado do LED no ESP32 #2 (ON)
- Solte o botão do ESP32 #1 → veja o estado do LED no ESP32 #2 (OFF)
- Repita o processo acima várias vezes.
- Veja a saída nos dois Serial Monitors
- Serial Monitor do ESP32 #1
- Serial Monitor do ESP32 #2
- (): Se você abrir a janela do Arduino IDE #2 por "File" → "New" ou "Open" a partir da janela do Arduino IDE #2, você NÃO conseguirá abrir dois Serial Monitors para dois ESP32 no mesmo PC ao mesmo tempo.
- Existe uma alternativa a este protocolo próprio. É o Modbus TCP. O protocolo Modbus é padronizado e tem muitas vantagens sobre o protocolo próprio. Veja mais no tutorial ESP32 - Modbus
Diagrama de Ligação

This image is created using Fritzing. Click to enlarge image
Se você não sabe como alimentar o ESP32 e outros componentes, veja as instruções no tutorial a seguir: Como alimentar o ESP32.

This image is created using Fritzing. Click to enlarge image
※ Nota:
É preciso usar um resistor para o LED se ele não tiver um resistor embutido. Temos tutoriais dedicados para botão e LED. Você pode saber mais sobre eles em:
Código ESP32 para o ESP32 #1
Código ESP32 para o ESP32 #2
Passos Rápidos
※ Nota: