Este es el esquema de la placa que envía el mensaje:
Este es el esquema de la placa que recibe el mensaje y enciende el led:
Este es el código de la placa que envía el mensaje:
#include <Arduino.h>
#include <WiFi.h>
#include <esp_now.h>
uint8_t broadcastAddress[] = {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF};
const int pulsador = 12;
// Structure example to receive data
typedef struct struct_message
{
int a;
} struct_message;
// Create a struct_message called myData
struct_message myDataSen;
esp_now_peer_info_t peerInfo;
// callback when data is sent
void OnDataSent(const uint8_t *mac_addr, esp_now_send_status_t status)
{
}
void setup()
{
// Initialize Serial Monitor
Serial.begin(9600);
pinMode(pulsador, INPUT_PULLDOWN);
// Set device as a Wi-Fi Station
WiFi.mode(WIFI_STA);
// Init ESP-NOW
if (esp_now_init() != ESP_OK)
{
Serial.println("Error initializing ESP-NOW");
return;
}
// Once ESPNow is successfully Init, we will register for Send CB to get the status of Trasnmitted packet
esp_now_register_send_cb(OnDataSent);
// Register peer. Este apartado del peer es utilizado para el envio del paquete
memcpy(peerInfo.peer_addr, broadcastAddress, 6);
peerInfo.channel = 0;
peerInfo.encrypt = false;
// Add peer
if (esp_now_add_peer(&peerInfo) != ESP_OK)
{
Serial.println("Failed to add peer");
return;
}
}
void loop()
{
while (digitalRead(pulsador) == HIGH)
{
myDataSen.a = 2;
// Send message via ESP-NOW
esp_err_t result = esp_now_send(broadcastAddress, (uint8_t *)&myDataSen, sizeof(myDataSen));
}
if (digitalRead(pulsador) == LOW)
{
myDataSen.a = 3;
// Send message via ESP-NOW
esp_err_t result = esp_now_send(broadcastAddress, (uint8_t *)&myDataSen, sizeof(myDataSen));
}
}
Este es el código de la placa que recibe el mensaje:
#include <Arduino.h>
#include <WiFi.h>
#include <esp_now.h>
const int led = 14;
// Structure example to send data
// Must match the receiver structure
typedef struct struct_message
{
int a;
} struct_message;
// Create a struct_message called myData
struct_message myDataRec;
// callback function that will be executed when data is received
void OnDataRecv(const uint8_t *mac, const uint8_t *incomingData, int len)
{
memcpy(&myDataRec, incomingData, sizeof(myDataRec));
if (myDataRec.a == 2)
{
digitalWrite(led, HIGH);
}
if (myDataRec.a == 3)
{
digitalWrite(led, LOW);
}
}
void setup()
{
// Init Serial Monitor
Serial.begin(9600);
pinMode(led, OUTPUT);
// Set device as a Wi-Fi Station
WiFi.mode(WIFI_STA);
// Init ESP-NOW
if (esp_now_init() != ESP_OK)
{
Serial.println("Error initializing ESP-NOW");
return;
}
// Once ESPNow is successfully Init, we will register for recv CB to get recv packer info
esp_now_register_recv_cb(OnDataRecv);
}
void loop()
{
}
El video con una pequeña descripción lo podeis ver en:
Deja una respuesta Cancelar la respuesta