8.9 Blynk-basiertes Einbruchmeldesystem

Dieses Projekt demonstriert ein einfaches Einbruchmeldesystem für Zuhause, das einen PIR-Bewegungssensor (HC-SR501) nutzt. Wenn das System über die Blynk-App auf den Modus „Abwesend“ eingestellt ist, überwacht der PIR-Sensor Bewegungen. Jede erkannte Bewegung löst eine Benachrichtigung in der Blynk-App aus, die den Benutzer über einen möglichen Einbruch informiert.

Benötigte Komponenten

Für dieses Projekt benötigen wir die folgenden Komponenten.

Es ist definitiv praktisch, ein ganzes Kit zu kaufen. Hier ist der Link:

Name

ARTIKEL IN DIESEM KIT

LINK

ESP32 Starter Kit

320+

ESP32 Starter Kit

Sie können sie auch separat über die untenstehenden Links kaufen.

KOMPONENTENVORSTELLUNG

KAUF-LINK

ESP32 WROOM 32E

BUY

ESP32-Kameraerweiterung

-

Überbrückungsdrähte

BUY

PIR-Bewegungssensormodul

BUY

1. Schaltungs-Zusammenbau

../../_images/iot_9_blynk_bb.png

2. Blynk-Konfiguration

2.1 Blynk-Initialisierung

  1. Navigieren Sie zur BLYNK und wählen Sie START FREE.

    ../../_images/09_blynk_access.png
  2. Geben Sie Ihre E-Mail-Adresse ein, um den Registrierungsprozess zu starten.

    ../../_images/09_blynk_sign_in.png
  3. Bestätigen Sie Ihre Registrierung per E-Mail.

    ../../_images/09_blynk_password.png
  4. Nach der Bestätigung erscheint die Blynk Tour. Es wird empfohlen, „Überspringen“ zu wählen. Erscheint auch Quick Start, überlegen Sie, auch dies zu überspringen.

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

2.2 Template-Erstellung

  1. Erstellen Sie zunächst ein Template in Blynk. Folgen Sie den nachfolgenden Anweisungen, um das Template Intrusion Alert System zu erstellen.

    ../../_images/09_create_template_1_shadow.png
  2. Geben Sie dem Template einen Namen, wählen Sie als Hardware ESP32 und als Connection Type WiFi, dann wählen Sie Done.

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

2.3 Generierung von Datenströmen

Öffnen Sie das gerade erstellte Template, um zwei Datenströme zu erstellen.

  1. Klicken Sie auf New Datastream.

    ../../_images/09_blynk_new_datastream.png
  2. Wählen Sie im Popup Virtual Pin aus.

    ../../_images/09_blynk_datastream_virtual.png
  3. Benennen Sie den Virtual Pin V0 als AwayMode. Setzen Sie den DATA TYPE auf Integer mit den MIN- und MAX-Werten 0 und 1.

    ../../_images/09_create_template_shadow.png
  4. Erstellen Sie ähnlich einen weiteren Virtual Pin-Datenstrom. Benennen Sie ihn Current Status und setzen Sie den DATA TYPE auf String.

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

2.4 Einrichten eines Ereignisses

Als Nächstes richten wir ein Ereignis ein, das eine E-Mail-Benachrichtigung sendet, wenn ein Einbruch erkannt wird.

  1. Klicken Sie auf Add New Event.

    ../../_images/09_blynk_event_add.png
  2. Definieren Sie den Namen des Ereignisses und dessen spezifischen Code. Wählen Sie für TYPE Warning und schreiben Sie eine kurze Beschreibung für die E-Mail, die gesendet werden soll, wenn das Ereignis eintritt. Sie können auch einstellen, wie oft Sie benachrichtigt werden.

    Bemerkung

    Stellen Sie sicher, dass der EVENT CODE als intrusion_detected festgelegt ist. Dies ist im Code vordefiniert, daher müssen Änderungen auch im Code vorgenommen werden.

    ../../_images/09_event_1_shadow.png
  3. Gehen Sie zum Abschnitt Notifications, um Benachrichtigungen zu aktivieren und E-Mail-Details einzurichten.

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

2.5 Feinabstimmung des Web-Dashboards

Es ist wichtig, dass das Web Dashboard perfekt mit dem Einbruchmeldesystem interagiert.

  1. Ziehen Sie einfach sowohl das Switch widget als auch das Label widget auf das Web Dashboard.

    ../../_images/09_web_dashboard_1_shadow.png
  2. Wenn Sie mit der Maus über ein Widget fahren, erscheinen drei Symbole. Verwenden Sie das Einstellungssymbol, um die Eigenschaften des Widgets anzupassen.

    ../../_images/09_blynk_dashboard_set.png
  3. In den Einstellungen des Switch widget wählen Sie Datastream als AwayMode(V0). Setzen Sie ONLABEL und OFFLABEL auf „away“ bzw. „home“.

    ../../_images/09_web_dashboard_2_shadow.png
  4. In den Einstellungen des Label widget wählen Sie Datastream als Current Status(V1).

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

2.6 Speichern des Templates

Vergessen Sie zum Schluss nicht, Ihr Template zu speichern.

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

