#include <esp_now.h>
#include <WiFi.h>
// Substitua pelo MAC Address do seu ESP32 Receptor
// (Este endereço deve ser o que você usou no seu código)
uint8_t receiverMacAddress[] = {0x24, 0x0A, 0xC4, 0x00, 0x01, 0x10};
// =======================================================
// ESTRUTURA DE DADOS UNIFICADA (DEVE SER IGUAL AO RECEPTOR)
// =======================================================
// O Receptor espera um array de 4 inteiros (HIGH/LOW) para os LEDs.
// Usar 'int' garante que estamos enviando valores inteiros (4 bytes cada).
typedef struct struct_message {
int ledStates[4];
} struct_message;
struct_message data;
// Definição dos pinos dos botões (baseado nos pinos que você usou)
const int SWITCH_PIN_1 = 15;
const int SWITCH_PIN_2 = 5;
const int SWITCH_PIN_3 = 21;
const int SWITCH_PIN_4 = 23;
// callback quando os dados são enviados
void OnDataSent(const uint8_t *mac_addr, esp_now_send_status_t status)
{
// A MAC address do destinatário não é usada aqui, mas está no parâmetro 'mac_addr'
Serial.print("\r\nStatus do Último Pacote Enviado:\t ");
Serial.println(status == ESP_NOW_SEND_SUCCESS ? "Sucesso" : "Falha");
}
void setup()
{
Serial.begin(115200);
WiFi.mode(WIFI_STA);
// Configura os pinos dos botões como INPUT_PULLUP
// A leitura será LOW quando o botão for pressionado.
pinMode(SWITCH_PIN_1, INPUT_PULLUP);
pinMode(SWITCH_PIN_2, INPUT_PULLUP);
pinMode(SWITCH_PIN_3, INPUT_PULLUP);
pinMode(SWITCH_PIN_4, INPUT_PULLUP);
// Init ESP-NOW
if (esp_now_init() != ESP_OK)
{
Serial.println("Erro ao inicializar ESP-NOW");
return;
}
Serial.println("Sucesso: ESP-NOW inicializado");
esp_now_register_send_cb(OnDataSent);
// Registra o peer (o receptor)
esp_now_peer_info_t peerInfo = {}; // Inicializa a estrutura
memcpy(peerInfo.peer_addr, receiverMacAddress, 6);
peerInfo.channel = 0;
peerInfo.encrypt = false;
// Adiciona o peer (receptor)
if (esp_now_add_peer(&peerInfo) != ESP_OK)
{
Serial.println("Falha ao adicionar peer");
return;
}
Serial.println("Sucesso: Peer adicionado");
}
void loop()
{
// =======================================================
// LEITURA DOS BOTÕES E PREENCHIMENTO DO ARRAY (CORRIGIDO)
// =======================================================
// Usamos o operador '!' (NOT) para inverter a lógica do INPUT_PULLUP:
// Botão Pressionado (digitalRead retorna LOW) -> !LOW = HIGH (Liga LED)
// Botão Solto (digitalRead retorna HIGH) -> !HIGH = LOW (Desliga LED)
data.ledStates[0] = !digitalRead(SWITCH_PIN_1);
data.ledStates[1] = !digitalRead(SWITCH_PIN_2);
data.ledStates[2] = !digitalRead(SWITCH_PIN_3);
data.ledStates[3] = !digitalRead(SWITCH_PIN_4);
// Envio de dados
esp_err_t result = esp_now_send(receiverMacAddress, (uint8_t *) &data, sizeof(data));
// Mensagens de debug para o envio
if (result == ESP_OK)
{
Serial.println("Enviado com sucesso");
}
else
{
Serial.println("Erro ao enviar dados");
}
// Um pequeno atraso é essencial para não sobrecarregar a rede ESP-NOW e o serial
delay(30);
}