ESP-NOW com ESP32-C3 e ESP32: Comunicação Sem Wi-Fi na Prática


Infográfico vertical mostrando comunicação ESP-NOW entre ESP32-C3 e ESP32 utilizando MAC Address para envio de dados sem fio.

Entenda como funciona o ESP-NOW: cada ESP32 possui um MAC Address único, permitindo que o transmissor envie dados diretamente para o receptor sem roteador e com baixa latência.


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:

  1. Cada ESP possui um endereço único chamado MAC Address.
  2. O transmissor conhece o MAC do receptor.
  3. O transmissor envia pequenos pacotes de dados.
  4. O receptor recebe esses dados instantaneamente.
  5. Uma função de callback processa as informações recebidas.

Exemplo prático

Diagrama mostrando comunicação ESP-NOW entre ESP32-C3 com botão e ESP32 DevKit com LED conectado ao GPIO2.
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:


Infográfico explicando como o ESP32-C3 usa o MAC Address do ESP32 receptor para enviar dados via ESP-NOW e acender um LED remotamente.

Cada ESP32 possui um MAC Address único. No ESP-NOW, o transmissor utiliza o MAC do receptor para enviar dados diretamente, permitindo comunicação rápida e sem roteador entre ESP32-C3 e ESP32.

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 mostradoCódigo
240x24
6F0x6F
AA0xAA
CC0xCC

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:

  1. Troque : por ,
  2. Adicione 0x na 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:

  1. Ferramentas -> Selecione a placa ESP32C3 Dev Module.
  2. Vá em Tools (Ferramentas).
  3. Encontre USB CDC On Boot.
  4. Selecione Enabled.
  5. Compile e grave novamente.
Arduino IDE mostrando a opção USB CDC On Boot ativada para o ESP32-C3 Dev Module.

Configuração do USB CDC On Boot habilitada na Arduino IDE para permitir que o ESP32-C3 envie mensagens corretamente ao Monitor Serial pela USB nativa.


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)

Diagrama de ligação mostrando um ESP32-C3 SuperMini com botão conectado ao GPIO4 enviando comandos via ESP-NOW para um ESP32 DevKit que controla um LED no GPIO2.
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

  1. O botão é pressionado no ESP32-C3.
  2. O transmissor envia true.
  3. O ESP32 receptor recebe o valor.
  4. O LED acende.
  5. Ao soltar o botão, o valor enviado é false.
  6. 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

Postagens mais visitadas deste blog

ESP32 Botão Touch: Como Usar o Sensor Touch (Tutorial com LED e Relé)

ESP32 para Iniciantes: Projeto LED Piscando Passo a Passo