Nota

Ciao, benvenuto nella Comunità di appassionati di SunFounder Raspberry Pi & Arduino & ESP32 su Facebook! Immergiti più a fondo in Raspberry Pi, Arduino e ESP32 insieme ad altri entusiasti.

Perché Unirsi?

  • Supporto Esperto: Risolvi problemi post-vendita e sfide tecniche con l’aiuto della nostra comunità e del nostro team.

  • Impara & Condividi: Scambia consigli e tutorial per migliorare le tue competenze.

  • Anteprime Esclusive: Ottieni accesso anticipato agli annunci di nuovi prodotti e anteprime esclusive.

  • Sconti Speciali: Goditi sconti esclusivi sui nostri prodotti più recenti.

  • Promozioni Festive e Giveaway: Partecipa a giveaway e promozioni festive.

👉 Pronto per esplorare e creare con noi? Clicca [qui] e unisciti oggi!

Lezione 49: 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» attraverso l’app Blynk, il sensore PIR monitora i movimenti. Qualsiasi movimento rilevato attiva una notifica sull’app Blynk, allertando l’utente di una possibile intrusione.

Componenti Necessari

Per questo progetto, abbiamo bisogno dei seguenti componenti.

È decisamente conveniente acquistare un kit completo, ecco il link:

Nome

ELEMENTI IN QUESTO KIT

LINK

Universal Maker Sensor Kit

94

Universal Maker Sensor Kit

Puoi anche acquistarli separatamente dai link qui sotto.

INTRODUZIONE COMPONENTE

LINK DI ACQUISTO

ESP32 & Scheda di Sviluppo (ESP32 WROOM 32E)

ACQUISTA

Modulo Sensore di Movimento PIR (HC-SR501)

-

1. Assemblaggio del Circuito

../_images/Lesson_12_PIR_Module_esp32_bb.png

2. Configurazione Blynk

2.1 Inizializzazione di Blynk

  1. Naviga fino a Blynk e seleziona START FREE.

    ../_images/09_blynk_access.png
  2. Inserisci la tua email per avviare il processo di registrazione.

    ../_images/09_blynk_sign_in.png
  3. Conferma la tua registrazione tramite email.

  4. Dopo la conferma, apparirà il Blynk Tour. Si consiglia di selezionare «Salta». Se appare anche Quick Start, considera di saltarlo.

2.2 Creazione di un Template

  1. Prima, crea un template in Blynk. Segui le istruzioni successive per creare il template Intrusion Alert System.

  2. Assegna un nome al template, seleziona Hardware ESP32, e seleziona Connection Type come WiFi, poi seleziona Done.

2.3 Generazione dei Datastream

Apri il template appena configurato, creiamo due datastream.

  1. Clicca su Nuovo Datastream.

  2. Nella finestra popup, scegli Virtual Pin.

  3. Nominare il Virtual Pin V0 come Modalità Assente. Imposta il TIPO DI DATO come Intero con valori MIN e MAX come 0 e 1.

  4. Analogamente, crea un altro datastream Virtual Pin. Nominalo Current Status e imposta il TIPO DI DATO come Stringa.

2.4 Configurazione di un Evento

Successivamente, configureremo un evento che invia una notifica via email se viene rilevata un’intrusione.

  1. Clicca su Aggiungi Nuovo Evento.

    ../_images/09_blynk_event_add.png
  2. Definisci il nome dell’evento e il suo codice specifico. Per TYPE, scegli Warning e scrivi una breve descrizione per l’email da inviare quando si verifica l’evento. Puoi anche regolare la frequenza delle notifiche.

    Nota

    Assicurati che il EVENT CODE sia impostato come intrusion_detected. Questo è predefinito nel codice, quindi eventuali modifiche richiederebbero un aggiustamento del codice.

    ../_images/09_event_1_shadow.png
  3. Vai alla sezione Notifications per attivare le notifiche e configurare i dettagli dell’email.


2.5 Perfezionamento del Web Dashboard

Assicurarsi che il Web Dashboard interagisca perfettamente con il Sistema di Allarme Intrusione è fondamentale.

  1. Semplicemente trascina e posiziona sia il Widget Interruttore che il Widget Etichetta sul Web Dashboard.

  2. Quando passi il mouse sopra un widget, appariranno tre icone. Utilizza l’icona delle impostazioni per regolare le proprietà del widget.

  3. Nelle impostazioni del Widget Interruttore, seleziona Datastream come Modalità Assente(V0). Imposta ONLABEL e OFFLABEL per visualizzare rispettivamente «assente» e «casa».

  4. Nelle impostazioni del Widget Etichetta, seleziona Datastream come Stato Corrente(V1).

