Estudaremos hoje a comunicação bidirecional entre dois ESP32 com ESP-NOW, na IDE do Arduino. Na última postagem vimos uma comunicação unidirecional. Utilizaremos como base este ótimo tutorial do Random Nerd Tutorials. Também um pouco de teoria sobre o ESP-NOW pode ser encontrada no site oficial do Arduino.
Os dois ESP32 que usarei são a minha placa de desenvolvimento com ESP32-C6 e um Beetle ESP32-C3 da DFRobot. Abaixo você pode ver o setup do meu teste, com os dois ESP32. O da esquerda é minha placa de desenvolvimento ESP32-C6, da qual eu vou utilizar o LDR (pino A0) e o LED endereçável neopixel WS2812b (pino D4), ambos onboard. Á direita uma placa ESP32-C3 da DFRobot, linha Beetle com um LED no pino 8 e um sensor óptico (seguidor de linha) no pino 5.

A ideia é que o sensor LDR da minha ESP32-C6 tenha seu valor enviado para a Beetle ESP32-C3 e dimerize o LED. Da mesma forma o sensor óptico da Beetle ESP32-C3 terá seu estado enviado para minha ESP32-C6 e mudará a cor do LED neopixel.
Lembrando que a comunicação ESP-NOW foi desenvolvida pela Espressif, fabricante dos chip ESP8266/ESP32. Ela pode ocorrer tanto pelo WiFi como via Bluetooth, porém não necessita de modem nem intermediários, é direto entre chips.
Para começar
O diagrama esquemático da montagem do Beetle ESP32-C3 está abaixo. Não vou desenhar da minha placa ESP32-C6 pois tanto o LDR como o LED endereçável estão onboard.

Conforme executado no post anterior, precisamos conhecer o endereço MAC address das duas ESP32. É um número único que pode ser obtido com o código abaixo; basta fazer upload para cada placa o obserar o monitor serial da IDE do Arduino.
/*
Rui Santos & Sara Santos - Random Nerd Tutorials
Complete project details at https://RandomNerdTutorials.com/get-change-esp32-esp8266-mac-address-arduino/
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files.
The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
*/
#include <WiFi.h>
#include <esp_wifi.h>
void readMacAddress(){
uint8_t baseMac[6];
esp_err_t ret = esp_wifi_get_mac(WIFI_IF_STA, baseMac);
if (ret == ESP_OK) {
Serial.printf("%02x:%02x:%02x:%02x:%02x:%02x\n",
baseMac[0], baseMac[1], baseMac[2],
baseMac[3], baseMac[4], baseMac[5]);
} else {
Serial.println("Failed to read MAC address");
}
}
void setup(){
Serial.begin(115200);
WiFi.mode(WIFI_STA);
WiFi.STA.begin();
Serial.print("[DEFAULT] ESP32 Board MAC Address: ");
readMacAddress();
}
void loop(){
}
Com os endereços MAC em mãos (anote para não perder) podemos seguir para os exemplos de código.





