En este proyecto me gustaría comunicar dos modulos esp32 con diferentes sensores y poder ver el resultado en una pantalla. Para realizar este trabajo estoy utilizando los siguientes componentes:
Placa ESP32 en el modulo «Doit esp32 Devkit v1»
Este modulo basado en ESP32 lo estamos haciendo trabajar via Wifi, utilizando el protocolo «esp-now». La distancia entre modulos puede recorrer mas de 100 metros, y el protocolo «esp-now» es bastante rápido y tiene un consumo bajo de energía.
Entre algunas caracteristicas de este modulo podemos destacar:
- Tensión de alimentación – de 5 Voltios a 12 Voltios (DC).
- Voltaje de salida – 3.3 Voltios (DC).
- Pines entrada salida digital (DIO) – 25.
- Pines de entrada analogico (ADC) – 6.
- Pines de salida analogica (DAC) – 2.
- Consumo en el arranque – 300 mA aprox a 5 voltios.
En nuestro ejemplo utilizamos la entrada GPIO14 del modulo ESP32 (emisor de la señal wifi al otro modulo),para leer el valor del detector de movimiento HC SR501, esta señal proporcionada por el detector es digital con un voltaje de 3.3 voltios.
El otro modulo ESP32 es el recibe la señal wifi y acciona el relé, en este modulo utilizamos el pin GPIO14 como salida de señal digital a 3.3 voltios.
Puedes consultar esta página para conocer otros detalles de una placa parecida a esta versión en : https://www.infootec.net/nodemcu-esp32/
Sensor de movimiento infrarrojos HC SR501
El sensor de movimiento HC SR501 en este ejemplo esta ajustado con la distancia minima de unos 3 metros, un tiempo de 10 segundos aproximadamente y el jumper esta puesto en la posición «H». Puedes encontrar la definición de todas estas funciones en la pagina : https://www.infootec.net/sensor-de-movimiento-hc-sr501/.
Entre las caracteristicas principales de este detector tenemos:
- Tención de alimentación – 5 voltios.
- Tensión de la señal – 3.3 voltios.
- Corriente de consumo en reposo – 65 microAmperios.
- Corriente de trabajo – 2 mA.
- Angulo de detección – 120 grados.
Fuente de alimentación 3.3 voltios – 5 voltios
La fuente de alimentación utilizada es parecida al modelo » MB102″, entre las principales características de esta fuente de alimentación tenemos:
- Tensión de entrada – 6.5 a 12 Voltios.
- Salida de voltaje – 3.3 y 5 voltios según posición ajustada con el jumper.
- Salida de voltaje USB – 5 voltios.
- corriente máxima – 700 mA.
- Potencia – 2.3 a 3.5 W
Rele SRD05
El rele utilizado en el ejemplo es el relé «SRD05», el rele dispone de un contacto abierto y un contacto cerrado. En este ejemplo utilizamos el contacto abierto para que cuando reciba señal se cierre el contacto y de tensión a la lampara.
Características del rele:
- Tensión de contactos : hasta 240 voltios en alterna y 28 voltios en continua.
- Corriente soportada por los contactos – 10 amperios.
- Tensión de la señal – 3.3 voltios en DC.
- Tensión de alimentación : 5 voltios en DC.
- Consumo de corriente de la placa : 3 mA.
En la siguiente página encontraras mas información: https://www.infootec.net/rele-5v/
Resto de materiales utilizados:
Lampara de 40 W de potencia, dos protoboards, dos condensadores de 10 microFaradios y varios cables de conexión.
Código de programación del receptor ESP32:
#include <Arduino.h>
#include <esp_now.h>
#include <WiFi.h>
const int pin14 = 14;
const int led = 2;
int det = 0; //si detecta envia un uno
typedef struct struct_message{
char a[32];
int b;
} struct_message;
struct_message myData;
void OnDataRecv(const uint8_t *mac, const uint8_t *incomingData, int len){
memcpy(&myData, incomingData, sizeof(myData));
}
void setup(){
Serial.begin(9200);
pinMode(led, OUTPUT);
pinMode(pin14, OUTPUT);
digitalWrite(led,LOW);
digitalWrite(pin14,LOW);
WiFi.mode(WIFI_STA);
if(esp_now_init() != ESP_OK){
Serial.println("Error iniciando ESP_NOW");
return;
}
}
void loop(){
esp_now_register_recv_cb(OnDataRecv);
det = myData.b;
if (det == 0){
digitalWrite(pin14, LOW);
digitalWrite(led, LOW);
}else if (det == 1){
digitalWrite(pin14, HIGH);
digitalWrite(led, HIGH);
delay(900000);
}
delay(2000);
}
Código de programación del emisor ESP32:
#include <Arduino.h>
#include "WiFi.h"
#include <esp_now.h>
//parametros del hc sr501
const int led = 2;
const int pir = 14;
int det = 0; //si detecta envia un uno
//parametros del envio
uint8_t broadcastAddress[] = {0x30, 0xAE, 0xA4, 0x04, 0x10, 0x3C};
typedef struct struct_message {
char a[32];
int b;
} struct_message;
struct_message myData;
esp_now_peer_info_t peerInfo;
void OnDataSent(const uint8_t *mac_addr, esp_now_send_status_t status){
Serial.print("\r\nLast Packet Send Status:\t");
Serial.println(status == ESP_NOW_SEND_SUCCESS ? "Delivery Success" : "Delivery Fail");
}
void setup(){
Serial.begin(9200);
//parametros del hc sr501
pinMode(led, OUTPUT);
pinMode(pir, INPUT);
digitalWrite(led, LOW);
WiFi.mode(WIFI_STA);
if(esp_now_init() != ESP_OK){
Serial.println("Error inicializando ESP-NOW");
return;
}
esp_now_register_send_cb(OnDataSent);
memcpy(peerInfo.peer_addr, broadcastAddress, 6);
peerInfo.channel = 0;
peerInfo.encrypt = false;
if(esp_now_add_peer(&peerInfo) != ESP_OK){
Serial.println("Fallo al añadir peer");
return;
}
}
void loop(){
if (digitalRead(pir) == LOW){
det = 0;
digitalWrite(led,LOW);
}
if (digitalRead(pir) == HIGH){
det = 1;
digitalWrite(led,HIGH);
}
strcpy(myData.a, "Esto es un caracter");
myData.b = det;
esp_now_register_send_cb(OnDataSent);
esp_err_t result = esp_now_send(broadcastAddress, (uint8_t *) &myData, sizeof(myData));
if(result == ESP_OK){
Serial.println("enviado con exito");
}
else{
Serial.println("fallo en el envio");
}
delay(2000);
}
En el video siguiente podemos ver trabajando estos componentes :
Deja una respuesta Cancelar la respuesta