Einbruchmeldeanlage mit Blynk

Dieses Projekt demonstriert eine einfache häusliche Einbruchmeldeanlage mit einem passiven Infrarot (PIR) Sensor (HC-SR501). Wenn das System über die Blynk-App auf den ‚Abwesenheits‘-Modus gesetzt ist, überwacht der PIR-Sensor Bewegungen. Jede erkannte Bewegung löst eine Benachrichtigung in der Blynk-App aus und warnt den Benutzer vor einem möglichen Einbruch.

1. Schaltung aufbauen

Bemerkung

Das ESP8266-Modul benötigt einen hohen Strom, um eine stabile Betriebsumgebung zu gewährleisten. Stellen Sie daher sicher, dass die 9V-Batterie angeschlossen ist.

../_images/02-Wiring_intrusion_alert_system.png

2. Blynk konfigurieren

Bemerkung

Wenn Sie mit Blynk noch nicht vertraut sind, wird dringend empfohlen, diese beiden Tutorials zuerst zu lesen. Einführung in Blynk ist ein Einsteigerleitfaden für Blynk, der auch die Konfiguration von ESP8266 und die Registrierung bei Blynk umfasst. Und Flammenwarnsystem mit Blynk ist ein einfaches Beispiel, aber die Schritterklärung wird detaillierter sein.

2.1 Vorlage erstellen

Zunächst müssen wir eine Vorlage in Blynk erstellen. Folgen Sie den untenstehenden Schritten, um eine „Intrusion Alert System“-Vorlage zu erstellen.

../_images/02-create_template_shadow.png

2.2 Datenströme

Erstellen Sie Datastreams vom Typ Virtual Pin auf der Datenstrom-Seite, um Daten von ESP8266 und Uno R4-Board zu empfangen.

  • Erstellen Sie den virtuellen Pin V0 gemäß dem folgenden Schema:

    Setzen Sie den Namen des Virtual Pin V0 auf AwayMode. Legen Sie den DATA TYPE auf Integer und MIN und MAX auf 0 und 1 fest.

../_images/02-datastream_1_shadow.png
  • Erstellen Sie den virtuellen Pin V1 gemäß dem folgenden Schema:

    Setzen Sie den Namen des Virtual Pin V1 auf Current status. Legen Sie den DATA TYPE auf String fest.

../_images/02-datastream_2_shadow.png

Stellen Sie sicher, dass Sie zwei virtuelle Pins gemäß den oben beschriebenen Schritten eingerichtet haben.

../_images/02-datastream_3_shadow.png

2.3 Ereignis

Als nächstes erstellen wir ein event, das die Erkennung von Einbrüchen protokolliert und eine E-Mail-Benachrichtigung sendet.

Bemerkung

Es wird empfohlen, die Einstellungen mit meinen Einstellungen konsistent zu halten. Andernfalls müssen Sie möglicherweise den Code ändern, um das Projekt auszuführen. Stellen Sie sicher, dass der EVENT CODE als intrusion_detected festgelegt ist.

../_images/02-event_1_shadow.png

Gehen Sie zur Notifications-Seite und konfigurieren Sie die E-Mail-Einstellungen.

../_images/02-event_2_shadow.png

2.4 Web-Dashboard

Wir müssen auch das Web-Dashboard konfigurieren, um mit der Einbruchmeldeanlage interagieren zu können.

Ziehen Sie ein Switch widget und ein Label widget auf die Web-Dashboard-Seite.

../_images/02-web_dashboard_1_shadow.png

Auf der Einstellungsseite des Switch widget wählen Sie Datenstrom als AwayMode(V0). Setzen Sie ONLABEL und OFFLABEL, um „abwesend zu Hause“ anzuzeigen, wenn der Schalter eingeschaltet ist, und „zu Hause“, wenn der Schalter ausgeschaltet ist.

../_images/02-web_dashboard_2_shadow.png

Auf der Einstellungsseite des Label widget wählen Sie Datenstrom als Current status(V1).

../_images/02-web_dashboard_3_shadow.png

2.5 Vorlage speichern

Zum Schluss vergessen Sie nicht, die Vorlage zu speichern.

../_images/02-save_template_shadow.png

