Bemerkung

Hallo und willkommen in der SunFounder Raspberry Pi & Arduino & ESP32 Enthusiasten-Gemeinschaft auf Facebook! Tauchen Sie tiefer ein in die Welt von Raspberry Pi, Arduino und ESP32 mit anderen Enthusiasten.

Warum beitreten?

  • Expertenunterstützung: Lösen Sie Nachverkaufsprobleme und technische Herausforderungen mit Hilfe unserer Gemeinschaft und unseres Teams.

  • Lernen & Teilen: Tauschen Sie Tipps und Anleitungen aus, um Ihre Fähigkeiten zu verbessern.

  • Exklusive Vorschauen: Erhalten Sie frühzeitigen Zugang zu neuen Produktankündigungen und exklusiven Einblicken.

  • Spezialrabatte: Genießen Sie exklusive Rabatte auf unsere neuesten Produkte.

  • Festliche Aktionen und Gewinnspiele: Nehmen Sie an Gewinnspielen und Feiertagsaktionen teil.

👉 Sind Sie bereit, mit uns zu erkunden und zu erschaffen? Klicken Sie auf [ hier ] und treten Sie heute bei!

Sicherheitssystem über IFTTT

Mit diesem Projekt erstellen wir ein Sicherheitsgerät, das einen PIR-Sensor verwendet, um Eindringlinge oder streunende Tiere, die Ihr Zuhause betreten, zu erkennen. Im Falle eines Einbruchs erhalten Sie eine E-Mail-Benachrichtigung.

Wir nutzen Webhooks als grundlegenden Dienst. Eine POST-Anfrage wird von UNO R4 an den IFTTT-Dienst gesendet.

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

Elite Explorer Kit

300+

Elite Explorer Kit

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

KOMPONENTENBESCHREIBUNG

KAUF-LINK

Arduino Uno R4 WiFi

-

Jumperkabel

KAUFEN

PIR-Bewegungssensormodul

KAUFEN

Verdrahtung

../_images/03-ifttt_pir_bb.png

Schaltplan

../_images/03-ifttt_pir_schematic.png

IFTTT einrichten

IFTTT ist ein kostenloser Dienst, der verschiedene Methoden bietet, um verschiedene Datendienste miteinander zu verknüpfen.

Erstellen wir ein Applet, das auf einen Webhook (benutzerdefinierte URL) reagiert, der Daten an IFTTT sendet, welcher Ihnen dann eine E-Mail sendet.

Bitte folgen Sie den untenstehenden Schritten auf IFTTT.

  1. Besuchen Sie IFTTT, um sich anzumelden oder ein Konto zu erstellen.

    ../_images/03_ifttt_1.png
  2. Klicken Sie auf Create.

    ../_images/03_ifttt_2.png
  3. Fügen Sie ein If This Ereignis hinzu.

    ../_images/03_ifttt_3.png
  4. Suchen Sie nach Webhooks.

    ../_images/03_ifttt_4.png
  5. Wählen Sie Receive a web request.

    ../_images/03_ifttt_5.png
  6. Geben Sie den Ereignisnamen ein (z. B. SecurityWarning) und klicken Sie auf Create trigger.

    ../_images/03_ifttt_6.png
  7. Fügen Sie ein Then That Ereignis hinzu.

    ../_images/03_ifttt_7.png
  8. Suchen Sie nach E-Mail.

    ../_images/03_ifttt_8.png
  9. Wählen Sie Send me an email.

    ../_images/03_ifttt_9.png
  10. Geben Sie den Subject und den Body ein, dann klicken Sie auf Create action.

  1. Klicken Sie auf Continue um die Einrichtung abzuschließen.

  1. Passen Sie nach Bedarf den Titelnamen an.

  1. Sie werden automatisch zur Seite mit den Applet-Details weitergeleitet, wo Sie sehen können, dass das Applet derzeit verbunden ist und Sie den Schalter zum Aktivieren/Deaktivieren umlegen können.

  1. Nachdem wir das IFTTT-Applet erstellt haben, benötigen wir auch den Webhooks-Schlüssel, den Sie von Webhooks Settings erhalten können, damit Ihr Gerät auf IFTTT zugreifen kann.

