8.9 Sistema de Notificación de Intrusión Basado en Blynk

Este proyecto demuestra un sistema simple de detección de intrusiones en el hogar usando un sensor de movimiento PIR (HC-SR501). Cuando el sistema está configurado en modo «Ausente» a través de la aplicación Blynk, el sensor PIR monitorea el movimiento. Cualquier movimiento detectado activa una notificación en la aplicación Blynk, alertando al usuario de una posible intrusión.

Componentes Necesarios

Para este proyecto, necesitamos los siguientes componentes.

Es definitivamente conveniente comprar un kit completo, aquí está el enlace:

Nombre

ELEMENTOS EN ESTE KIT

ENLACE

Kit de Inicio ESP32

320+

ESP32 Starter Kit

También puedes comprarlos por separado en los enlaces a continuación.

INTRODUCCIÓN AL COMPONENTE

ENLACE DE COMPRA

ESP32 WROOM 32E

BUY

Extensión de Cámara ESP32

-

Cables Puente

BUY

Módulo Sensor de Movimiento PIR

BUY

1. Montaje del Circuito

../../_images/iot_9_blynk_bb.png

2. Configuración de Blynk

2.1 Inicialización de Blynk

  1. Navega a BLYNK y selecciona EMPEZAR GRATIS.

    ../../_images/09_blynk_access.png
  2. Ingresa tu correo electrónico para iniciar el proceso de registro.

    ../../_images/09_blynk_sign_in.png
  3. Confirma tu registro a través de tu correo electrónico.

    ../../_images/09_blynk_password.png
  4. Después de la confirmación, aparecerá Tour de Blynk. Se recomienda seleccionar «Omitir». Si también aparece Inicio Rápido, considera omitirlo igualmente.

    ../../_images/09_blynk_tour.png

2.2 Creación de Plantilla

  1. Primero, crea una plantilla en Blynk. Sigue las instrucciones subsiguientes para crear la plantilla Sistema de Alerta de Intrusión.

    ../../_images/09_create_template_1_shadow.png
  2. Asigna un nombre a la plantilla, selecciona ESP32 como Hardware y Tipo de Conexión como WiFi, luego selecciona Hecho.

    ../../_images/09_create_template_2_shadow.png

2.3 Generación de Flujo de Datos

Abre la plantilla que acabas de configurar, vamos a crear dos flujos de datos.

  1. Haz clic en Nuevo Flujo de Datos.

    ../../_images/09_blynk_new_datastream.png
  2. En el popup, elige Pin Virtual.

    ../../_images/09_blynk_datastream_virtual.png
  3. Nombra el Pin Virtual V0 como ModoAusente. Establece el TIPO DE DATO como Entero con valores MIN y MAX como 0 y 1.

    ../../_images/09_create_template_shadow.png
  4. De manera similar, crea otro flujo de datos de Pin Virtual. Nómbralo Estado Actual y establece el TIPO DE DATO a Cadena.

    ../../_images/09_datastream_1_shadow.png

2.4 Configuración de un Evento

A continuación, configuraremos un evento que envía una notificación por correo electrónico si se detecta una intrusión.

  1. Haz clic en Añadir Nuevo Evento.

    ../../_images/09_blynk_event_add.png
  2. Define el nombre del evento y su código específico. Para TIPO, elige Advertencia y escribe una breve descripción para el correo que se enviará cuando ocurra el evento. También puedes ajustar con qué frecuencia recibes notificaciones.

    Nota

    Asegúrate de que el CÓDIGO DEL EVENTO esté establecido como intrusion_detected. Esto está predefinido en el código, por lo que cualquier cambio significaría que necesitas ajustar el código también.

    ../../_images/09_event_1_shadow.png
  3. Ve a la sección de Notificaciones para activar las notificaciones y configurar los detalles del correo electrónico.

    ../../_images/09_event_2_shadow.png

2.5 Ajuste Fino del Tablero Web

Asegurarse de que el Tablero Web interactúe perfectamente con el Sistema de Alerta de Intrusión es vital.

  1. Simplemente arrastra y coloca tanto el Widget de Interruptor como el Widget de Etiqueta en el Tablero Web.

    ../../_images/09_web_dashboard_1_shadow.png
  2. Cuando pases el cursor sobre un widget, aparecerán tres iconos. Usa el icono de configuración para ajustar las propiedades del widget.

    ../../_images/09_blynk_dashboard_set.png
  3. En la configuración del Widget de Interruptor, selecciona Flujo de Datos como ModoAusente(V0). Establece EtiquetaON y EtiquetaOFF para mostrar «ausente» y «casa», respectivamente.

    ../../_images/09_web_dashboard_2_shadow.png
  4. En la configuración del Widget de Etiqueta, selecciona Flujo de Datos como Estado Actual(V1).

    ../../_images/09_web_dashboard_3_shadow.png

2.6 Guardando la Plantilla

Por último, no olvides guardar tu plantilla.

../../_images/09_save_template_shadow.png

2.7 Creando un Dispositivo

  1. Es hora de crear un nuevo dispositivo.

    ../../_images/09_blynk_device_new.png
  2. Haz clic en Desde plantilla para comenzar con una nueva configuración.

    ../../_images/09_blynk_device_template.png
  3. Luego, elige la plantilla Sistema de Alerta de Intrusión y haz clic en Crear.

    ../../_images/09_blynk_device_template2.png
  4. Aquí, verás el ID de la Plantilla, Nombre del Dispositivo y AuthToken. Necesitas copiar estos en tu código para que el ESP32 pueda trabajar con Blynk.

    ../../_images/09_blynk_device_code.png