3. Code ausführen

  1. Öffnen Sie die Datei 02-Intrusion_alert_system.ino unter dem Pfad ultimate-sensor-kit\iot_project\wifi\02-Intrusion_alert_system oder kopieren Sie diesen Code in die Arduino IDE.

  2. Erstellen Sie ein Blynk-Gerät mit der Vorlage „Einbruchmeldesystem“. Anschließend ersetzen Sie die Werte für BLYNK_TEMPLATE_ID, BLYNK_TEMPLATE_NAME und BLYNK_AUTH_TOKEN durch Ihre eigenen.

    #define BLYNK_TEMPLATE_ID "TMPxxxxxxx"
    #define BLYNK_TEMPLATE_NAME "Intrusion Alert System"
    #define BLYNK_AUTH_TOKEN "xxxxxxxxxxxxx"
    
  3. Sie müssen auch die ssid und das Passwort des von Ihnen verwendeten WLANs eingeben.

    char ssid[] = "your_ssid";
    char pass[] = "your_password";
    
  4. Nach der Auswahl des richtigen Boards und Ports klicken Sie auf die Schaltfläche Hochladen.

  5. Öffnen Sie den seriellen Monitor (Baudrate auf 115200 einstellen) und warten Sie auf eine Meldung, die eine erfolgreiche Verbindung anzeigt.

    ../_images/02-ready_1_shadow.png

    Bemerkung

    Sollte die Meldung ESP is not responding erscheinen, wenn Sie eine Verbindung herstellen, befolgen Sie bitte diese Schritte:

    • Stellen Sie sicher, dass die 9V-Batterie angeschlossen ist.

    • Setzen Sie das ESP8266-Modul zurück, indem Sie den Pin RST für 1 Sekunde mit GND verbinden und dann trennen.

    • Drücken Sie die Reset-Taste auf dem R4-Board.

    Manchmal müssen Sie die oben genannten Schritte 3-5 Mal wiederholen, bitte haben Sie Geduld.

4. Code-Erklärung

  1. Konfiguration & Bibliotheken

    Hier werden Konstanten und Anmeldedaten für Blynk festgelegt. Die erforderlichen Bibliotheken für das ESP8266-WiFi-Modul und Blynk werden eingebunden.

    #define BLYNK_TEMPLATE_ID "TMPxxxx"
    #define BLYNK_TEMPLATE_NAME "Intrusion Alert System"
    #define BLYNK_AUTH_TOKEN "xxxxxx-"
    #define BLYNK_PRINT Serial
    
    #include <ESP8266_Lib.h>
    #include <BlynkSimpleShieldEsp8266.h>
    
  2. WiFi-Einrichtung

    Konfigurieren der WLAN-Zugangsdaten und Einrichten der seriellen Software-Kommunikation mit dem ESP01-Modul.

    char ssid[] = "your_ssid";
    char pass[] = "your_password";
    
    SoftwareSerial EspSerial(2, 3);
    #define ESP8266_BAUD 115200
    ESP8266 wifi(&EspSerial);
    
  3. PIR-Sensor-Konfiguration

    Definieren des Pins, an dem der PIR-Sensor angeschlossen ist, und Initialisieren der Zustandsvariablen.

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

    Diese initialisiert den PIR-Sensor als Eingang, richtet die serielle Kommunikation ein, stellt eine Verbindung zum WLAN her und konfiguriert Blynk.

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


    void setup() {
       pinMode(sensorPin, INPUT);
       Serial.begin(115200);
       EspSerial.begin(ESP8266_BAUD);
       delay(10);
       Blynk.config(wifi, BLYNK_AUTH_TOKEN);
       Blynk.connectWiFi(ssid, pass);
       timer.setInterval(1000L, myTimerEvent);
    }
    
  5. loop() Funktion

    Die Schleifenfunktion führt wiederholt 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 eine Verbindung zu Blynk herstellt und wenn sich der Zustand des virtuellen Pins V0 in der Blynk-App ändert.

    • Jedes Mal, wenn das Gerät eine Verbindung zum Blynk-Server herstellt oder aufgrund schlechter Netzwerkbedingungen erneut eine Verbindung herstellt, wird die Funktion BLYNK_CONNECTED() aufgerufen. Der Befehl Blynk.syncVirtual() fordert einen einzelnen virtuellen Pin-Wert an. Der angegebene virtuelle Pin wird BLYNK_WRITE() aufrufen. Weitere Details finden Sie unter Blynk - State Syncing .

    • Wann immer sich der Wert eines virtuellen Pins auf dem BLYNK-Server ändert, wird BLYNK_WRITE() ausgelöst. Weitere Details unter Blynk - 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. 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 bei erkannter Bewegung eine Benachrichtigung an Blynk.

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

    • Mit Blynk.logEvent("intrusion_detected"); wird ein Ereignis in Blynk protokolliert.


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

Referenzen