.. note::
¡Hola, bienvenido a la Comunidad de Aficionados a Raspberry Pi, Arduino y ESP32 de SunFounder en Facebook! Profundiza en Raspberry Pi, Arduino y ESP32 con otros entusiastas.
**¿Por qué unirse?**
- **Soporte de expertos**: Resuelve problemas posventa y desafíos técnicos con ayuda de nuestra comunidad y equipo.
- **Aprender y compartir**: Intercambia consejos y tutoriales para mejorar tus habilidades.
- **Vistas previas exclusivas**: Obtén acceso anticipado a anuncios de nuevos productos y avances.
- **Descuentos especiales**: Disfruta de descuentos exclusivos en nuestros productos más nuevos.
- **Promociones festivas y sorteos**: Participa en sorteos y promociones de fiestas.
👉 ¿Listo para explorar y crear con nosotros? Haz clic en [|link_sf_facebook|] y únete hoy!
.. _iot_intrusion_alert_system:
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:
.. list-table::
:widths: 20 20 20
:header-rows: 1
* - Nombre
- ELEMENTOS EN ESTE KIT
- ENLACE
* - Kit de Inicio ESP32
- 320+
- |link_esp32_starter_kit|
También puedes comprarlos por separado en los enlaces a continuación.
.. list-table::
:widths: 30 20
:header-rows: 1
* - INTRODUCCIÓN AL COMPONENTE
- ENLACE DE COMPRA
* - :ref:`cpn_esp32_wroom_32e`
- |link_esp32_wroom_32e_buy|
* - :ref:`cpn_esp32_camera_extension`
- |link_esp32_extension_board|
* - :ref:`cpn_wires`
- |link_wires_buy|
* - :ref:`cpn_pir`
- |link_pir_buy|
1. Montaje del Circuito
--------------------------
.. image:: ../../img/wiring/iot_9_blynk_bb.png
:width: 60%
:align: center
2. Configuración de Blynk
------------------------------------
**2.1 Inicializando Blynk**
1. Ve a la página de |link_blynk| y selecciona **Sign Up FREE** o **Enterprise Solution**.
.. image:: img/09_blynk_access.png
:width: 600
:align: center
2. Ingresa tu correo electrónico para comenzar el proceso de registro.
.. image:: img/09_blynk_sign_in.png
:align: center
3. Revisa tu correo electrónico para ver un mensaje, y haz clic en el enlace **Create Password** en el correo para establecer tu contraseña.
.. image:: img/09_blynk_password.png
:align: center
4. Después de la confirmación, comenzará un **Blynk Tour** donde podrás aprender rápidamente sobre algunas de las características clave de Blynk.
.. image:: img/09_blynk_tour.png
:width: 600
:align: center
5. Después de completar el Blynk Tour, aparecerá una ventana donde podrás elegir explorar Blueprints o hacer clic en Quick Start para conectar rápidamente tu dispositivo. Sin embargo, en este caso, seleccionaremos "Have a look around first".
.. image:: img/09_blynk_skip.png
:align: center
**2.2 Creación de Plantillas**
1. Comienza creando una plantilla en Blynk. Sigue los pasos para configurar la plantilla **Intrusion Alert System**.
.. image:: img/09_create_template_1_shadow.png
:width: 600
:align: center
2. Nombra tu plantilla, elige **ESP32** como el Hardware, selecciona **WiFi** como el **Tipo de Conexión**, y luego haz clic en **Done**.
.. image:: img/09_create_template_2_shadow.png
:width: 600
:align: center
3. Entra en la plantilla, donde se te indicarán los siguientes pasos. Haz clic en **Configure template** para subir una imagen de portada, mejorar la descripción y más. Sigue los tres pasos restantes para completar la configuración.
.. image:: img/09_blynk_temp_steps.png
:width: 600
:align: center
**2.3 Configurar Datastreams**
1. Abre la plantilla recién creada y ve a la página de configuración de datastreams.
.. image:: img/09_blynk_new_datastream.png
:width: 600
:align: center
2. Haz clic en **New Datastream**, y en la ventana emergente, selecciona **Virtual Pin**.
.. image:: img/09_blynk_datastream_virtual.png
:width: 600
:align: center
3. Nombra el **Virtual Pin V0** como **AwayMode** y establece el **TIPO DE DATO** en **Integer**, con valores **MIN** y **MAX** de **0** y **1**.
.. image:: img/09_create_template_shadow.png
:width: 600
:align: center
4. De manera similar, crea otro **Virtual Pin** llamado **Current Status** y establece el **TIPO DE DATO** en **String**.
.. image:: img/09_datastream_1_shadow.png
:width: 600
:align: center
**2.4 Configurar el Tablero Web**
1. Arrastra y suelta tanto el **Switch widget** como el **Label widget** en el **Tablero Web**.
.. image:: img/09_web_dashboard_1_shadow.png
:width: 600
:align: center
2. Pasa el cursor sobre un widget para ver tres iconos. Utiliza el icono de **Configuración** para configurar las propiedades del widget.
.. image:: img/09_blynk_dashboard_set.png
:width: 600
:align: center
3. Configura el **Switch widget** para que se enlace con el datastream **AwayMode(V0)**, estableciendo las etiquetas **ONLABEL** y **OFFLABEL** para mostrar **"away home"** y **"at home"** respectivamente.
.. image:: img/09_web_dashboard_2_shadow.png
:width: 600
:align: center
4. En la configuración del **Label widget**, enlázalo con el datastream **Current Status(V1)**.
.. image:: img/09_web_dashboard_3_shadow.png
:width: 600
:align: center
**2.5 Configuración de un Evento**
1. Haz clic en **Events & Notifications** y luego en **Create Event**.
.. image:: img/09_blynk_event_add.png
:width: 600
:align: center
2. Nombra el evento y especifica su código. Elige **Warning** para **TIPO** y proporciona una breve descripción para el correo electrónico de notificación. Ajusta la frecuencia de notificación según lo desees.
.. note::
Asegúrate de que el **CÓDIGO DEL EVENTO** esté configurado como ``intrusion_detected``. Cualquier cambio aquí requiere ajustes correspondientes en el código.
.. image:: img/09_event_1_shadow.png
:width: 600
:align: center
3. Ve a la sección de **Notificaciones** para habilitar las notificaciones y configurar los ajustes de correo electrónico.
.. image:: img/09_event_2_shadow.png
:width: 600
:align: center
4. En **Configuración**, define con qué frecuencia un evento activa las notificaciones y establece los intervalos según tu preferencia. Recuerda hacer clic en **Create** para guardar tus configuraciones.
.. image:: img/09_event_3_shadow.png
:width: 600
:align: center
**2.6 Guardar la Plantilla**
1. Recuerda guardar tus cambios en la plantilla.
.. image:: img/09_save_template_shadow.png
:width: 600
:align: center
**2.7 Crear un Dispositivo**
1. Es hora de crear un nuevo dispositivo a partir de la plantilla.
.. image:: img/09_blynk_device_new.png
:width: 600
:align: center
2. Selecciona **From template** para comenzar.
.. image:: img/09_blynk_device_template.png
:width: 600
:align: center
3. Elige la plantilla **Intrusion Alert System** y haz clic en **Create**.
.. image:: img/09_blynk_device_template2.png
:width: 600
:align: center
4. Anota el **Template ID**, **Device Name** y **AuthToken** para la integración con tu ESP32.
.. image:: img/09_blynk_device_code.png
:width: 600
:align: center
3. Ejecución del Código
-----------------------------
#. Antes de ejecutar el código, asegúrate de instalar la biblioteca ``Blynk`` desde el **Administrador de Bibliotecas** en el Arduino IDE.
.. image:: img/09_blynk_add_library.png
:width: 700
:align: center
#. 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.
.. raw:: html
#. Sustituye los marcadores de posición de ``BLYNK_TEMPLATE_ID``, ``BLYNK_TEMPLATE_NAME`` y ``BLYNK_AUTH_TOKEN`` por tus propios IDs únicos.
.. code-block:: arduino
#define BLYNK_TEMPLATE_ID "TMPxxxxxxx"
#define BLYNK_TEMPLATE_NAME "Intrusion Alert System"
#define BLYNK_AUTH_TOKEN "xxxxxxxxxxxxx"
#. También necesitas ingresar el ``ssid`` y ``password`` de tu red WiFi.
.. code-block:: arduino
char ssid[] = "your_ssid";
char pass[] = "your_password";
#. Elige la placa correcta (**ESP32 Dev Module**) y puerto, luego haz clic en el botón **Subir**.
#. Abre el Monitor Serial (configura la tasa de baudios a 115200) y espera un mensaje de conexión exitosa.
.. image:: img/09_blynk_upload_code.png
:align: center
#. 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.
.. image:: img/09_blynk_code_alarm.png
:width: 700
:align: center
4. Explicación del Código
-----------------------------
#. **Configuración & Bibliotecas**
Aquí, configuras las constantes y credenciales de Blynk. También incluyes las bibliotecas necesarias para el ESP32 y Blynk.
.. code-block:: arduino
/* 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
#include
#include
#. **Configuración WiFi**
Ingresa tus credenciales WiFi.
.. code-block:: arduino
char ssid[] = "your_ssid";
char pass[] = "your_password";
#. **Configuración del Sensor PIR**
Establece el pin donde está conectado el sensor PIR e inicializa las variables de estado.
.. code-block:: arduino
const int sensorPin = 14;
int state = 0;
int awayHomeMode = 0;
BlynkTimer timer;
#. **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``.
.. raw:: html
.. code-block:: arduino
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
}
#. **Función loop()**
La función loop ejecuta continuamente Blynk y las funciones del temporizador de Blynk.
.. code-block:: arduino
void loop() {
Blynk.run();
timer.run();
}
#. **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()``.
.. raw:: html
.. code-block:: arduino
// 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
}
#. **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.
.. raw:: html
.. code-block:: arduino
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**
- |link_blynk_doc|
- |link_blynk_quickstart|
- |link_blynk_virtualWrite|
- |link_blynk_logEvent|
- |link_blynk_timer_intro|
- |link_blynk_syncing|
- |link_blynk_write|