Imagínate poder recibir notificaciones en tu correo electrónico cada vez que alguien abra o cierre una puerta en tu hogar. Con la ayuda de un monitor de estado de puerta utilizando ESP8266 NodeMCU y las funcionalidades de IFTTT, esto es totalmente posible. En este artículo, te mostraremos cómo puedes configurar este sistema de notificaciones para mantenerte siempre al tanto de lo que sucede en tu casa. ¡No te lo pierdas!
En este proyecto, monitoreará el estado de una puerta usando una placa ESP8266 NodeMCU y un interruptor de láminas magnético. Recibirás una notificación por correo electrónico cuando la puerta cambie de estado: abierta o cerrada. Las notificaciones por correo electrónico se envían mediante IFTTT y la placa ESP8266 se programa mediante Arduino IDE.
En lugar de enviar notificaciones por correo electrónico mediante IFTTT, puede utilizar un servidor SMTP. Para aprender cómo enviar correos electrónicos a través de un servidor SMTP con su ESP8266, puede seguir el siguiente tutorial:
- ESP8266 NodeMCU Envío de correo electrónico a través de un servidor SMTP: HTML, texto y archivos adjuntos (Arduino)
Si quieres, también puedes enviar notificaciones a tu cuenta de Telegram. Aprenda a usar Telegram con el ESP8266 en el siguiente tutorial:
- Telegrama: Detección de movimiento ESP8266 NodeMCU con notificaciones (Arduino IDE)
Tenemos un tutorial similar para la placa ESP32: Monitor de estado de puerta con notificaciones por correo electrónico (IFTTT)
Descripción del proyecto
En este proyecto, enviará una notificación por correo electrónico cuando una puerta cambie de estado. Para detectar el cambio utilizamos un interruptor de contacto magnético. Usamos IFTTT para enviar un correo electrónico.
Un interruptor de contacto magnético es básicamente un interruptor de láminas alojado en una caja de plástico para que pueda fijarlo fácilmente a una puerta, ventana o cajón para detectar si la puerta está abierta o cerrada.
El circuito se cierra cuando hay un imán cerca del interruptor – puerta cerrada. Si el imán está lejos del interruptor (puerta abierta), el circuito está abierto. Vea la imagen a continuación.
Podemos conectar el interruptor de láminas a un GPIO ESP8266 para detectar cambios en su estado.
Enviar correos electrónicos con IFTTT
Para enviar correos electrónicos con el ESP8266, utilizamos un servicio gratuito* llamado IFTTT, que significa «If This Then That».
IFTTT es una plataforma que le brinda control creativo sobre docenas de productos y aplicaciones. Puedes hacer que las aplicaciones funcionen juntas. Por ejemplo, enviar una solicitud específica a IFTTT activará un subprograma que hace algo como: B. enviarle una notificación por correo electrónico.
Me gusta el servicio IFTTT y una vez que entiendes cómo funciona, es fácil de usar. Sin embargo, no me gusta mucho el diseño del sitio web y el hecho de que cambia constantemente.
*Actualmente en la versión gratuita puedes tener tres applets activos al mismo tiempo.
Creando una cuenta IFTTT
¡Crear una cuenta con IFTTT es gratis!
Ir al sitio web oficial: https://ifttt.com/ y haz clic en eso Empezando en la parte superior de la página o «Registrarse» si ya tiene una cuenta.
Creando un subprograma
Primero necesitas crear un subprograma en IFTTT. Un subprograma conecta dos o más aplicaciones o dispositivos (como el ESP8266 y el envío de un correo electrónico).
Los applets constan de desencadenadores y acciones:
- Desencadenantes Indique a un subprograma que comience. El ESP8266 envía una solicitud (webhooks) que activa el subprograma.
- Comportamiento son el resultado final de la ejecución de un subprograma. En nuestro caso, enviando un correo electrónico.
Siga las siguientes instrucciones para crear su subprograma.
1) Haga clic en este enlace para comenzar a crear un subprograma.
2) Haga clic en eso Agregar Botón.
3) Busque «Webhooks» y selecciónelo.
4) Seleccione la opción “Recibir una solicitud web”.
5) Introduzca el nombre del evento, p.e. b. Estado de la puerta. Puedes darle cualquier otro nombre que desees, pero si lo cambias, también deberás cambiarlo en el código que se proporciona más adelante.
6) Luego haga clic Agregar En el menú Luego eso, haga clic en el botón para seleccionar qué sucede cuando se activa el evento anterior.
7) Buscar Correo electrónico y seleccione la opción de correo electrónico.
8vo) Haga clic en Envíame un correo electrónico.
9) Luego escribe el asunto y el cuerpo del correo electrónico. Puedes mantener el mensaje predeterminado o cambiarlo a tu gusto. El {{Nombre del evento}} es un marcador de posición para el nombre del evento, en este caso es Estado de la puerta. El {{Ocurrió en}} es un marcador de posición para la marca de tiempo de cuando se desencadenó el evento. El {{Valor1}} es un marcador de posición para el estado real de la puerta. Entonces puedes jugar con estos marcadores de posición para escribir tu propio mensaje. Cuando hayas terminado, haz clic Crear acción.
10) Ahora haga clic en Sigue adelante.
11) Finalmente, haga clic Finalizar.
12) Serás redirigido a una página similar, como se muestra a continuación.
Su subprograma se ha creado correctamente. Ahora probémoslo.
Pruebe su subprograma
Vaya a esta URL: https://ifttt.com/maker_webhooks y abre el “documentación» pestaña.
Se le dirigirá a una página web donde podrá activar un evento para probarlo y obtener acceso a su clave API (resaltada en rojo). Guarde su clave API en un lugar seguro ya que la necesitará más adelante.
Ahora activemos el evento para probarlo. En el {Evento} Marcador de posición, escribe el evento que creaste antes. En nuestro caso es Estado de la puerta. Añade también un valor. Valor1 campo, por ejemplo abierto. Luego haga clic intentalo Botón.
Debería recibir un mensaje de éxito que diga «El evento se activó» y recibir un correo electrónico en su bandeja de entrada informándole que el evento se activó.
Si recibió el correo electrónico, su subprograma funcionará como se esperaba. Puedes continuar con la siguiente sección. Programamos el ESP8266 para activar su subprograma cuando la puerta cambia de estado.
Lista de artículos
Aquí está el hardware que necesita para completar este proyecto:
- ESP8266 – leer Las mejores placas de desarrollo Wi-Fi ESP8266
- 1 × interruptor de láminas magnético
- 1 resistencia de 10kΩ
- 1 × placa de pruebas
- Cables de puente
Puedes utilizar los enlaces anteriores o ir directamente MakerAdvisor.com/tools ¡Para encontrar todas las piezas para tus proyectos al mejor precio!
Diagrama de circuito: ESP8266 NodeMCU con interruptor de láminas
Conectamos el interruptor de láminas GPIO4 (D2), pero puedes conectarlo a cualquier GPIO adecuado.
código
Copie el siguiente boceto en su IDE de Arduino. Reemplace el SSID, la contraseña y la clave API IFTTT con sus propias credenciales.
/*********
Rui Santos
Complete project details at https://RandomNerdTutorials.com/door-status-monitor-using-the-esp8266/
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 <ESP8266WiFi.h>
// Set GPIOs for LED and reedswitch
const int reedSwitch = 4;
const int led = 2; //optional
// Detects whenever the door changed state
bool changeState = false;
// Holds reedswitch state (1=opened, 0=close)
bool state;
String doorState;
// Auxiliary variables (it will only detect changes that are 1500 milliseconds apart)
unsigned long previousMillis = 0;
const long interval = 1500;
const char* ssid = "REPLACE_WITH_YOUR_SSID";
const char* password = "REPLACE_WITH_YOUR_PASSWORD";
const char* host = "maker.ifttt.com";
const char* apiKey = "REPLACE_WITH_YOUR_IFTTT_API_KEY";
// Runs whenever the reedswitch changes state
ICACHE_RAM_ATTR void changeDoorStatus() {
Serial.println("State changed");
changeState = true;
}
void setup() {
// Serial port for debugging purposes
Serial.begin(115200);
// Read the current door state
pinMode(reedSwitch, INPUT_PULLUP);
state = digitalRead(reedSwitch);
// Set LED state to match door state
pinMode(led, OUTPUT);
digitalWrite(led, state);
// Set the reedswitch pin as interrupt, assign interrupt function and set CHANGE mode
attachInterrupt(digitalPinToInterrupt(reedSwitch), changeDoorStatus, CHANGE);
// Connect to Wi-Fi
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println("");
Serial.println("WiFi connected");
}
void loop() {
if (changeState){
unsigned long currentMillis = millis();
if(currentMillis - previousMillis >= interval) {
previousMillis = currentMillis;
// If a state has occured, invert the current door state
state = !state;
if(state) {
doorState = "closed";
}
else{
doorState = "open";
}
digitalWrite(led, state);
changeState = false;
Serial.println(state);
Serial.println(doorState);
//Send email
Serial.print("connecting to ");
Serial.println(host);
WiFiClient client;
const int httpPort = 80;
if (!client.connect(host, httpPort)) {
Serial.println("connection failed");
return;
}
String url = "/trigger/door_status/with/key/";
url += apiKey;
Serial.print("Requesting URL: ");
Serial.println(url);
client.print(String("POST ") + url + " HTTP/1.1rn" +
"Host: " + host + "rn" +
"Content-Type: application/x-www-form-urlencodedrn" +
"Content-Length: 13rnrn" +
"value1=" + doorState + "rn");
}
}
}
Debe tener instalado el complemento de placa ESP8266 en su IDE de Arduino. Si no, sigue el siguiente tutorial:
- Cómo instalar la placa ESP8266 en Arduino IDE
Así es como funciona el código
Continúe leyendo para saber cómo funciona el código o salte adelante. demostración Sección.
primero tienes que ESP8266WiFi Biblioteca para permitir que el ESP8266 se conecte a su red para comunicarse con los servicios IFTTT.
#include <ESP8266WiFi.h>
Configure los GPIO para el interruptor de láminas y el LED (el LED integrado es GPIO 2). Encendemos el LED de a bordo cuando la puerta está abierta.
const int reedSwitch = 4;
const int led = 2; //optional
El Cambian de estado La variable booleana indica si la puerta ha cambiado de estado.
bool changeState = false;
El Condición La variable almacena el estado del interruptor de láminas y el Condición de la puertaComo sugiere el nombre, registra el estado de la puerta: cerrada o abierta.
bool state;
String doorState;
Podemos rechazar el interruptor usando las siguientes variables de temporizador. Sólo se tienen en cuenta los cambios entre los que haya al menos 1500 milisegundos.
unsigned long previousMillis = 0;
const long interval = 1500;
Ingrese su SSID y contraseña en las siguientes variables para permitir que el ESP8266 se conecte a Internet.
const char* ssid = "REPLACE_WITH_YOUR_SSID";
const char* password = "REPLACE_WITH_YOUR_PASSWORD";
Agregue su propia clave API IFTTT en el Clave API Variable: la que recibiste Este paso.
const char* apiKey = "REPLACE_WITH_YOUR_IFTTT_API_KEY";
El cambiar estado de puerta() La función se ejecuta cuando se detecta un cambio en el estado de la puerta. Esta función simplemente cambia eso Cambian de estado variable a VERDADERO. Entonces, en Cinta() Nos encargamos de lo que sucede cuando cambia el estado (revirtiendo el estado anterior de la puerta y enviando un correo electrónico).
ICACHE_RAM_ATTR void changeDoorStatus() {
Serial.println("State changed");
changeState = true;
}
configuración()
En el configuración()Inicialice el monitor serie para fines de depuración:
Serial.begin(115200);
Coloque el interruptor de láminas como ENTRADA. Y guarda el estado actual cuando se inicia el ESP8266 por primera vez.
pinMode(reedSwitch, INPUT_PULLUP);
state = digitalRead(reedSwitch);
Configure el LED como PRODUCCIÓN y configure su estado para que coincida con el estado del interruptor de láminas (circuito cerrado y LED apagado; circuito abierto y LED encendido).
pinMode(led, OUTPUT);
digitalWrite(led, state);
- Puerta cerrada –> el ESP8266 lee una señal ALTA –> apaga el LED integrado (envía señal ALTA*)
- Puerta abierta –> el ESP8266 lee una señal BAJA –> enciende el LED integrado (envía una señal BAJA*)
El LED incorporado del ESP8266 funciona con lógica invertida: envía una señal ALTA para apagarlo y una señal BAJA para encenderlo.
Establecer una interrupción
Configure el interruptor de láminas como interrupción.
attachInterrupt(digitalPinToInterrupt(reedSwitch), changeDoorStatus, CHANGE);
Para configurar una interrupción en el IDE de Arduino, use el añadirInterrupción() Función que acepta como argumentos: el pin de interrupción GPIO, el nombre de la función a ejecutar y el modo.
El primer argumento es una interrupción GPIO. Deberías usar digitalPinToInterrupt(GPIO) para configurar el GPIO real como pin de interrupción.
El segundo argumento adjuntointerrupción() función es el nombre de la función que se llama cada vez que se activa la interrupción: la Rutina de Servicio de Interrupción (ISR). En este caso lo es Cambiar estado de puerta Función.
La función ISR debe ser lo más simple posible para que el procesador vuelva rápidamente a ejecutar el programa principal.
El tercer argumento es la moda. lo hemos descontinuado CAMBIAR para activar la interrupción cada vez que el pin cambia su valor, por ejemplo de ALTO a BAJO o de BAJO a ALTO.
Para obtener más información sobre las interrupciones con el ESP8266, lea el siguiente tutorial:
- ESP8266 interrupciones y temporizadores con Arduino IDE (NodeMCU)
Inicializar WLAN
Las siguientes líneas conectan el ESP8266 a WiFi.
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println("");
Serial.println("WiFi connected");
Cinta()
En el Cinta() leeremos esto Cambian de estado Variable y cuando se ha producido un cambio enviamos un correo electrónico vía IFTTT.
Primero verifique si se ha producido un cambio:
if (changeState){
Luego verifique que hayan pasado al menos 1500 milisegundos desde el último cambio de estado.
if(currentMillis - previousMillis >= interval) {
Si es cierto, reinicie el temporizador e invierta el estado actual del interruptor:
state = !state;
Cuando el estado del interruptor de láminas es 1(verdadero), la puerta está cerrada. Así que cambiemos eso puertaEstado variable cerrado.
if(state) {
doorState = "closed";
}
Si se 0(incorrecto), la puerta se abre.
else{
doorState = "open";
}
Configure el estado del LED en consecuencia e imprima el estado de la puerta en el monitor serie.
digitalWrite(led, state);
changeState = false;
Serial.println(state);
Serial.println(doorState);
Finalmente, las siguientes líneas envían una solicitud a IFTTT con el estado actual de la puerta para el evento (Estado de la puerta) que creamos anteriormente.
// Send email
Serial.print("connecting to ");
Serial.println(host);
WiFiClient client;
const int httpPort = 80;
if (!client.connect(host, httpPort)) {
Serial.println("connection failed");
return;
}
String url = "/trigger/door_status/with/key/";
url += apiKey;
Serial.print("Requesting URL: ");
Serial.println(url);
client.print(String("POST ") + url + " HTTP/1.1rn" +
"Host: " + host + "rn" +
"Content-Type: application/x-www-form-urlencodedrn" +
"Content-Length: 13rnrn" +
"value1=" + doorState + "rn");
Cuando IFTTT recibe esta solicitud, se activa la acción de enviar un correo electrónico.
demostración
Después de modificar el boceto para incluir sus credenciales de red y clave API, cárguelo en su ESP8266. Ir a Herramientas > tablón y seleccione su placa ESP8266. Entonces ve a eso Herramientas > Puerto y seleccione el puerto COM al que está conectado el ESP8266.
Abra el monitor serie con una velocidad de baudios de 115200 para verificar si se detectan los cambios y si el ESP8266 puede conectarse a IFTTT.
Para realizar prototipos o realizar pruebas, puede fijar el interruptor de láminas magnético a su puerta con velcro.
Ahora, cuando alguien abra o cierre su puerta, se le notificará por correo electrónico.
Mira el vídeo de demostración
Grabamos este vídeo hace varios años (perdón por la mala calidad).
Envolver
En este tutorial, aprendió cómo activar un evento cuando el interruptor de láminas cambia de estado. Esto puede resultar útil para determinar si una puerta, ventana o cajón se ha abierto o cerrado. También aprendió a usar IFTTT para enviar un correo electrónico cuando se activa un evento.
Por ejemplo, en lugar de enviar un correo electrónico, es posible que desees enviar un mensaje a Telegram.
Esperamos que este tutorial te haya resultado útil. Si desea obtener más información sobre la placa ESP8266, consulte nuestros recursos:
- Domótica con ESP8266
- Construya servidores web con ESP32 y ESP8266 eBook (segunda edición)
- Más proyectos y tutoriales de ESP8266…
Gracias por leer.
Monitor de estado de puerta ESP8266 NodeMCU con notificaciones por correo electrónico (IFTTT)
En este proyecto, monitorizarás el estado de una puerta utilizando una placa ESP8266 NodeMCU y un interruptor magnético de lámina. Recibirás notificaciones por correo electrónico cada vez que el estado de la puerta cambie: abierta o cerrada. Las notificaciones por correo electrónico se enviarán utilizando IFTTT, y la placa ESP8266 se programará utilizando Arduino IDE.
¿Cómo enviar correos electrónicos con el ESP8266 utilizando un servidor SMTP?
En lugar de enviar notificaciones por correo electrónico con IFTTT, puedes utilizar un servidor SMTP en su lugar. Para aprender cómo enviar correos electrónicos con tu ESP8266 utilizando un servidor SMTP, puedes seguir el siguiente tutorial.
¿Se pueden enviar notificaciones a una cuenta de Telegram?
Si prefieres, también puedes enviar notificaciones a tu cuenta de Telegram. Aprende cómo utilizar Telegram con el ESP8266 en el siguiente tutorial.
¿Dónde puedo encontrar más recursos sobre proyectos con el ESP8266?
Si deseas aprender más sobre la placa ESP8266, consulta nuestros recursos:
– Automatización del hogar con ESP8266.
– Construir servidores web con ESP32 y ESP8266 eBook (2da edición).
– Más proyectos y tutoriales ESP8266.
Esperamos que hayas encontrado útil este tutorial. Gracias por leer.
¡Me encanta la creatividad de usar un ESP8266 NodeMCU para mantener un ojo en la puerta y recibir alertas por correo electrónico! Definitivamente un proyecto interesante para probar. ¡Gracias por compartir esta información!
¡Qué genial! Nunca pensé que se pudiera programar un ESP8266 NodeMCU para enviar notificaciones por correo electrónico. Definitivamente quiero intentarlo. ¡Gracias por la idea!
¡Interesante idea! Me encanta la combinación de tecnología con la posibilidad de recibir notificaciones por correo electrónico. ¡Excelente artículo!
¡Vaya, nunca se me hubiera ocurrido utilizar un ESP8266 NodeMCU para monitorizar una puerta y recibir notificaciones por correo electrónico! ¡Definitivamente una idea muy original y útil! ¡Gracias por compartir este artículo!