ESP-NOW com ESP32-C3 e ESP32: Comunicação Sem Wi-Fi na Prática
ESP-NOW com ESP32-C3 e ESP32: Guia Completo para Iniciantes
O ESP-NOW é uma das formas mais rápidas e simples de fazer duas placas Espressif Systems trocarem informações sem usar roteador Wi-Fi ou internet.
Neste tutorial você aprenderá:
- O que é e como funciona o ESP-NOW
- Como descobrir o endereço MAC do receptor
- Como configurar a Serial do ESP32-C3 Super Mini com USB CDC On Boot
- Código do transmissor com botão
- Código do receptor com LED
- Ligações do circuito
O que é ESP-NOW?
O ESP-NOW é um protocolo proprietário da Espressif que permite comunicação direta entre dispositivos ESP.
Características principais
- Não precisa de roteador
- Não precisa de internet
- Comunicação muito rápida
- Baixa latência
- Baixo consumo de energia
- Fácil de programar
Como Funciona o ESP-NOW?
O funcionamento é bastante simples:
- Cada ESP possui um endereço único chamado MAC Address.
- O transmissor conhece o MAC do receptor.
- O transmissor envia pequenos pacotes de dados.
- O receptor recebe esses dados instantaneamente.
- Uma função de callback processa as informações recebidas.
Exemplo prático
![]() |
| Esquema de ligação usando ESP-NOW: o ESP32-C3 SuperMini envia o comando sem fio ao ESP32 DevKit, que acende um LED conectado ao GPIO2 quando o botão é pressionado. |
Vantagens do ESP-NOW
- Muito mais simples que Wi-Fi tradicional
- Excelente para robôs e controles remotos
- Comunicação praticamente instantânea
- Não ocupa a rede doméstica
Aplicações Práticas
- Carrinhos robóticos
- Sensores sem fio
- Automação residencial
- Joysticks remotos
- Estações meteorológicas
O que é o MAC Address?
O MAC Address é um identificador único de cada placa ESP.
Exemplo:
![]() |
O transmissor precisa desse endereço para saber para onde enviar os dados.
Atenção ao MAC Address no ESP-NOW
Um detalhe muito importante no ESP-NOW é a forma correta de escrever o MAC Address dentro do código.
Cada parte do MAC precisa ter 0x na frente, porque o ESP32 interpreta esses valores como números hexadecimais.
Exemplo do MAC
O ESP pode mostrar no Monitor Serial algo assim:
24:6F:28:AA:BB:CC
Esse formato serve apenas para visualização.
Como Deve Ficar no Código
Dentro do código do transmissor, o MAC precisa ser escrito desta forma:
uint8_t receiverMAC[] = { 0x24, 0x6F, 0x28,0xAA, 0xBB, 0xCC };
Por Que Usamos 0x?
O 0x informa ao compilador que aquele número está em hexadecimal (base 16).
Sem isso, o ESP32 pode interpretar os valores de forma errada e a comunicação ESP-NOW não funcionará.
Exemplo ERRADO
24, 6F, 28, AA, BB, CC
Esse formato causa erro porque letras como F e A só existem em hexadecimal.
Exemplo CORRETO
0x24, 0x6F, 0x28, 0xAA, 0xBB, 0xCC
Conversão Simples
| MAC mostrado | Código |
|---|---|
| 24 | 0x24 |
| 6F | 0x6F |
| AA | 0xAA |
| CC | 0xCC |
Resumo Rápido
-
O MAC Address aparece separado por
: - No código, usamos vírgulas
-
Cada valor precisa começar com
0x - O formato correto é obrigatório no ESP-NOW
Dica
Sempre copie o MAC mostrado no Serial Monitor e apenas:
-
Troque
:por, -
Adicione
0xna frente de cada bloco
Pronto! O ESP-NOW já conseguirá encontrar o receptor corretamente.
Como Descobrir o MAC do Receptor
Grave este código no ESP32 DevKit V1: -> Receptor
/*********************************************************************** * Projeto : Mostrar MAC Address do ESP32 * Função : Exibe o endereço MAC no Monitor Serial * Placa : ESP32 DevKit V1 * Autor : RodRobot ***********************************************************************/ #include <WiFi.h> void setup() { Serial.begin(115200); // Inicia Serial delay(1000); // Aguarda estabilizar WiFi.mode(WIFI_STA); // Modo Station WiFi.disconnect(); // Garante inicialização completa delay(500); // Pequena espera Serial.print("MAC Address: "); Serial.println(WiFi.macAddress()); } void loop() { }
Resultado esperado
MAC Address: 24:6F:28:AA:BB:CC
Configurando a Serial do ESP32-C3 (USB CDC On Boot)
Em algumas placas ESP32-C3, o Monitor Serial não mostra mensagens sem habilitar a opção correta.
Na Arduino IDE:
- Ferramentas -> Selecione a placa ESP32C3 Dev Module.
- Vá em Tools (Ferramentas).
- Encontre USB CDC On Boot.
- Selecione Enabled.
- Compile e grave novamente.
![]() |
Isso permite que o Serial.begin(115200); funcione pela USB nativa.
Código do Receptor (ESP32 30 pinos)
/*********************************************************************** * Projeto : ESP-NOW Receptor Simples * Função : Recebe o estado do botão e liga/desliga um LED * Placa : ESP32 DevKit V1 (30 pinos) * Autor : RodRobot ***********************************************************************/ #include <WiFi.h> // Biblioteca Wi-Fi #include <esp_now.h> // Biblioteca ESP-NOW #define LED_PIN 2 // Pino do LED bool ledState = false; // Variável que armazena o estado recebido // Função chamada automaticamente quando um dado é recebido void OnDataRecv(const esp_now_recv_info *info, const uint8_t *data, int len) { memcpy(&ledState, data, sizeof(ledState)); // Copia dado recebido digitalWrite(LED_PIN, ledState); // Atualiza o LED } void setup() { pinMode(LED_PIN, OUTPUT); // Configura pino do LED digitalWrite(LED_PIN, LOW); // Inicia com LED apagado WiFi.mode(WIFI_STA); // Wi-Fi em modo Station esp_now_init(); // Inicializa ESP-NOW esp_now_register_recv_cb(OnDataRecv); // Registra callback } void loop() { // Nada a fazer aqui }
Código do Transmissor (ESP32-C3)
Substitua o MAC pelo endereço encontrado no receptor.
MAC Address: 24:6F:28:AA:BB:CC
0x24, 0x6F, 0x28, 0xAA, 0xBB, 0xCC
/*********************************************************************** * Projeto : ESP-NOW Transmissor Simples * Função : Envia o estado do botão para ligar/desligar LED remoto * Placa : ESP32-C3 Super Mini * Autor : RodRobot ***********************************************************************/ #include <WiFi.h> // Biblioteca Wi-Fi #include <esp_now.h> // Biblioteca ESP-NOW #define BUTTON_PIN 4 // Pino do botão // MAC Address do ESP32 receptor (ALTERAR!) uint8_t receiverMAC[] = { 0x24, 0x6F, 0x28, 0xAA, 0xBB, 0xCC}; bool buttonState = false; // Estado do botão esp_now_peer_info_t peerInfo; // Estrutura do peer void setup() { pinMode(BUTTON_PIN, INPUT_PULLUP); // Botão com pull-up interno WiFi.mode(WIFI_STA); // Wi-Fi em modo Station esp_now_init(); // Inicializa ESP-NOW memcpy(peerInfo.peer_addr, receiverMAC, 6); // Copia MAC peerInfo.channel = 0; // Canal automático peerInfo.encrypt = false; // Sem criptografia esp_now_add_peer(&peerInfo); // Adiciona receptor } void loop() { buttonState = !digitalRead(BUTTON_PIN); // Pressionado = true esp_now_send(receiverMAC, (uint8_t *)&buttonState, sizeof(buttonState)); // Envia estado delay(100); // Pequeno intervalo }
Ligações do Circuito
Transmissor (ESP32-C3)
![]() |
| Projeto simples usando ESP-NOW entre ESP32-C3 e ESP32: ao pressionar o botão no transmissor, o receptor recebe o comando sem fio e acende o LED conectado ao GPIO2. |
- Botão entre GPIO 4 e GND
Receptor (ESP32)
- LED no GPIO 2 com resistor de 220 Ω (ou LED onboard, se disponível)
Como Funciona o Projeto
- O botão é pressionado no ESP32-C3.
- O transmissor envia
true. - O ESP32 receptor recebe o valor.
- O LED acende.
- Ao soltar o botão, o valor enviado é
false. - O LED apaga.
Bibliotecas Utilizadas
Aplicações Reais
Esse mesmo conceito pode ser usado para:
- Controle de robôs com DRV8833
- Displays OLED SSD1306
- Sensores remotos
- Automação residencial
Conclusão
O ESP-NOW é uma tecnologia extremamente eficiente para comunicação sem fio entre placas ESP32.
Com poucas linhas de código, você consegue criar controles remotos, robôs e sistemas distribuídos com comunicação rápida e confiável.
🔧 Acompanhe o RodRobot
Projetos maker com ESP32, Arduino, eletrônica e programação.
RodRobot – Projetos maker, eletrônica e programação na prática.




Comentários
Postar um comentário