2.7 Erstellen eines Geräts

  1. Jetzt ist es an der Zeit, ein neues Gerät zu erstellen.

    ../../_images/09_blynk_device_new.png
  2. Klicken Sie auf From template, um mit einer neuen Einrichtung zu beginnen.

    ../../_images/09_blynk_device_template.png
  3. Wählen Sie dann das Template Intrusion Alert System und klicken Sie auf Create.

    ../../_images/09_blynk_device_template2.png
  4. Hier sehen Sie die Template ID, den Device Name und den AuthToken. Sie müssen diese in Ihren Code kopieren, damit der ESP32 mit Blynk arbeiten kann.

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

3. Codeausführung

  1. Bevor Sie den Code ausführen, stellen Sie sicher, dass Sie die Blynk-Bibliothek über den Library Manager in der Arduino IDE installiert haben.

    ../../_images/09_blynk_add_library.png
  2. Öffnen Sie die Datei iot_9_intrusion_alert_system.ino, die sich im Verzeichnis esp32-starter-kit-main\c\codes\iot_9_intrusion_alert_system befindet. Sie können auch deren Inhalt in die Arduino IDE kopieren.

  3. Ersetzen Sie die Platzhalter für BLYNK_TEMPLATE_ID, BLYNK_TEMPLATE_NAME und BLYNK_AUTH_TOKEN mit Ihren eigenen einzigartigen IDs.

    #define BLYNK_TEMPLATE_ID "TMPxxxxxxx"
    #define BLYNK_TEMPLATE_NAME "Intrusion Alert System"
    #define BLYNK_AUTH_TOKEN "xxxxxxxxxxxxx"
    
  4. Geben Sie auch die ssid und das password Ihres WLAN-Netzwerks ein.

    char ssid[] = "your_ssid";
    char pass[] = "your_password";
    
  5. Wählen Sie das richtige Board (ESP32 Dev Module) und den Port, und klicken Sie dann auf den Upload-Button.

  6. Öffnen Sie den Seriellen Monitor (Baudrate auf 115200 einstellen) und warten Sie auf eine erfolgreiche Verbindungsmeldung.

    ../../_images/09_blynk_upload_code.png
  7. Nach einer erfolgreichen Verbindung startet das Aktivieren des Schalters in Blynk die Überwachung des PIR-Moduls. Wenn eine Bewegung erkannt wird (Zustand 1), wird „Jemand ist hier!“ angezeigt und eine Warnung an Ihre E-Mail gesendet.

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

4. Code-Erklärung

  1. Konfiguration & Bibliotheken

    Hier richten Sie die Blynk-Konstanten und Zugangsdaten ein. Sie schließen auch die notwendigen Bibliotheken für den ESP32 und Blynk ein.

    /* 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. WiFi-Einrichtung

    Geben Sie Ihre WLAN-Zugangsdaten ein.

    char ssid[] = "your_ssid";
    char pass[] = "your_password";
    
  3. PIR-Sensor-Konfiguration

    Legen Sie den Pin fest, an dem der PIR-Sensor angeschlossen ist, und initialisieren Sie die Zustandsvariablen.

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

    Diese Funktion initialisiert den PIR-Sensor als Eingang, richtet die serielle Kommunikation ein, verbindet sich mit WLAN und konfiguriert Blynk.

    • Wir verwenden timer.setInterval(1000L, myTimerEvent) um das Timer-Intervall in setup() zu setzen. Hier legen wir fest, dass die Funktion myTimerEvent() alle 1000ms ausgeführt wird. Sie können den ersten Parameter von timer.setInterval(1000L, myTimerEvent) ändern, um das Intervall zwischen den Ausführungen von myTimerEvent zu variieren.


    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. loop() Funktion

    Die loop-Funktion führt kontinuierlich Blynk und die Blynk-Timer-Funktionen aus.

    void loop() {
       Blynk.run();
       timer.run();
    }
    
  6. Blynk-App-Interaktion

    Diese Funktionen werden aufgerufen, wenn das Gerät sich mit Blynk verbindet und wenn sich der Zustand des virtuellen Pins V0 in der Blynk-App ändert.

    • Jedes Mal, wenn das Gerät sich mit dem Blynk-Server verbindet oder aufgrund schlechter Netzwerkbedingungen erneut verbindet, wird die Funktion BLYNK_CONNECTED() aufgerufen. Der Befehl Blynk.syncVirtual() fordert einen einzelnen virtuellen Pinwert an. Der angegebene virtuelle Pin führt einen BLYNK_WRITE()-Aufruf durch.

    • Immer wenn sich der Wert eines virtuellen Pins auf dem BLYNK-Server ändert, wird BLYNK_WRITE() ausgelöst.


    // 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. Datenverarbeitung

    Jede Sekunde ruft die Funktion myTimerEvent() die Funktion sendData() auf. Wenn der Abwesenheitsmodus in Blynk aktiviert ist, überprüft sie den PIR-Sensor und sendet eine Benachrichtigung an Blynk, wenn eine Bewegung erkannt wird.

    • Wir verwenden Blynk.virtualWrite(V1, "Jemand in Ihrem Haus! Bitte überprüfen!"); um den Text eines Labels zu ändern.

    • Verwenden Sie Blynk.logEvent("intrusion_detected");, um ein Ereignis in Blynk zu protokollieren.


    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");
          }
       }
    }
    

Referenz