Comunicação MQTT entre ESP8266 e ESP8266
Neste tutorial, vamos abordar:
- Como habilitar a comunicação bidirecional entre dois ESP8266 usando MQTT.
- Cenário de exemplo: usar um botão ou interruptor conectado ao ESP8266 #1 para controlar um LED conectado ao ESP8266 #2 via MQTT.

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) |
Sobre ESP8266 e MQTT
Temos um tutorial detalhado sobre como usar o ESP8266 com MQTT aqui:
Comunicação entre dois ESP8266 via MQTT
Duas placas ESP8266 podem se comunicar entre si usando um servidor MQTT. Se você prefere a comunicação direta entre dois ESP8266 sem depender de um servidor MQTT, confira o tutorial sobre comunicação TCP Cliente/Servidor entre ESP8266 e ESP8266.
Quando o ESP8266 #1 e o ESP8266 #2 trocam dados por meio de um broker MQTT:
- Os dois ESP8266 se conectam ao broker MQTT.
- Para permitir que o ESP8266 #2 envie dados para o ESP8266 #1:
- O ESP8266 #1 se inscreve em um tópico, como: esp8266-1/data.
- O ESP8266 #2 pode transmitir dados para o ESP8266 #1 publicando-os no tópico em que o ESP8266 #1 está inscrito.
- Da mesma forma, para permitir que o ESP8266 #1 envie dados para o ESP8266 #2:
- O ESP8266 #2 se inscreve em um tópico, como: esp8266-2/data.
- O ESP8266 #1 pode enviar dados para o ESP8266 #2 publicando-os no tópico em que o ESP8266 #2 está inscrito.
Seguindo essa abordagem, dois ESP8266 podem trocar dados de forma bidirecional.
Exemplo de Caso de Uso
Vamos realizar a seguinte aplicação: um botão/interruptor conectado ao ESP8266 #1 controla um LED conectado ao ESP8266 #2 via MQTT.

Existem muitos protocolos de aplicação que podemos usar. Neste exemplo, para simplificar, vamos definir um protocolo por conta própria (um protocolo próprio)
Como Funciona
Vamos definir um protocolo simples:
- O ESP8266 #1 e o ESP8266 #2 se conectam a um Broker MQTT (servidor MQTT).
- Para o ESP8266 #1:
- O ESP8266 #1 publica uma mensagem MQTT em um tópico específico sempre que o estado de um interruptor muda.
- Quando o botão/interruptor é ligado, o payload da mensagem MQTT é definido como 1.
- Quando o botão/interruptor é desligado, o payload da mensagem MQTT é definido como 0.
- Para o ESP8266 #2:
- O ESP8266 #2 se inscreve no mesmo tópico.
- Se o ESP8266 #2 receber uma mensagem MQTT com payload 1, ele ativa o LED.
- Se o ESP8266 #2 receber uma mensagem MQTT com payload 0, ele desativa 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
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
Comunicação entre dois ESP8266 via MQTT
Código ESP8266 #1
Código ESP8266 #2
Passos Rápidos
Para começar com o ESP8266 na Arduino IDE, siga estes passos:
- 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 a placa ESP8266 ao seu computador usando um cabo USB.
- Abra a Arduino IDE no seu computador.
- Escolha a placa ESP8266 correta, como (por exemplo, NodeMCU 1.0 (ESP-12E Module)), e sua respectiva porta COM.
- Ligue um botão/interruptor ao ESP8266 #1
- Ligue um LED ao ESP8266 #2
- Abra a Arduino IDE (chamada de Arduino IDE #1)
- Abra outra janela da Arduino IDE (chamada de Arduino IDE #2) clicando no ícone da Arduino IDE no seu PC (importante!)
- Abra o Gerenciador de Bibliotecas clicando no ícone Library Manager na barra de navegação à esquerda da Arduino IDE
- Digite MQTT na caixa de busca e procure a biblioteca MQTT de Joel Gaehwiler.
- Clique no botão Install para instalar a biblioteca MQTT.

- Digite ezButton na caixa de busca e encontre a biblioteca de botão de ArduinoGetStarted
- Clique no botão Install para instalar a biblioteca ezButton.

- Conecte o ESP8266 #1 ao PC por cabo USB e selecione a porta COM do ESP8266 #1 na Arduino IDE #1
- Conecte o ESP8266 #2 ao PC por cabo USB e selecione a porta COM do ESP8266 #2 na Arduino IDE #2
- 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)
- Substitua as informações de WiFi (SSID e senha) nos dois códigos pelas suas.
- Substitua o endereço do broker MQTT nos dois códigos (nome de domínio ou endereço IP).
- Faça o upload do código do ESP8266 #1 para o ESP8266 #1
- Faça o upload do código do ESP8266 #2 para o ESP8266 #2
- Abra o Serial Monitor na Arduino IDE #1
- Abra o Serial Monitor na Arduino IDE #2
- Pressione e segure o botão do ESP8266 #1 → veja o estado do LED do ESP8266 #2 (ligado)
- Solte o botão do ESP8266 #1 → veja o estado do LED do ESP8266 #2 (desligado)
- Pressione, segure e solte o botão várias vezes.
- Veja a saída nos dois Serial Monitors
- Serial Monitor do ESP8266 #1
- Serial Monitor do ESP8266 #2