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!

Lektion 49: Vibrationswarnsystem mit IFTTT

Dieses Projekt richtet ein Vibrationserkennungssystem mit einem Arduino-Board (Uno R4 oder R3), einem ESP8266-Modul und einem Vibrationsensor (SW-420) ein. Wenn eine Vibration erkannt wird, sendet das System eine HTTP-Anfrage an einen IFTTT-Server, wodurch verschiedene Aktionen wie das Senden einer Benachrichtigung oder einer E-Mail ausgelöst werden können.

Um übermäßige Warnungen innerhalb eines kurzen Zeitraums zu vermeiden, wurde das System so programmiert, dass diese HTTP-Anfragen in einem Mindestintervall von 2 Minuten (120.000 Millisekunden) gesendet werden. Dieses Intervall könnte je nach den Bedürfnissen des Benutzers angepasst werden.

Erforderliche Komponenten

Für dieses Projekt benötigen wir folgende Komponenten.

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

Name

ITEMS IN THIS KIT

LINK

Universal Maker Sensor Kit

94

Universal Maker Sensor Kit

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

Component Introduction

Purchase Link

Arduino UNO R3 or R4

KAUFEN

Steckbrett

KAUFEN

ESP8266-Modul

-

Vibrationssensormodul (SW-420)

-

Verkabelung

../_images/Lesson_49_Iot_vibration_alert_system_uno_bb.png

Konfigurieren von IFTTT

IFTTT ist ein privates kommerzielles Unternehmen, das im Jahr 2011 gegründet wurde und Online-Digitalautomatisierungsplattformen betreibt, die es als Dienstleistung anbietet. Ihre Plattformen bieten Benutzern eine visuelle Schnittstelle zum Erstellen plattformübergreifender if-Statements, die bis 2020 18 Millionen Menschen nutzen.

../_images/04-ifttt_intro.png

IFTTT steht für „If This Then That“. Grundsätzlich, wenn bestimmte Bedingungen erfüllt sind, wird etwas anderes passieren. Der „wenn dies“ Teil wird Auslöser genannt und der „dann das“ Teil wird Aktion genannt. Es verbindet Smart-Home-Geräte, soziale Medien, Liefer-Apps und mehr, um automatisierte Aufgaben auszuführen.

../_images/04-ifttt_intro_2A.png

1) Anmelden bei IFTTT

Geben Sie „https://ifttt.com“ in Ihren Browser ein und klicken Sie auf die Schaltfläche „Loslegen“, die sich in der Mitte der Seite befindet. Füllen Sie das Formular mit Ihren Informationen aus, um ein Konto zu erstellen.

../_images/04-ifttt_signup.png

Klicken Sie auf „Zurück“, um das Schnellstartfenster zu verlassen, kehren Sie zur IFTTT-Startseite zurück, aktualisieren Sie die Seite und melden Sie sich erneut an.

../_images/04-ifttt_signup_2.png

2) Erstellen des Applets

Klicken Sie auf „Erstellen“, um mit der Erstellung des Applets zu beginnen.

../_images/04-ifttt_create_applet_1_shadow.png

Wenn dieser Auslöser

Klicken Sie neben „Wenn dies“ auf „Hinzufügen“, um einen Auslöser hinzuzufügen.

../_images/04-ifttt_create_applet_2_shadow.png

Suchen Sie nach „Webhook“ und klicken Sie auf „Webhooks“.

../_images/04-ifttt_create_applet_3_shadow.png

Klicken Sie auf „Eine Webanforderung empfangen“ auf der in folgendem Bild gezeigten Seite.

../_images/04-ifttt_create_applet_4_shadow.png

Setzen Sie den „Ereignisnamen“ auf „vibration_detected“.

../_images/04-ifttt_create_applet_5_shadow.png

Dann diese Aktion

Klicken Sie auf „Hinzufügen“ neben „Dann das“, um eine Aktion hinzuzufügen.

../_images/04-ifttt_create_applet_6_shadow.png

Suchen Sie nach „E-Mail“ und klicken Sie auf „E-Mail“.

../_images/04-ifttt_create_applet_7_shadow.png

Klicken Sie auf „Sende mir eine E-Mail“ auf der Seite, die im folgenden Bild gezeigt wird.

../_images/04-ifttt_create_applet_8_shadow.png

Legen Sie den Betreff und den Inhalt der E-Mail fest, die bei Erkennung von Vibrationen gesendet werden sollen.

Als Referenz ist der Betreff auf „[ESP-01] Vibration erkannt!!!“ festgelegt und der Inhalt auf „Vibration erkannt, bitte bestätigen Sie die Situation umgehend! {{OccurredAt}}“. Beim Senden einer E-Mail wird {{OccurredAt}} automatisch durch die Zeit ersetzt, zu der das Ereignis aufgetreten ist.

../_images/04-ifttt_create_applet_9_shadow.png

Führen Sie die Erstellung des Applets gemäß den folgenden Schritten durch.

../_images/04-ifttt_create_applet_10_shadow.png ../_images/04-ifttt_create_applet_11_shadow.png ../_images/04-ifttt_create_applet_12_shadow.png