../_images/03_ifttt_14.png
  1. Kopieren Sie den Webhooks-Schlüssel in „arduino_secrets.h“ und tragen Sie Ihr SSID und Passwort ein.

    #define SECRET_SSID "your_ssid"        // your network SSID (name)
    #define SECRET_PASS "your_password"        // your network password (used for WPA, or as a key for WEP)
    #define WEBHOOKS_KEY "your_key"
    

Den Code ausführen

Bemerkung

  • Sie können die Datei 03_ifttt_pir.ino direkt im Pfad elite-explorer-kit-main\iot_project\03_ifttt_pir öffnen.

  • Oder kopieren Sie diesen Code in die Arduino IDE.

Bemerkung

Im Code werden SSID und Passwort in arduino_secrets.h gespeichert. Bevor Sie dieses Beispiel hochladen, müssen Sie sie mit Ihren eigenen WLAN-Anmeldeinformationen ändern. Außerdem sollten Sie aus Sicherheitsgründen diese Informationen vertraulich halten, wenn Sie den Code teilen oder speichern.

Warnung

Um zu verhindern, dass Ihr Postfach überflutet wird, debuggen Sie bitte den PIR-Bewegungssensormodul vorher, bevor Sie den Code für dieses Projekt ausführen.

arduino_secrets.h
#define SECRET_SSID "your_ssid"        // your network SSID (name)
#define SECRET_PASS "your_password"        // your network password (use for WPA, or use as key for WEP)
#define WEBHOOKS_KEY "your_key"
03_ifttt_pir.ino
  1/*
  2  This code is designed to connect an Arduino Uno R4 WiFi board to the internet and detect 
  3  motion using a PIR sensor. Upon detecting motion, it sends an HTTP GET request 
  4  to the IFTTT web service to trigger an event named "SecurityWarning". The code handles 
  5  WiFi connection setup, motion detection, server communication, and provides feedback via 
  6  the serial monitor.
  7
  8  Board: Arduino Uno R4 WiFi
  9  Component: PIR Motion Sensor Module
 10*/
 11
 12#include "WiFiS3.h"           // Include the WiFiS3 library for internet connectivity
 13#include "arduino_secrets.h"  // Include the file containing Wi-Fi credentials
 14
 15// Wi-Fi credentials are stored in arduino_secrets.h
 16char ssid[] = SECRET_SSID;
 17char pass[] = SECRET_PASS;
 18
 19int status = WL_IDLE_STATUS;
 20WiFiClient client;
 21
 22// IFTTT server information and event name
 23char server[] = "maker.ifttt.com";
 24char event[] = "SecurityWarning";
 25String webRequestURL = "/trigger/" + String(event) + "/with/key/" + String(WEBHOOKS_KEY);
 26
 27const int pirPin = 2;         // PIR sensor is connected to digital pin 2
 28bool motionDetected = false;  // Variable to track motion detection
 29
 30void setup() {
 31  Serial.begin(9600);
 32  while (!Serial) {
 33    ;
 34  }
 35
 36  // Check the status of the WiFi module
 37  if (WiFi.status() == WL_NO_MODULE) {
 38    Serial.println("Communication with WiFi module failed!");
 39    while (1)
 40      ;  // Infinite loop to halt further execution
 41  }
 42
 43  // Check if the WiFi firmware is up to date
 44  String fv = WiFi.firmwareVersion();
 45  if (fv < WIFI_FIRMWARE_LATEST_VERSION) {
 46    Serial.println("Please upgrade the firmware");
 47  }
 48
 49  // Attempt to connect to the Wi-Fi network
 50  while (status != WL_CONNECTED) {
 51    Serial.print("Attempting to connect to SSID: ");
 52    Serial.println(ssid);
 53    status = WiFi.begin(ssid, pass);
 54  }
 55  printWifiStatus();  // Print the status of the WiFi connection
 56
 57  pinMode(pirPin, INPUT);
 58}
 59
 60void loop() {
 61  readResponse();  // Read and print server response if available
 62
 63  // Check for motion using PIR sensor
 64  if (digitalRead(pirPin) == HIGH) {
 65    if (!motionDetected) {
 66      Serial.println("Motion detected!");
 67      triggerIFTTTEvent();  // Trigger IFTTT notification
 68      motionDetected = true;
 69    }
 70  } else {
 71    motionDetected = false;
 72  }
 73}
 74
 75void readResponse() {
 76  // Read incoming data from the WiFi connection
 77  uint32_t received_data_num = 0;
 78  while (client.available()) {
 79    char c = client.read();
 80    Serial.print(c);
 81    received_data_num++;
 82    if (received_data_num % 80 == 0) {
 83      Serial.println();
 84    }
 85  }
 86}
 87
 88void triggerIFTTTEvent() {
 89  client.stop();  // Terminate any existing connections
 90
 91  // Attempt to connect to the IFTTT server
 92  if (client.connect(server, 80)) {  // If the connection is successful
 93    Serial.println("connecting...");
 94    // Construct and send the HTTP GET request
 95    client.println("GET " + webRequestURL + " HTTP/1.1");
 96    client.println("Host: maker.ifttt.com");
 97    client.println("User-Agent: ArduinoWiFi/1.1");
 98    client.println("Connection: close");
 99    client.println();  // End of HTTP request
100  } else {
101    Serial.println("connection failed");  // Notify if the connection fails
102  }
103}
104
105void printWifiStatus() {
106  // Print the current Wi-Fi status to the serial monitor
107  Serial.print("SSID: ");
108  Serial.println(WiFi.SSID());
109
110  IPAddress ip = WiFi.localIP();
111  Serial.print("IP Address: ");
112  Serial.println(ip);
113
114  long rssi = WiFi.RSSI();
115  Serial.print("Signal Strength (RSSI):");
116  Serial.print(rssi);
117  Serial.println(" dBm");
118}

