Avançar para o conteúdo

Comunicação bidirecional entre dois ESP32 com ESP-NOW

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.

ESP-NOW entre ESP32-C6 e ESP32-C3
Setup do teste para comunicação bidirecional ESP-NOW

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.

Esquema de ligação da placa ESP32-C3
Esquema de ligação da placa ESP32-C3

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.

O código

Deixe um comentário

O seu endereço de email não será publicado. Campos obrigatórios marcados com *