Comunicação entre dois ESP8266
Este guia mostra como estabelecer uma conexão entre dois dispositivos ESP8266 usando TCP/IP sobre WiFi e trocar dados. Um ESP8266 funcionará como cliente TCP, enquanto o outro atuará como servidor TCP. Vamos explorar esse processo com um exemplo:
- O ESP8266 #1 será conectado a um botão e servirá como cliente TCP.
- O ESP8266 #2 será conectado a um LED e funcionará como servidor TCP.
- Os dois ESP8266 se conectarão entre si pela internet.
- Quando o botão do ESP8266 #1 for pressionado, ele fará o LED do ESP8266 #2 acender.
Hardware Necessário
| 2 | × | ESP8266 NodeMCU | |
| 2 | × | Cabo Micro USB | |
| 1 | × | (Recomendado) Placa de Expansão com Bornes de Parafuso para ESP8266 |
Or you can buy the following kits:
| 1 | × | DIYables Sensor Kit (18 sensors/displays) |
Comunicação entre dois ESP8266 - Visão Geral
Vamos pensar em um exemplo específico: o ESP8266 #1 interagindo com o ESP8266 #2. Existem várias maneiras de permitir a comunicação entre os dois ESP8266. Podemos escolher uma delas de acordo com a distância da comunicação. A tabela abaixo mostra alguns métodos e o alcance de comunicação correspondente.
| Métodos | Alcance |
|---|---|
| I2C | muito curto |
| SPI | muito curto |
| UART (TTL) | muito curto |
| UART (RS-232/485/422) | curto |
| Bluetooth | curto |
| LoRa | longo |
| Ethernet/WiFi | ilimitado(*) |
※ Nota:
- Se dois ESP8266 estiverem conectados à Internet, o alcance da comunicação é irrestrito.
- No entanto, se dois ESP8266 não estiverem conectados à Internet, mas sim à mesma rede LAN, o alcance da comunicação fica restrito a essa rede local.
Entre os métodos mencionados acima, este tutorial usa WiFi para permitir a comunicação entre dois ESP8266, pois ele oferece um alcance de comunicação ilimitado.
Comunicação entre dois ESP8266 via LAN local ou Internet
Dois ESP8266 podem se comunicar entre si por WiFi quando:
- Estão na mesma rede local (LAN), e uma conexão com a Internet não é necessária
- Estão em LANs diferentes, e uma conexão com a Internet é necessária
Não importa se dois ESP8266 estão conectados dentro de uma rede LAN local ou pela Internet, existem duas formas de comunicação:
- Diretamente entre os dois ESP8266
- Por meio de um servidor centralizado (por exemplo, um servidor MQTT). Consulte Comunicação entre dois ESP8266 via MQTT
Na comunicação direta, normalmente um ESP8266 é o cliente TCP e o outro é o servidor TCP.
Ao usar um servidor centralizado para a comunicação, normalmente os dois ESP8266 atuam como clientes TCP.
Ao decidir sobre um protocolo de aplicação para a comunicação entre dois ESP8266, temos várias opções:
- Protocolo próprio sobre TCP puro
- Modbus TCP
- HTTP
- Telnet
- SSH
- MQTT (que exige um servidor centralizado)
Exemplo de Aplicação
Vamos tornar realidade o seguinte programa: um botão/interruptor conectado ao ESP8266 #1 será usado para ligar e desligar um LED conectado ao ESP8266 #2 por WiFi.

Como dito antes, existem alguns protocolos de aplicação disponíveis. Para simplificar este exemplo, vamos criar nosso próprio protocolo (um protocolo próprio).
Protocolo Próprio
Vamos definir um protocolo simples:
- Estabelecer uma conexão TCP entre o ESP8266 #1 e o ESP8266 #2
- ESP8266 #1:
- Comportar-se como cliente TCP, iniciando a conexão TCP com o ESP8266 #2
- Quando o interruptor for ligado (ON), enviar um byte (comando) com valor 1 para o ESP8266 #2.
- Quando o interruptor for desligado (OFF), enviar um byte (comando) com valor 0 para o ESP8266 #2.
- ESP8266 #2:
- Atuar como servidor TCP, aguardando pedidos de conexão TCP do ESP8266 #1
- Se o byte recebido for 1, ligar o LED
- Se o byte recebido for 0, desligar o LED
- ESP8266 #1 - Diagrama de ligação entre o ESP8266 e o botão
- ESP8266 #2 - Diagrama de ligação entre o ESP8266 e o LED
- Confira o tutorial como configurar o ambiente para ESP8266 na Arduino IDE se esta for a sua primeira vez usando o ESP8266.
- Ligue os componentes como mostrado no diagrama.
- Conecte as duas placas ESP8266 ao seu computador usando um cabo USB.
- Abra a Arduino IDE (chamada de Arduino IDE #1).
- Abra a Arduino IDE (chamada de Arduino IDE #2).
- Escolha a placa ESP8266 correta, como (por exemplo, NodeMCU 1.0 (ESP-12E Module)), e sua respectiva porta COM.
- Instale a biblioteca ezButton na Arduino IDE.
- Copie o código do ESP8266 #1, cole na Arduino IDE #1 e salve (com o nome ESP8266-1).
- Copie o código do ESP8266 #2, cole na Arduino IDE #2 e salve (com o nome ESP8266-2).
- Faça o upload do código do ESP8266 #2 para o ESP8266 #2 primeiro.
- Abra o Serial Monitor na Arduino IDE #2 e obtenha o endereço IP do servidor TCP.
- Altere o endereço IP do servidor TCP no código do ESP8266 #1.
- Faça o upload do código do ESP8266 #1 para o ESP8266 #1
- Abra o Serial Monitor na Arduino IDE #1.
- Pressione e segure o botão do ESP8266 #1 e observe o estado do LED do ESP8266 #2 (deve estar ligado).
- Solte o botão do ESP8266 #1 e observe o estado do LED do ESP8266 #2 (deve estar desligado).
- Pressione, segure e solte o botão várias vezes.
- Confira a saída no Serial Monitor #1:
- Confira a saída no Serial Monitor #2:
Diagrama de Ligação

This image is created using Fritzing. Click to enlarge image
Para mais informações, veja Pinagem do ESP8266 e como alimentar o ESP8266 e outros componentes.

This image is created using Fritzing. Click to enlarge image
Código ESP8266 para o ESP8266 #1
Código ESP8266 para o ESP8266 #2
Passos Rápidos
Para começar com o ESP8266 na Arduino IDE, siga estes passos:
Vídeo
Como conectar dois ESP8266 pela Internet
Existem dois tipos de endereço IP: privado e público. O endereço IP normalmente usado em uma rede doméstica é privado.
É fácil reconhecer um endereço IP privado. Existem três formatos de endereço IP privado: 10.x.x.x, 172.16.x.x, 192.168.x.x
Não é importante usar o endereço IP privado nos seguintes cenários:
- Quando dois ESP8266 estão dentro da mesma rede local, independentemente de estarem se comunicando diretamente ou por meio de um servidor centralizado, e independentemente de a LAN estar conectada à internet ou não.
- Quando dois ESP8266 estão em redes locais separadas e se comunicam entre si por meio de um servidor centralizado.
No caso de dois ESP8266 estarem em redes LAN diferentes e se comunicarem diretamente, o cliente TCP ESP8266 pode usar um endereço IP privado. No entanto, o servidor TCP ESP8266 deve usar:
- Um endereço IP público
- Um endereço IP privado com "Port Forwarding" no roteador/Access Point
A técnica de "Port Forwarding" varia de roteador/AP para roteador/AP. Este tutorial não aborda esse assunto.