3. Ejecución del Código

  1. Antes de ejecutar el código, asegúrate de instalar la biblioteca Blynk desde el Administrador de Bibliotecas en el Arduino IDE.

    ../../_images/09_blynk_add_library.png
  2. Abre el archivo iot_9_intrusion_alert_system.ino, ubicado en el directorio esp32-starter-kit-main\c\codes\iot_9_intrusion_alert_system. También puedes copiar su contenido en el Arduino IDE.

  3. Sustituye los marcadores de posición de BLYNK_TEMPLATE_ID, BLYNK_TEMPLATE_NAME y BLYNK_AUTH_TOKEN por tus propios IDs únicos.

    #define BLYNK_TEMPLATE_ID "TMPxxxxxxx"
    #define BLYNK_TEMPLATE_NAME "Intrusion Alert System"
    #define BLYNK_AUTH_TOKEN "xxxxxxxxxxxxx"
    
  4. También necesitas ingresar el ssid y password de tu red WiFi.

    char ssid[] = "your_ssid";
    char pass[] = "your_password";
    
  5. Elige la placa correcta (ESP32 Dev Module) y puerto, luego haz clic en el botón Subir.

  6. Abre el Monitor Serial (configura la tasa de baudios a 115200) y espera un mensaje de conexión exitosa.

    ../../_images/09_blynk_upload_code.png
  7. Tras una conexión exitosa, activar el interruptor en Blynk iniciará la vigilancia del módulo PIR. Cuando se detecte movimiento (estado de 1), dirá, «¡Alguien aquí!» y enviará una alerta a tu correo electrónico.

    ../../_images/09_blynk_code_alarm.png

4. Explicación del Código

  1. Configuración & Bibliotecas

    Aquí, configuras las constantes y credenciales de Blynk. También incluyes las bibliotecas necesarias para el ESP32 y Blynk.

    /* Comment this out to disable prints and save space */
    #define BLYNK_PRINT Serial
    
    #define BLYNK_TEMPLATE_ID "xxxxxxxxxxx"
    #define BLYNK_TEMPLATE_NAME "Intrusion Alert System"
    #define BLYNK_AUTH_TOKEN "xxxxxxxxxxxxxxxxxxxxxxxxxxx"
    
    #include <WiFi.h>
    #include <WiFiClient.h>
    #include <BlynkSimpleEsp32.h>
    
  2. Configuración WiFi

    Ingresa tus credenciales WiFi.

    char ssid[] = "your_ssid";
    char pass[] = "your_password";
    
  3. Configuración del Sensor PIR

    Establece el pin donde está conectado el sensor PIR e inicializa las variables de estado.

    const int sensorPin = 14;
    int state = 0;
    int awayHomeMode = 0;
    BlynkTimer timer;
    
  4. Función setup()

    Esta función inicializa el sensor PIR como entrada, configura la comunicación serial, se conecta a WiFi y configura Blynk.

    • Usamos timer.setInterval(1000L, myTimerEvent) para establecer el intervalo del temporizador en setup(), aquí lo configuramos para ejecutar la función myTimerEvent() cada 1000ms. Puedes modificar el primer parámetro de timer.setInterval(1000L, myTimerEvent) para cambiar el intervalo entre ejecuciones de myTimerEvent.


    void setup() {
    
        pinMode(sensorPin, INPUT);  // Set PIR sensor pin as input
        Serial.begin(115200);           // Start serial communication at 115200 baud rate for debugging
    
        // Configure Blynk and connect to WiFi
        Blynk.begin(BLYNK_AUTH_TOKEN, ssid, pass);
    
        timer.setInterval(1000L, myTimerEvent);  // Setup a function to be called every second
    }
    
  5. Función loop()

    La función loop ejecuta continuamente Blynk y las funciones del temporizador de Blynk.

    void loop() {
       Blynk.run();
       timer.run();
    }
    
  6. Interacción con la Aplicación Blynk

    Estas funciones se llaman cuando el dispositivo se conecta a Blynk y cuando hay un cambio en el estado del pin virtual V0 en la aplicación Blynk.

    • Cada vez que el dispositivo se conecta al servidor Blynk, o se reconecta debido a condiciones de red deficientes, se llama a la función BLYNK_CONNECTED(). El comando Blynk.syncVirtual() solicita el valor de un Pin Virtual único. El Pin Virtual especificado realizará la llamada BLYNK_WRITE().

    • Siempre que el valor de un pin virtual en el servidor BLYNK cambia, se activará BLYNK_WRITE().


    // This function is called every time the device is connected to the Blynk.Cloud
    BLYNK_CONNECTED() {
        Blynk.syncVirtual(V0);
    }
    
    // This function is called every time the Virtual Pin 0 state changes
    BLYNK_WRITE(V0) {
        awayHomeMode = param.asInt();
        // additional logic
    }
    
  7. Manejo de Datos

    Cada segundo, la función myTimerEvent() llama a sendData(). Si el modo ausente está habilitado en Blynk, verifica el sensor PIR y envía una notificación a Blynk si se detecta movimiento.

    • Usamos Blynk.virtualWrite(V1, "¡Alguien en tu casa! ¡Por favor, revisa!"); para cambiar el texto de una etiqueta.

    • Usa Blynk.logEvent("intrusion_detected"); para registrar el evento en Blynk.


    void myTimerEvent() {
       sendData();
    }
    
    void sendData() {
       if (awayHomeMode == 1) {
          state = digitalRead(sensorPin);  // Read the state of the PIR sensor
    
          Serial.print("state:");
          Serial.println(state);
    
          // If the sensor detects movement, send an alert to the Blynk app
          if (state == HIGH) {
            Serial.println("Somebody here!");
            Blynk.virtualWrite(V1, "Somebody in your house! Please check!");
             Blynk.logEvent("intrusion_detected");
          }
       }
    }
    

Reference