.. note::
Ciao, benvenuto nella Community di SunFounder Raspberry Pi & Arduino & ESP32 Enthusiasts su Facebook! Approfondisci le tue conoscenze su Raspberry Pi, Arduino ed ESP32 insieme ad altri appassionati.
**Perché unirti a noi?**
- **Supporto Esperto**: Risolvi i problemi post-vendita e le sfide tecniche con l'aiuto della nostra community e del nostro team.
- **Impara e Condividi**: Scambia consigli e tutorial per migliorare le tue competenze.
- **Anteprime Esclusive**: Ottieni accesso anticipato ai nuovi annunci di prodotti e alle anteprime.
- **Sconti Speciali**: Approfitta di sconti esclusivi sui nostri prodotti più recenti.
- **Promozioni Festive e Giveaway**: Partecipa a giveaway e promozioni festive.
👉 Pronto a esplorare e creare con noi? Clicca su [|link_sf_facebook|] e unisciti oggi!
.. _iot_intrusion_alert_system:
8.9 Sistema di Notifica di Intrusione basato su Blynk
=========================================================
Questo progetto dimostra un semplice sistema di rilevamento di intrusione domestica utilizzando un sensore di movimento PIR (HC-SR501).
Quando il sistema è impostato sulla modalità "Assente" tramite l'app Blynk, il sensore PIR monitora i movimenti.
Qualsiasi movimento rilevato attiverà una notifica sull'app Blynk, avvisando l'utente di una potenziale intrusione.
**Componenti Necessari**
In questo progetto, avremo bisogno dei seguenti componenti.
È sicuramente conveniente acquistare un kit completo, ecco il link:
.. list-table::
:widths: 20 20 20
:header-rows: 1
* - Nome
- ELEMENTI IN QUESTO KIT
- LINK
* - ESP32 Starter Kit
- 320+
- |link_esp32_starter_kit|
Puoi anche acquistarli separatamente dai link sottostanti.
.. list-table::
:widths: 30 20
:header-rows: 1
* - INTRODUZIONE AI COMPONENTI
- LINK PER L'ACQUISTO
* - :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. Assemblaggio del Circuito
---------------------------------
.. image:: ../../img/wiring/iot_9_blynk_bb.png
:width: 60%
:align: center
2. Configurazione di Blynk
------------------------------
**2.1 Inizializzazione di Blynk**
1. Vai alla pagina |link_blynk| e seleziona **Sign Up FREE** o **Enterprise Solution**.
.. image:: img/09_blynk_access.png
:width: 600
:align: center
2. Inserisci la tua email per avviare il processo di registrazione.
.. image:: img/09_blynk_sign_in.png
:align: center
3. Controlla la tua email per un prompt e clicca sul link **Create Password** nell'email per impostare la tua password.
.. image:: img/09_blynk_password.png
:align: center
4. Dopo la conferma, inizierà un **Tour di Blynk** dove potrai apprendere rapidamente alcune delle principali funzionalità di Blynk.
.. image:: img/09_blynk_tour.png
:width: 600
:align: center
5. Al termine del Tour di Blynk, apparirà una finestra dove potrai scegliere di Esplorare i Blueprint o cliccare su Quick Start per connettere rapidamente il tuo dispositivo. Tuttavia, in questo caso, selezioneremo "Have a look around first".
.. image:: img/09_blynk_skip.png
:align: center
**2.2 Creazione del Template**
1. Inizia creando un template su Blynk. Segui i passaggi per configurare il template **Intrusion Alert System**.
.. image:: img/09_create_template_1_shadow.png
:width: 600
:align: center
2. Assegna un nome al tuo template, scegli **ESP32** come Hardware, seleziona **WiFi** come **Connection Type**, e poi clicca su **Done**.
.. image:: img/09_create_template_2_shadow.png
:width: 600
:align: center
3. Entra nel template, dove ti verranno presentati i passaggi successivi. Clicca su **Configure template** per caricare un'immagine di copertina, migliorare la descrizione e altro ancora. Segui i tre passaggi rimanenti per completare la configurazione.
.. image:: img/09_blynk_temp_steps.png
:width: 600
:align: center
**2.3 Configurazione dei Datastream**
1. Apri il template appena creato e vai alla pagina di configurazione del datastream.
.. image:: img/09_blynk_new_datastream.png
:width: 600
:align: center
2. Clicca su **New Datastream**, e nella finestra popup, seleziona **Virtual Pin**.
.. image:: img/09_blynk_datastream_virtual.png
:width: 600
:align: center
3. Assegna al **Virtual Pin V0** il nome **AwayMode** e imposta il **DATA TYPE** su **Integer**, con valori **MIN** e **MAX** di **0** e **1**.
.. image:: img/09_create_template_shadow.png
:width: 600
:align: center
4. Allo stesso modo, crea un altro **Virtual Pin** chiamato **Current Status** e imposta il **DATA TYPE** su **String**.
.. image:: img/09_datastream_1_shadow.png
:width: 600
:align: center
**2.4 Configurazione del Web Dashboard**
1. Trascina e rilascia il **Switch widget** e il **Label widget** sul **Web Dashboard**.
.. image:: img/09_web_dashboard_1_shadow.png
:width: 600
:align: center
2. Passa il mouse su un widget per visualizzare tre icone. Usa l'icona **Settings** per configurare le proprietà del widget.
.. image:: img/09_blynk_dashboard_set.png
:width: 600
:align: center
3. Configura il **Switch widget** per collegarlo al datastream **AwayMode(V0)**, impostando le etichette **ONLABEL** e **OFFLABEL** per visualizzare rispettivamente **"away home"** e **"at home"**.
.. image:: img/09_web_dashboard_2_shadow.png
:width: 600
:align: center
4. Nelle impostazioni del **Label widget**, collegalo al datastream **Current Status(V1)**.
.. image:: img/09_web_dashboard_3_shadow.png
:width: 600
:align: center
**2.5 Impostazione di un Evento**
1. Clicca su **Events & Notifications** e poi su **Create Event**.
.. image:: img/09_blynk_event_add.png
:width: 600
:align: center
2. Assegna un nome all'evento e specifica il suo codice. Scegli **Warning** per **TYPE** e fornisci una breve descrizione per l'email di notifica. Regola la frequenza delle notifiche secondo le tue preferenze.
.. note::
Assicurati che il **CODICE EVENTO** sia impostato su ``intrusion_detected``. Qualsiasi modifica qui richiede corrispondenti adattamenti nel codice.
.. image:: img/09_event_1_shadow.png
:width: 600
:align: center
3. Vai alla sezione **Notifications** per abilitare le notifiche e configurare le impostazioni email.
.. image:: img/09_event_2_shadow.png
:width: 600
:align: center
4. Sotto **Settings**, definisci con quale frequenza un evento attiverà le notifiche e imposta gli intervalli secondo le tue preferenze. Ricorda di cliccare su **Create** per salvare le impostazioni.
.. image:: img/09_event_3_shadow.png
:width: 600
:align: center
**2.6 Salvataggio del Template**
1. Ricorda di salvare le modifiche apportate al template.
.. image:: img/09_save_template_shadow.png
:width: 600
:align: center
**2.7 Creazione di un Dispositivo**
1. È il momento di creare un nuovo dispositivo dal template.
.. image:: img/09_blynk_device_new.png
:width: 600
:align: center
2. Seleziona **From template** per iniziare.
.. image:: img/09_blynk_device_template.png
:width: 600
:align: center
3. Scegli il template **Intrusion Alert System** e clicca su **Create**.
.. image:: img/09_blynk_device_template2.png
:width: 600
:align: center
4. Annota il **Template ID**, il **Device Name** e l'**AuthToken** per l'integrazione con l'ESP32.
.. image:: img/09_blynk_device_code.png
:width: 600
:align: center
3. Esecuzione del Codice
-----------------------------
#. Prima di eseguire il codice, assicurati di installare la libreria ``Blynk`` dal **Library Manager** nell'IDE di Arduino.
.. image:: img/09_blynk_add_library.png
:width: 700
:align: center
#. Apri il file ``iot_9_intrusion_alert_system.ino``, che si trova nella directory ``esp32-starter-kit-main\c\codes\iot_9_intrusion_alert_system``. Puoi anche copiarne il contenuto nell'IDE di Arduino.
.. raw:: html
#. Sostituisci i segnaposto per ``BLYNK_TEMPLATE_ID``, ``BLYNK_TEMPLATE_NAME`` e ``BLYNK_AUTH_TOKEN`` con i tuoi ID unici.
.. code-block:: arduino
#define BLYNK_TEMPLATE_ID "TMPxxxxxxx"
#define BLYNK_TEMPLATE_NAME "Intrusion Alert System"
#define BLYNK_AUTH_TOKEN "xxxxxxxxxxxxx"
#. Devi anche inserire il ``ssid`` e la ``password`` della tua rete WiFi.
.. code-block:: arduino
char ssid[] = "your_ssid";
char pass[] = "your_password";
#. Scegli la scheda corretta (**ESP32 Dev Module**) e la porta, quindi clicca sul pulsante **Upload**.
#. Apri il Serial monitor (imposta la velocità di baud a 115200) e attendi un messaggio di connessione avvenuta con successo.
.. image:: img/09_blynk_upload_code.png
:align: center
#. Dopo una connessione avvenuta con successo, attivando l'interruttore su Blynk inizierà la sorveglianza del modulo PIR. Quando viene rilevato un movimento (stato di 1), verrà visualizzato "Somebody here!" e verrà inviato un avviso alla tua email.
.. image:: img/09_blynk_code_alarm.png
:width: 700
:align: center
4. Spiegazione del Codice
-----------------------------
#. **Configurazione e Librerie**
In questa sezione, configuri le costanti e le credenziali di Blynk. Includi anche le librerie necessarie per ESP32 e Blynk.
.. code-block:: arduino
/* Commenta questa riga per disabilitare le stampe e risparmiare spazio */
#define BLYNK_PRINT Serial
#define BLYNK_TEMPLATE_ID "xxxxxxxxxxx"
#define BLYNK_TEMPLATE_NAME "Intrusion Alert System"
#define BLYNK_AUTH_TOKEN "xxxxxxxxxxxxxxxxxxxxxxxxxxx"
#include
#include
#include
#. **Configurazione del WiFi**
Inserisci le credenziali della tua rete WiFi.
.. code-block:: arduino
char ssid[] = "your_ssid";
char pass[] = "your_password";
#. **Configurazione del Sensore PIR**
Imposta il pin a cui è collegato il sensore PIR e inizializza le variabili di stato.
.. code-block:: arduino
const int sensorPin = 14;
int state = 0;
int awayHomeMode = 0;
BlynkTimer timer;
#. **Funzione setup()**
Questa funzione inizializza il sensore PIR come input, configura la comunicazione seriale, si connette al WiFi e configura Blynk.
- Usiamo ``timer.setInterval(1000L, myTimerEvent)`` per impostare l'intervallo del timer nel ``setup()``, qui è impostato per eseguire la funzione ``myTimerEvent()`` ogni **1000ms**. Puoi modificare il primo parametro di ``timer.setInterval(1000L, myTimerEvent)`` per cambiare l'intervallo tra le esecuzioni di ``myTimerEvent``.
.. raw:: html
.. code-block:: arduino
void setup() {
pinMode(sensorPin, INPUT); // Imposta il pin del sensore PIR come input
Serial.begin(115200); // Avvia la comunicazione seriale a 115200 baud per il debug
// Configura Blynk e connettiti al WiFi
Blynk.begin(BLYNK_AUTH_TOKEN, ssid, pass);
timer.setInterval(1000L, myTimerEvent); // Imposta una funzione da chiamare ogni secondo
}
#. **Funzione loop()**
La funzione loop esegue continuamente Blynk e le funzioni del timer di Blynk.
.. code-block:: arduino
void loop() {
Blynk.run();
timer.run();
}
#. **Interazione con l'App Blynk**
Queste funzioni vengono chiamate quando il dispositivo si connette a Blynk e quando c'è un cambiamento nello stato del pin virtuale V0 sull'app Blynk.
- Ogni volta che il dispositivo si connette al server Blynk, o si riconnette a causa di condizioni di rete scarse, viene chiamata la funzione ``BLYNK_CONNECTED()``. Il comando ``Blynk.syncVirtual()`` richiede il valore di un singolo Pin Virtuale. Il Pin Virtuale specificato eseguirà la chiamata ``BLYNK_WRITE()``.
- Ogni volta che il valore di un pin virtuale sul server BLYNK cambia, verrà attivata la funzione ``BLYNK_WRITE()``.
.. raw:: html
.. code-block:: arduino
// Questa funzione viene chiamata ogni volta che il dispositivo si connette a Blynk.Cloud
BLYNK_CONNECTED() {
Blynk.syncVirtual(V0);
}
// Questa funzione viene chiamata ogni volta che lo stato del Pin Virtuale 0 cambia
BLYNK_WRITE(V0) {
awayHomeMode = param.asInt();
// logica aggiuntiva
}
#. **Gestione dei Dati**
Ogni secondo, la funzione ``myTimerEvent()`` chiama ``sendData()``. Se la modalità away è abilitata su Blynk, controlla il sensore PIR e invia una notifica a Blynk se viene rilevato un movimento.
- Usiamo ``Blynk.virtualWrite(V1, "Qualcuno è in casa tua! Controlla!");`` per cambiare il testo di un'etichetta.
- Usa ``Blynk.logEvent("intrusion_detected");`` per registrare un evento su Blynk.
.. raw:: html
.. code-block:: arduino
void myTimerEvent() {
sendData();
}
void sendData() {
if (awayHomeMode == 1) {
state = digitalRead(sensorPin); // Leggi lo stato del sensore PIR
Serial.print("state:");
Serial.println(state);
// Se il sensore rileva un movimento, invia un allarme all'app Blynk
if (state == HIGH) {
Serial.println("Somebody here!");
Blynk.virtualWrite(V1, "Somebody in your house! Please check!");
Blynk.logEvent("intrusion_detected");
}
}
}
**Riferimenti**
- |link_blynk_doc|
- |link_blynk_quickstart|
- |link_blynk_virtualWrite|
- |link_blynk_logEvent|
- |link_blynk_timer_intro|
- |link_blynk_syncing|
- |link_blynk_write|