
Código de la placa que recibe la señal y enciende el rele que activa las lamparas
#include <Arduino.h>
#include <WiFi.h>
#include <esp_now.h>
uint8_t broadcastAddress[] = {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF};
const int rele = 14;
typedef struct struct_message {
int a;
} struct_message;
// Se crean dos variables con tipo estructura myData
struct_message myDataRec;
struct_message myDataSen;
esp_now_peer_info_t peerInfo;
// Llamada para el envio del mensaje
void OnDataSent(const uint8_t *mac_addr, esp_now_send_status_t status) {
}
// Funcion que recibe el mensaje
void OnDataRecv(const uint8_t * mac, const uint8_t *incomingData, int len) {
memcpy(&myDataRec, incomingData, sizeof(myDataRec));
if (myDataRec.a==2){
digitalWrite(rele,HIGH);
Serial.println("Estoy en 2");
} else {
digitalWrite(rele,LOW);
Serial.println("Estoy en 0");
}
}
void setup() {
// Iniciar Serial Monitor
Serial.begin(9600);
pinMode(rele, OUTPUT);
// Configuracion del modo Wi-Fi
WiFi.mode(WIFI_STA);
// Iniciar ESP-NOW
if (esp_now_init() != ESP_OK) {
Serial.println("Error initializing ESP-NOW");
return;
}
// Funcion para enviar el mensaje
esp_now_register_send_cb(OnDataSent);
//Este apartado del peer es util para enviar el 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;
}
// Funcion para recibir el mensaje
esp_now_register_recv_cb(OnDataRecv);
}
void loop() {
}
Código de la placa que envía la señal cuando el detector de movimiento detecta presencia
#include <Arduino.h>
#include <WiFi.h>
#include <esp_now.h>
uint8_t broadcastAddress[] = {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF};
const int pir = 14;
//Tipo de dato estructura
typedef struct struct_message {
int a;
} struct_message;
// Crear dos datos con el formato estructura
struct_message myDataRec;
struct_message myDataSen;
esp_now_peer_info_t peerInfo;
// Funcion para enviar datos
void OnDataSent(const uint8_t *mac_addr, esp_now_send_status_t status) {
}
// Esta funcion se ejecuta cuando se recibe el dato
void OnDataRecv(const uint8_t * mac, const uint8_t *incomingData, int len) {
memcpy(&myDataRec, incomingData, sizeof(myDataRec));
Serial.print("Bytes received: ");
Serial.println(len);
Serial.print("Int: ");
Serial.println(myDataRec.a);
Serial.println();
}
void setup() {
//Datos para la comunicacion Monitor Serie
Serial.begin(9600);
pinMode(pir, INPUT);
// Configuracion del modo Wifi
WiFi.mode(WIFI_STA);
// Inicializa el protocolo esp-now
if (esp_now_init() != ESP_OK) {
Serial.println("Error initializing ESP-NOW");
return;
}
// Funcion para recibir el paquete
esp_now_register_recv_cb(OnDataRecv);
// Funcion para el envio de datos
esp_now_register_send_cb(OnDataSent);
//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() {
if (digitalRead(pir) == HIGH){
for (int i=0;i<100;i++){
Serial.println("Esto vale la i:");
Serial.println(i);
// Set values to send
myDataSen.a = 2;
// Enviar el mensaje ESP-NOW
esp_err_t result = esp_now_send(broadcastAddress, (uint8_t *) &myDataSen, sizeof(myDataSen));
delay(2000);
if(digitalRead(pir)==HIGH){i=0;}
}
} else {
Serial.println("ahora envio 0");
myDataSen.a=0;
esp_err_t result = esp_now_send(broadcastAddress, (uint8_t *) &myDataSen, sizeof(myDataSen));
}
delay(2000);
}
Video explicando el funcionamiento de las placas:
Deja una respuesta Cancelar la respuesta