2.6 Salvataggio del Template

Infine, non dimenticare di salvare il tuo template.

2.7 Creazione di un Dispositivo

  1. È il momento di creare un nuovo dispositivo.

  2. Clicca su Da template per iniziare con una nuova configurazione.

  3. Poi, scegli il template Sistema di Allarme Intrusione e clicca su Crea.

  4. Qui, vedrai il Template ID, Device Name, e AuthToken. Devi copiare questi nel tuo codice affinché l’ESP32 possa lavorare con Blynk.

3. Esecuzione del Codice

  1. Prima di eseguire il codice, assicurati di installare la libreria Blynk dal Library Manager su Arduino IDE.

  2. Apri il file Lesson_49_Blynk_based_intrusion_system.ino, che si trova nella directory universal-maker-sensor-kit\esp32\Lesson_49_Blynk_based_intrusion_system. Puoi anche copiarne il contenuto nell’Arduino IDE.

  3. Sostituisci i segnaposto per BLYNK_TEMPLATE_ID, BLYNK_TEMPLATE_NAME, e BLYNK_AUTH_TOKEN con i tuoi ID unici.

    #define BLYNK_TEMPLATE_ID "TMPxxxxxxx"
    #define BLYNK_TEMPLATE_NAME "Intrusion Alert System"
    #define BLYNK_AUTH_TOKEN "xxxxxxxxxxxxx"
    
  4. Devi anche inserire il ssid e la password della tua rete WiFi.

    char ssid[] = "your_ssid";
    char pass[] = "your_password";
    
  5. Scegli la scheda corretta (ESP32 Dev Module) e la porta, poi clicca sul pulsante Carica.

  6. Apri il monitor seriale (imposta il baud rate a 115200) e attendi un messaggio di connessione riuscita.

    ../_images/09_blynk_upload_code.png
  7. Dopo una connessione riuscita, attivando l’interruttore in Blynk avvierà la sorveglianza del modulo PIR. Quando viene rilevato un movimento (stato di 1), dirà, «C’è qualcuno qui!» e invierà un allarme alla tua email.

4. Spiegazione del Codice

  1. Configurazione & Librerie

    Qui, configuri le costanti Blynk e le credenziali. Includi anche le librerie necessarie per l’ESP32 e 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. Configurazione WiFi

    Inserisci le tue credenziali WiFi.

    char ssid[] = "your_ssid";
    char pass[] = "your_password";
    
  3. Configurazione Sensore PIR

    Imposta il pin dove è collegato il sensore PIR e inizializza le variabili di stato.

    const int sensorPin = 14;
    int state = 0;
    int awayHomeMode = 0;
    BlynkTimer timer;
    
  4. 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 in setup(), qui impostiamo l’esecuzione della funzione myTimerEvent() ogni 1000ms. Puoi modificare il primo parametro di timer.setInterval(1000L, myTimerEvent) per cambiare l’intervallo tra le esecuzioni di myTimerEvent.


    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 debugging
    
        // Configura Blynk e connettiti al WiFi
        Blynk.begin(BLYNK_AUTH_TOKEN, ssid, pass);
    
        timer.setInterval(1000L, myTimerEvent);  // Imposta una funzione da chiamare ogni secondo
    }
    
  5. Funzione loop()

    La funzione loop esegue continuamente Blynk e le funzioni del timer Blynk.

    void loop() {
       Blynk.run();
       timer.run();
    }
    
  6. 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 scadenti, viene chiamata la funzione BLYNK_CONNECTED(). Il comando Blynk.syncVirtual() richiede un singolo valore di Pin Virtuale. Il Pin Virtuale specificato eseguirà la chiamata BLYNK_WRITE().

    • Ogni volta che il valore di un pin virtuale sul server BLYNK cambia, scatenerà BLYNK_WRITE().


    // Questa funzione viene chiamata ogni volta che il dispositivo è connesso 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
    }
    
  7. Gestione dei Dati

    Ogni secondo, la funzione myTimerEvent() chiama sendData(). Se la modalità assente è abilitata su Blynk, controlla il sensore PIR e invia una notifica a Blynk se viene rilevato un movimento.

    • Usiamo Blynk.virtualWrite(V1, "Somebody in your house! Please check!"); per cambiare il testo di un’etichetta.

    • Usa Blynk.logEvent("intrusion_detected"); per registrare l’evento su Blynk.


    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