In diesem Tutorial lernen wir, wie man den ESP32 verwendet, um Wasserlecks zu erkennen und Echtzeit-Benachrichtigungen per E-Mail zu senden. Dieses Schritt-für-Schritt-Tutorial behandelt Sensoraufbau, Code-Beispiele und die Integration mit E-Mail-Diensten und sorgt dafür, dass Ihr Zuhause oder Ihr Büro vor potenziellen Wasserschäden geschützt ist. Perfekt für DIY-Enthusiasten und Smart-Home-Entwickler, die ihre Wasserleck-Erkennungssysteme verbessern möchten.
Offenlegung: Einige der in diesem Abschnitt bereitgestellten Links sind Amazon-Affiliate-Links. Wir können eine Provision für Käufe erhalten, die über diese Links getätigt werden, ohne zusätzliche Kosten für Sie. Wir schätzen Ihre Unterstützung.
Über Wassersensor und Gmail
Wir haben spezielle Tutorials zum Wassersensor und zu Gmail. Jedes Tutorial enthält detaillierte Informationen und Schritt-für-Schritt-Anleitungen zur Pinbelegung der Hardware, zum Funktionsprinzip, zur Verkabelung zum ESP32 und zum ESP32-Code... Weitere Informationen dazu finden Sie in den folgenden Links:
Verdrahtungsdiagramm zwischen Wassersensor und ESP32
Dieses Bild wurde mit Fritzing erstellt. Klicken Sie, um das Bild zu vergrößern.
Wenn Sie nicht wissen, wie Sie ESP32 und andere Komponenten mit Strom versorgen, finden Sie Anleitungen im folgenden Tutorial: Wie man ESP32 mit Strom versorgt.
ESP32-Code
/* * Dieser ESP32 Code wurde von newbiely.de entwickelt * Dieser ESP32 Code wird der Öffentlichkeit ohne jegliche Einschränkung zur Verfügung gestellt. * Für vollständige Anleitungen und Schaltpläne besuchen Sie bitte: * https://newbiely.de/tutorials/esp32/esp32-water-leak-email-notification*/#include <WiFi.h>#include <ESP_Mail_Client.h>#define WIFI_SSID "YOUR_WIFI_SSID"// CHANGE IT#define WIFI_PASSWORD "YOUR_WIFI_PASSWORD"// CHANGE IT// the sender email credentials#define SENDER_EMAIL "xxxxxx@gmail.com"// CHANGE IT#define SENDER_PASSWORD "xxxx xxxx xxxx xxxx"// CHANGE IT to your Google App password#define RECIPIENT_EMAIL "xxxxxx@gmail.com"// CHANGE IT#define SMTP_HOST "smtp.gmail.com"#define SMTP_PORT 587#define WATER_SENSOR_PIN 19 // ESP32 pin GPIO19 connected to water sensor's pinint water_state; // current state of water sensorint prev_water_state; // previous state of water sensorSMTPSessionsmtp;voidsetup() {Serial.begin(9600);WiFi.begin(WIFI_SSID, WIFI_PASSWORD);Serial.print("Connecting to Wi-Fi");while (WiFi.status() != WL_CONNECTED) {Serial.print(".");delay(300); }Serial.println();Serial.print("Connected with IP: ");Serial.println(WiFi.localIP());Serial.println();pinMode(WATER_SENSOR_PIN, INPUT_PULLUP); // set ESP32 pin to input pull-up mode water_state = digitalRead(WATER_SENSOR_PIN); // read state}voidloop() { prev_water_state = water_state; // save the last state water_state = digitalRead(WATER_SENSOR_PIN); // read new stateif (prev_water_state == HIGH && water_state == LOW) {Serial.println("Water leakage is detected!");String subject = "Email Notification from ESP32";String textMsg = "This is an email sent from ESP32.\n"; textMsg += "Water leakage is detected"; gmail_send(subject, textMsg); }}void gmail_send(String subject, String textMsg) {// set the network reconnection optionMailClient.networkReconnect(true);smtp.debug(1);smtp.callback(smtpCallback); Session_Config config;// set the session configconfig.server.host_name = SMTP_HOST;config.server.port = SMTP_PORT;config.login.email = SENDER_EMAIL;config.login.password = SENDER_PASSWORD;config.login.user_domain = F("127.0.0.1");config.time.ntp_server = F("pool.ntp.org,time.nist.gov");config.time.gmt_offset = 3;config.time.day_light_offset = 0;// declare the message class SMTP_Message message;// set the message headers message.sender.name = F("ESP32"); message.sender.email = SENDER_EMAIL; message.subject = subject; message.addRecipient(F("To Whom It May Concern"), RECIPIENT_EMAIL); message.text.content = textMsg; message.text.transfer_encoding = "base64"; message.text.charSet = F("utf-8"); message.priority = esp_mail_smtp_priority::esp_mail_smtp_priority_low;// set the custom message header message.addHeader(F("Message-ID: <abcde.fghij@gmail.com>"));// connect to the serverif (!smtp.connect(&config)) {Serial.printf("Connection error, Status Code: %d, Error Code: %d, Reason: %s\n", smtp.statusCode(), smtp.errorCode(), smtp.errorReason().c_str());return; }if (!smtp.isLoggedIn()) {Serial.println("Not yet logged in."); } else {if (smtp.isAuthenticated())Serial.println("Successfully logged in.");elseSerial.println("Connected with no Auth."); }// start sending Email and close the sessionif (!MailClient.sendMail(&smtp, &message))Serial.printf("Error, Status Code: %d, Error Code: %d, Reason: %s\n", smtp.statusCode(), smtp.errorCode(), smtp.errorReason().c_str());}// callback function to get the Email sending statusvoid smtpCallback(SMTP_Status status) {// print the current statusSerial.println(status.info());// print the sending resultif (status.success()) {Serial.println("----------------");Serial.printf("Email sent success: %d\n", status.completedCount());Serial.printf("Email sent failed: %d\n", status.failedCount());Serial.println("----------------\n");for (size_t i = 0; i < smtp.sendingResult.size(); i++) {// get the result item SMTP_Result result = smtp.sendingResult.getItem(i);Serial.printf("Message No: %d\n", i + 1);Serial.printf("Status: %s\n", result.completed ? "success" : "failed");Serial.printf("Date/Time: %s\n", MailClient.Time.getDateTimeString(result.timestamp, "%B %d, %Y %H:%M:%S").c_str());Serial.printf("Recipient: %s\n", result.recipients.c_str());Serial.printf("Subject: %s\n", result.subject.c_str()); }Serial.println("----------------\n");// free the memorysmtp.sendingResult.clear(); }}
Installieren Sie den Wassersensor an der Stelle, an der ein Wasserleck auftreten könnte.
Verbinden Sie das ESP32-Board mit dem Wassersensor.
Verbinden Sie das ESP32-Board mit Ihrem PC über ein Micro-USB-Kabel.
Öffnen Sie die Arduino IDE auf Ihrem PC.
Wählen Sie das richtige ESP32-Board (z. B. ESP32 Dev Module) und den COM-Port.
Öffnen Sie den Bibliotheks-Manager, indem Sie auf das Symbol Bibliotheks-Manager in der linken Navigationsleiste der Arduino IDE klicken.
Suchen Sie ESP Mail Client, dann finden Sie den von Mobizt erstellten ESP Mail Client.
Klicken Sie auf die Schaltfläche Installieren, um die ESP Mail Client-Bibliothek zu installieren.
Kopieren Sie den obigen Code und öffnen Sie ihn mit der Arduino IDE.
Ändern Sie die WiFi-Informationen (SSID und Passwort) im Code auf Ihre eigenen, indem Sie die Konstanten WIFI_SSID und WIFI_PASSWORD ändern.
Ändern Sie die Absender-E-Mail-Adresse und das Passwort im Code auf Ihre eigenen, indem Sie die Konstanten SENDER_EMAIL und SENDER_PASSWORD ändern.
Ändern Sie die Empfänger-E-Mail-Adresse im Code auf Ihre eigenen, indem Sie die Konstanten RECIPIENT_EMAIL ändern. Die Empfänger-E-Mail-Adresse kann dieselbe wie die Absender-E-Mail sein.
※ Notiz:
Die Absender-E-Mail-Adresse muss Gmail sein
Das Absender-Passwort ist ein App-Passwort, das Sie im vorherigen Schritt erhalten haben
Die Empfänger-E-Mail-Adresse kann jede Art von E-Mail-Adresse sein
Klicken Sie im Arduino IDE auf die Schaltfläche Hochladen, um den Code auf den ESP32 hochzuladen.
Öffnen Sie den seriellen Monitor.
Gießen Sie etwas Wasser auf den Wassersensor.
Sehen Sie sich das Ergebnis im seriellen Monitor an.
Newbiely | Arduino IDE 2.3.8
──
☐
✕
File
Edit
Sketch
Tools
Help
ESP32 Dev Module
Newbiely.ino
···
8Serial.println("Hello World!");
Output
Serial Monitor
Message (Enter to send message to 'ESP32 Dev Module' on 'COM15')
New Line
9600 baud
Water leakage is detected
#### Email sent successfully
> C: Email sent successfully
----------------
Message sent success: 1
Message sent failed: 0
----------------
Message No: 1
Status: success
Date/Time: May 27, 2024 04:42:50
Recipient: xxxxxx@gmail.com
Subject: Email Notification from ESP32
----------------
Ln 11, Col 1
ESP32 Dev Module on COM15
2
Überprüfen Sie das Postfach des Empfängers. Sie erhalten eine E-Mail wie unten:
Video Tutorial
Wir erwägen die Erstellung von Video-Tutorials. Wenn Sie Video-Tutorials für wichtig halten, abonnieren Sie bitte unseren YouTube-Kanal , um uns zu motivieren, die Videos zu erstellen.
Sie können gerne den Link zu diesem Tutorial teilen. Bitte verwenden Sie jedoch unsere Inhalte nicht auf anderen Websites. Wir haben viel Mühe und Zeit in die Erstellung der Inhalte investiert, bitte respektieren Sie unsere Arbeit!