Wie funktioniert des?

  1. Einbinden der erforderlichen Bibliotheken und Header-Dateien:

    • "WiFiS3.h": Wird verwendet, um Wi-Fi-Verbindungen zu verwalten.

    • "arduino_secrets.h": Enthält den Namen und das Passwort des Wi-Fi-Netzwerks, um sensible Informationen zu schützen.

  2. Definition einiger globaler Variablen und Konstanten:

    • ssid: Name des Wi-Fi-Netzwerks.

    • pass: Wi-Fi-Netzwerkpasswort.

    • status: Status der Wi-Fi-Verbindung.

    • client: Client zur Kommunikation mit dem Wi-Fi-Server.

    • server: Adresse des IFTTT Webhook-Servers.

    • event: Name des IFTTT Webhook-Ereignisses.

    • webRequestURL: Konstruierte URL für das Senden von HTTP-Anfragen, einschließlich des Webhook-Ereignisnamens und -schlüssels.

    • pirPin: Digitaler Pin, an den der PIR-Sensor angeschlossen ist.

    • motionDetected: Flag-Variable zur Verfolgung der Bewegungserkennung.

  3. setup() Funktion:

    • Initialisiert die serielle Kommunikation.

    • Überprüft das Vorhandensein des Wi-Fi-Moduls und gibt dessen Firmware-Version aus.

    • Versucht, eine Verbindung zum Wi-Fi-Netzwerk herzustellen, mit Wiederholungen bei Misserfolg.

    • Setzt den an den PIR-Sensor angeschlossenen Pin auf Eingabemodus.

  4. readResponse() Funktion:

    • Liest HTTP-Antwortdaten vom IFTTT-Server und gibt sie auf der seriellen Konsole aus.

  5. loop() Funktion:

    • Ruft die Funktion readResponse() auf, um HTTP-Antwortdaten zu lesen.

    • Überprüft die Bewegung mithilfe des PIR-Sensors. Wenn eine Bewegung erkannt wird und zuvor nicht erkannt wurde:
      • Gibt „Motion detected!“ auf der Konsole aus.

      • Ruft die Funktion triggerIFTTTEvent() auf, um eine HTTP-Anfrage an den IFTTT-Server zu senden und das Webhook-Ereignis auszulösen.

      • Setzt das Flag motionDetected auf true, um anzuzeigen, dass eine Bewegung erkannt wurde.

    • Wenn keine Bewegung erkannt wird, setzt das Flag motionDetected auf false.

  6. triggerIFTTTEvent() Funktion:

    • Stellt eine Verbindung mit dem IFTTT-Server her.

    • Sendet eine HTTP-GET-Anfrage, einschließlich der URL des Webhook-Ereignisses und anderer HTTP-Header.

  7. printWifiStatus() Funktion:

    • Gibt Informationen über das verbundene Wi-Fi-Netzwerk aus, einschließlich SSID, IP-Adresse und Signalstärke (RSSI) auf der seriellen Konsole.