Nível: Iniciante | Tempo de leitura: 18 a 25 minutos | Tema: ESP32, IoT e comunicação sem fio
Imagine que você tem dois ESP32 na bancada. Um está ligado a um botão, outro está ligado a um relé, LED, motor ou sensor. Você quer que eles conversem entre si, mas não quer depender de roteador, internet, senha de Wi-Fi ou servidor. É exatamente aqui que o ESP-NOW começa a brilhar.
O ESP-NOW é uma forma de comunicação sem fio criada pela Espressif para permitir que placas como ESP32 e ESP8266 troquem pequenas mensagens diretamente entre si. Para projetos maker, robótica, sensores, controles remotos e automação, ele pode ser uma das soluções mais rápidas e práticas.
O que você vai aprender neste artigo
- O que é ESP-NOW e por que ele é tão útil.
- Quando usar ESP-NOW em vez de Wi-Fi, Bluetooth ou MQTT.
- Como funciona a comunicação entre placas ESP32.
- O que são broadcast, unicast e peers.
- Quais são as vantagens, limitações e cuidados.
- Como montar um exemplo simples com dois ESP32.
- Erros comuns que atrapalham iniciantes.
Índice
- O que é ESP-NOW?
- Como funciona na prática?
- Broadcast, unicast e peers
- ESP-NOW vs Wi-Fi vs Bluetooth vs MQTT
- Limites importantes
- Projeto maker: botão sem fio com ESP32
- Código básico para Arduino IDE
- Erros comuns
- FAQ
- Kit de publicação SEO
O que é ESP-NOW?
ESP-NOW é um protocolo de comunicação sem fio da Espressif que permite enviar dados diretamente entre dispositivos ESP, como ESP32 e ESP8266, sem necessidade de criar uma rede Wi-Fi tradicional e sem depender de um roteador.
Na prática, ele funciona como uma comunicação direta entre placas. Um ESP32 pode enviar uma pequena mensagem para outro ESP32 usando o endereço MAC do dispositivo destino. Essa mensagem pode representar qualquer coisa: estado de um botão, leitura de sensor, comando para ligar uma luz, pontuação de um jogo, posição de um joystick ou alerta de presença.
Resumo rápido: ESP-NOW é excelente quando você precisa trocar mensagens pequenas, rápidas e diretas entre placas ESP, principalmente em projetos onde não quer depender de internet ou roteador.
Como funciona na prática?
O ESP-NOW usa a parte de rádio Wi-Fi do ESP32, mas não funciona como uma conexão Wi-Fi comum. Você não precisa colocar SSID, senha ou conectar todos os dispositivos a um roteador. Em vez disso, cada placa conversa diretamente com outra usando endereço MAC.
Pense no ESP-NOW como uma conversa curta e objetiva:
- O emissor prepara uma pequena estrutura de dados.
- Ele envia essa estrutura para o MAC de destino.
- O receptor recebe a mensagem em uma função callback.
- O código decide o que fazer com os dados recebidos.
Broadcast, unicast e peers
Para começar com ESP-NOW, é importante entender três conceitos: broadcast, unicast e peer.
Broadcast
No broadcast, uma placa envia uma mensagem para o endereço especial FF:FF:FF:FF:FF:FF. Isso significa: “quem estiver ouvindo, pode receber”. É muito útil para testes, descoberta de dispositivos e situações em que você quer enviar o mesmo comando para vários ESP32.
Unicast
No unicast, a mensagem é enviada para um MAC específico. É mais organizado quando você sabe exatamente qual placa deve receber o comando.
Peer
Peer é o dispositivo registrado como destino da comunicação. Em muitos exemplos com Arduino IDE, você adiciona um peer com esp_now_add_peer(), informando o MAC do receptor, canal e se haverá criptografia.
Quando vale a pena usar ESP-NOW?
O ESP-NOW é uma excelente escolha quando você precisa de comunicação rápida, simples e local entre placas. Ele é especialmente interessante quando os dados são pequenos e não precisam passar por um servidor.
Exemplos de uso
- Controle remoto com ESP32.
- Rede de sensores sem roteador.
- Robôs que trocam comandos entre módulos.
- Alvos eletrônicos para airsoft ou jogos maker.
- Botões sem fio para automação.
- Monitoramento de portas, janelas ou presença.
- Comunicação entre dispositivos em uma bancada ou oficina.
- Projetos com bateria, onde simplicidade e rapidez importam.
ESP-NOW vs Wi-Fi vs Bluetooth vs MQTT
O ESP-NOW não substitui tudo. Ele é ótimo para certos cenários, mas não é a solução ideal para todos os projetos. A tabela abaixo ajuda a escolher melhor.
| Comunicação | Precisa de roteador? | Ideal para | Ponto forte | Limitação |
|---|---|---|---|---|
| ESP-NOW | Não | Mensagens rápidas entre ESP32/ESP8266 | Baixa latência e simplicidade | Pacotes pequenos e ecossistema limitado a ESP |
| Wi-Fi tradicional | Sim | Internet, APIs, dashboards e servidores | Integração ampla | Mais configuração e maior consumo |
| Bluetooth BLE | Não | Celular, beacons e sensores próximos | Baixo consumo | Modelo mais complexo para iniciantes |
| MQTT | Normalmente sim | IoT com broker, Home Assistant e internet | Escalável e organizado | Depende de rede e broker |
Dica do ArcadeMakerBR: se a comunicação é local, curta e direta entre ESP32, comece pensando em ESP-NOW. Se precisa de dashboard, histórico, Home Assistant ou internet, provavelmente MQTT será melhor.
Limites importantes do ESP-NOW
Como toda tecnologia, o ESP-NOW também tem limites. Segundo a documentação da Espressif, o ESP-NOW trabalha com pacotes pequenos, pares registrados e comunicação baseada em frames específicos do Wi-Fi. Em versões comuns do ESP-IDF, o limite típico de dados por envio é de até 250 bytes para ESP-NOW v1.0, e a quantidade de peers também não é infinita.
Principais cuidados
- Pacotes pequenos: use ESP-NOW para comandos e leituras, não para arquivos grandes.
- Mesmo canal: dispositivos precisam estar no canal Wi-Fi correto para conversar.
- MAC correto: se o endereço MAC estiver errado, a mensagem não chega.
- Ambiente interfere: paredes, distância e ruído de 2.4 GHz afetam o alcance.
- Criptografia exige configuração: se usar segurança, configure corretamente as chaves.
Como pensar em uma arquitetura ESP-NOW
Existem várias formas de organizar um projeto com ESP-NOW. A mais simples é ponto a ponto: uma placa envia e outra recebe. Depois, você pode evoluir para um modelo com vários sensores enviando para uma central.
Projeto maker: botão sem fio com ESP32
Vamos imaginar um projeto simples: um botão sem fio. Quando você pressiona um botão no ESP32 emissor, ele envia uma mensagem para outro ESP32. O receptor pode acender um LED, ativar um relé, iniciar uma contagem ou disparar qualquer ação.
Materiais necessários
- 2 placas ESP32.
- 1 botão.
- 1 LED com resistor ou módulo relé.
- Jumpers.
- Arduino IDE com suporte ao ESP32 instalado.
Funcionamento
- O emissor lê o botão.
- Quando o botão é pressionado, envia uma estrutura com
estado = 1. - O receptor recebe a estrutura.
- Se
estadofor 1, liga o LED ou ativa uma saída.
Código básico para Arduino IDE
Antes de usar o código, você precisa descobrir o MAC do ESP32 receptor. No Arduino IDE, pode usar WiFi.macAddress() para imprimir o MAC no Monitor Serial.
Emissor ESP32
#include <esp_now.h>
#include <WiFi.h>
// Troque pelo MAC do ESP32 receptor
uint8_t macReceptor[] = {0x24, 0x6F, 0x28, 0xAA, 0xBB, 0xCC};
const int pinoBotao = 4;
typedef struct mensagem_espnow {
int estado;
int contador;
} mensagem_espnow;
mensagem_espnow dados;
int contador = 0;
void aoEnviar(const uint8_t *mac_addr, esp_now_send_status_t status) {
Serial.print("Status do envio: ");
Serial.println(status == ESP_NOW_SEND_SUCCESS ? "Sucesso" : "Falhou");
}
void setup() {
Serial.begin(115200);
pinMode(pinoBotao, INPUT_PULLUP);
WiFi.mode(WIFI_STA);
if (esp_now_init() != ESP_OK) {
Serial.println("Erro ao iniciar ESP-NOW");
return;
}
esp_now_register_send_cb(aoEnviar);
esp_now_peer_info_t peerInfo = {};
memcpy(peerInfo.peer_addr, macReceptor, 6);
peerInfo.channel = 0;
peerInfo.encrypt = false;
if (esp_now_add_peer(&peerInfo) != ESP_OK) {
Serial.println("Erro ao adicionar peer");
return;
}
}
void loop() {
if (digitalRead(pinoBotao) == LOW) {
contador++;
dados.estado = 1;
dados.contador = contador;
esp_err_t resultado = esp_now_send(macReceptor, (uint8_t *) &dados, sizeof(dados));
if (resultado == ESP_OK) {
Serial.println("Mensagem enviada");
} else {
Serial.println("Erro no envio");
}
delay(500);
}
}
Receptor ESP32
#include <esp_now.h>
#include <WiFi.h>
const int pinoLed = 2;
typedef struct mensagem_espnow {
int estado;
int contador;
} mensagem_espnow;
mensagem_espnow dadosRecebidos;
void aoReceber(const esp_now_recv_info_t *info, const uint8_t *dados, int tamanho) {
memcpy(&dadosRecebidos, dados, sizeof(dadosRecebidos));
Serial.print("Estado recebido: ");
Serial.println(dadosRecebidos.estado);
Serial.print("Contador: ");
Serial.println(dadosRecebidos.contador);
if (dadosRecebidos.estado == 1) {
digitalWrite(pinoLed, !digitalRead(pinoLed));
}
}
void setup() {
Serial.begin(115200);
pinMode(pinoLed, OUTPUT);
WiFi.mode(WIFI_STA);
if (esp_now_init() != ESP_OK) {
Serial.println("Erro ao iniciar ESP-NOW");
return;
}
esp_now_register_recv_cb(aoReceber);
}
void loop() {
// O receptor trabalha através do callback aoReceber
}
Atenção: algumas versões antigas das bibliotecas ESP32 usavam uma assinatura diferente para o callback de recepção. Se der erro na função aoReceber, verifique a versão do core ESP32 instalado na Arduino IDE.
Erros comuns com ESP-NOW
1. Usar o MAC errado
Esse é o erro campeão. Se o MAC do receptor estiver errado, nada funciona. Copie o endereço com atenção e mantenha o formato hexadecimal correto.
2. Esquecer o modo Wi-Fi
Antes de iniciar o ESP-NOW, configure o modo Wi-Fi:
WiFi.mode(WIFI_STA);
3. Enviar estruturas diferentes
O emissor e o receptor precisam usar a mesma estrutura de dados. Se um lado envia int e float, o outro precisa receber exatamente no mesmo formato.
4. Mandar dados demais
ESP-NOW não foi feito para enviar imagens, arquivos ou grandes textos. Use para comandos e pacotes pequenos.
5. Não pensar no canal Wi-Fi
Quando mistura ESP-NOW com Wi-Fi tradicional, o canal pode causar problemas. Se a placa estiver conectada a um roteador em determinado canal, os peers precisam estar compatíveis com esse canal.
Boas práticas
- Use estruturas pequenas e simples.
- Inclua um campo de identificação do dispositivo.
- Inclua contador ou número de sequência para depuração.
- Evite delays muito longos em callbacks.
- Teste primeiro com duas placas próximas.
- Depois aumente a distância gradualmente.
- Use alimentação estável, principalmente com ESP32 e módulos externos.
ESP-NOW é seguro?
O ESP-NOW pode usar criptografia, mas isso precisa ser configurado corretamente. Para projetos simples na bancada, muita gente começa sem criptografia. Para projetos reais, principalmente envolvendo fechaduras, alarmes, acesso físico ou comandos sensíveis, é importante estudar criptografia, validação do remetente e proteção contra comandos falsos.
Mesmo com criptografia, pense sempre em camadas de segurança. Não envie comandos críticos sem validação. Se um dispositivo recebe um comando para abrir uma porta ou desligar algo importante, o código deve verificar se a mensagem veio de um dispositivo autorizado.
Quando NÃO usar ESP-NOW?
Evite ESP-NOW quando o projeto precisa de internet, dashboard remoto, histórico de dados em servidor ou integração direta com muitas plataformas externas. Nesses casos, MQTT, HTTP ou WebSocket podem ser mais adequados.
- Se precisa enviar dados para nuvem, use Wi-Fi + MQTT/HTTP.
- Se precisa comunicar com celular, considere BLE ou Wi-Fi.
- Se precisa de dashboard Home Assistant, MQTT costuma ser melhor.
- Se precisa de longas distâncias, considere LoRa.
Resumo rápido
| Melhor uso | Comunicação rápida entre placas ESP |
| Precisa de internet? | Não |
| Precisa de roteador? | Não |
| Ideal para iniciantes? | Sim, depois de entender MAC e estruturas |
| Serve para arquivos grandes? | Não |
FAQ — Perguntas frequentes
ESP-NOW funciona sem Wi-Fi?
Ele usa o rádio Wi-Fi do ESP32, mas não precisa conectar a uma rede Wi-Fi tradicional nem a um roteador.
ESP-NOW funciona com ESP8266?
Sim, o ESP-NOW também é usado com ESP8266, embora muitos projetos modernos prefiram ESP32 pela maior flexibilidade e recursos.
Posso usar ESP-NOW e Wi-Fi ao mesmo tempo?
Sim, é possível em alguns cenários, mas é preciso cuidado com o canal Wi-Fi. Esse é um ponto que costuma causar confusão em projetos mistos.
Qual é o alcance do ESP-NOW?
Depende da placa, antena, alimentação e ambiente. Em local aberto pode ser bem interessante, mas paredes e ruído em 2.4 GHz reduzem bastante o desempenho.
ESP-NOW é melhor que MQTT?
Não é uma questão de melhor ou pior. ESP-NOW é ótimo para comunicação direta e local. MQTT é melhor quando existe broker, dashboard, automação centralizada e integração com outros sistemas.
Conclusão
O ESP-NOW é uma das ferramentas mais interessantes para quem trabalha com ESP32 e projetos maker. Ele permite comunicação rápida, direta e sem roteador, o que abre portas para controles remotos, sensores sem fio, robôs, automação local e dispositivos alimentados por bateria.
Para iniciantes, o melhor caminho é começar com dois ESP32: um emissor e um receptor. Depois que entender MAC, peers, estruturas e callbacks, você pode evoluir para projetos com vários dispositivos, sensores e uma central de controle.
Se você está construindo projetos com ESP32, vale muito a pena dominar ESP-NOW. Ele não substitui MQTT, Wi-Fi ou BLE, mas ocupa um espaço muito especial: comunicação local, rápida e simples entre placas.
Leia também
- Tudo sobre ESP32
- Tudo sobre MQTT
- Tudo sobre Bluetooth BLE no ESP32
- Tudo sobre OTA no ESP32
- Tudo sobre Deep Sleep no ESP32
Kit de publicação SEO
Título SEO: Tudo sobre ESP-NOW: Guia Completo para Iniciantes com ESP32
Slug recomendado: tudo-sobre-esp-now-guia-iniciantes-esp32
Descrição de pesquisa: Aprenda tudo sobre ESP-NOW, o protocolo de comunicação sem fio da Espressif para ESP32 e ESP8266. Veja como funciona, quando usar, vantagens, limitações, código exemplo e aplicações maker.
Etiquetas: ESP32, ESP-NOW, ESP8266, Arduino, IoT, Maker, Eletrônica, Robótica, Wireless, Sensores, Automação, Comunicação sem fio
Categoria sugerida: ESP32 Academy
Texto ALT da capa: Tudo sobre ESP-NOW - guia para iniciantes com ESP32 e comunicação sem fio