Code

  1. Öffnen Sie die Datei Lesson_49_Vibration_alert_system.ino im Pfad universal-maker-sensor-kit\arduino_uno\Lesson_49_Vibration_alert_system, oder kopieren Sie diesen Code in die Arduino IDE.

  2. Geben Sie das mySSID und myPWD des WiFi-Netzwerks ein, das Sie verwenden.

    String mySSID = "your_ssid";     // WiFi SSID
    String myPWD = "your_password";  // WiFi Password
    
  3. Ändern Sie auch die URL mit dem Ereignisnamen, den Sie festgelegt haben, und Ihrem API-Schlüssel.

    String URL = "/trigger/vibration_detected/with/key/xxxxxxxxxxxxxxxxxx";
    
    ../_images/04-ifttt_apikey_1_shadow.png ../_images/04-ifttt_apikey_2_shadow.png

    Hier finden Sie Ihren eindeutigen API-Schlüssel, den Sie privat halten müssen. Geben Sie den Ereignisnamen als vibration_detected ein. Ihre endgültige URL wird am unteren Rand der Webseite angezeigt. Kopieren Sie diese URL.

    ../_images/04-ifttt_apikey_3_shadow.png ../_images/04-ifttt_apikey_4_shadow.png
  4. Nach Auswahl des richtigen Boards und Ports klicken Sie auf die Upload-Schaltfläche.

  5. Öffnen Sie den Seriellen Monitor (Baudrate auf 9600 eingestellt) und warten Sie auf eine Meldung wie eine erfolgreiche Verbindung.

    ../_images/04-ready_shadow.png

Codeanalyse

Das ESP8266-Modul, das mit dem Kit geliefert wird, ist bereits mit AT-Firmware vorprogrammiert. Daher kann das ESP8266-Modul über AT-Befehle gesteuert werden. In diesem Projekt verwenden wir SoftwareSerial, um die Kommunikation zwischen dem Arduino Uno-Board und dem ESP8266-Modul zu ermöglichen. Das Arduino Uno-Board sendet AT-Befehle an das ESP8266-Modul für die Netzwerkverbindung und den Versand von Anfragen. Sie können sich auf ESP8266 AT Instruction Set beziehen.

Das Uno-Board liest die Sensorwerte und sendet AT-Befehle an das ESP8266-Modul. Das ESP8266-Modul verbindet sich mit einem Netzwerk und sendet Anfragen an IFTTT-Server.

  1. Schließen Sie die SoftwareSerial-Bibliothek für die serielle Kommunikation zwischen Arduino und ESP8266 ein.

    #include <SoftwareSerial.h>
    SoftwareSerial espSerial(2, 3);
    
  2. Konfigurieren Sie WiFi-Anmeldeinformationen und IFTTT-Serverdetails.

    String mySSID = "your_ssid";
    String myPWD = "your_password";
    String myHOST = "maker.ifttt.com";
    String myPORT = "80";
    String URL = "/trigger/xxx/with/key/xxxx";
    
  3. Definiere Variablen für den Vibrationssensor und die Steuerung der Alarmfrequenz

    unsigned long lastAlertTime = 0;
    const unsigned long postingInterval = 120000L;
    const int sensorPin = 7;
    
  4. In setup(), initialisiere die serielle Kommunikation, das ESP8266-Modul und verbinde mit WiFi

    void setup() {
      Serial.begin(9600);
      espSerial.begin(115200);
    
      // Initialize the ESP8266 module
      sendATCommand("AT+RST", 1000, DEBUG);   //Reset the ESP8266 module
      sendATCommand("AT+CWMODE=1", 1000, DEBUG);  //Set the ESP mode as station mode
      sendATCommand("AT+CWJAP=\"" + mySSID + "\",\"" + myPWD + "\"", 3000, DEBUG);  //Connect to WiFi network
    
      while (!espSerial.find("OK")) {
        //Wait for connection
      }
    }
    
  5. In loop(), erkenne Vibrationen und sende Alarm, wenn Zeitintervall abgelaufen ist

    void loop() {
    
      if (digitalRead(sensorPin)) {
        if (lastAlertTime == 0 || millis() - lastAlertTime > postingInterval) {
          Serial.println("Detected vibration!!!");
          sendAlert();  //Send an HTTP request to IFTTT server
        } else {
          Serial.print("Detected vibration!!! ");
          Serial.println("Since an email has been sent recently, no warning email will be sent this time to avoid bombarding your inbox.");
        }
      } else {
        if (DEBUG) {
          Serial.println("Detecting...");
        }
      }
      delay(500);
    }
    
  6. sendeAlarm() konstruiert die HTTP-Anfrage und sendet sie über ESP8266

    void sendAlert() {
    
      String sendData = "GET " + URL + " HTTP/1.1" + "\r\n";
      sendData += "Host: maker.ifttt.com\r\n";
    
      sendATCommand("AT+CIPMUX=0",1000,DEBUG);
      sendATCommand("AT+CIPSTART=...",3000,DEBUG);
      sendATCommand("AT+CIPSEND=" + String(sendData.length()),1000,DEBUG);
      espSerial.println(sendData);
    
    }
    
  7. Umgang mit AT-Befehlen in sendeATBefehl()

    Diese Funktion sendet AT-Befehle an das ESP8266 und sammelt die Antworten.

    void sendATCommand(String command, const int timeout, boolean debug) {
      // Print and send command
      Serial.print("AT Command ==> ");
      Serial.print(command);
      Serial.println();
      espSerial.println(command);  // Send the AT command
    
      // Get the response from the ESP8266 module
      String response = "";
      long int time = millis();
      while ((time + timeout) > millis()) {  // Wait for the response until the timeout
        while (espSerial.available()) {
          char c = espSerial.read();
          response += c;
        }
      }
    
      // Print response if debug mode is on
      if (debug) {
        Serial.println(response);
        Serial.println("--------------------------------------");
      }
    

Referenz