In deze handleiding leert u hoe u de ESP32 kunt gebruiken om waterlekken te detecteren en real-time meldingen via e-mail te sturen. Deze stapsgewijze handleiding behandelt het opzetten van de sensor, codevoorbeelden en integratie met e-maildiensten, zodat uw huis of kantoor beschermd blijft tegen mogelijke waterschade. Perfect voor doe-het-zelvers en smart home-ontwikkelaars die hun waterleksystemen willen verbeteren.
Openbaarmaking: Sommige van de links in deze sectie zijn Amazon-affiliate links. We kunnen een commissie ontvangen voor aankopen die via deze links worden gedaan, zonder extra kosten voor u. We waarderen uw steun.
Over de Water Sensor en Gmail
We hebben specifieke tutorials over de Water Sensor en Gmail. Elke tutorial bevat gedetailleerde informatie en stapsgewijze instructies over de hardware pinout, werkingsprincipe, aansluiting op de ESP32 en ESP32 code... Lees er meer over via de volgende links:
Deze afbeelding is gemaakt met Fritzing. Klik om de afbeelding te vergroten.
ESP32 Code
/* * Deze ESP32 code is ontwikkeld door newbiely.nl * Deze ESP32 code wordt zonder enige beperking aan het publiek beschikbaar gesteld. * Voor volledige instructies en schema's, bezoek: * https://newbiely.nl/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(); }}
Installeer de waterleksensor op de plaats waar waterlek kan optreden
Verbind de ESP32 met de waterleksensor
Verbind de ESP32 met uw PC via een micro USB-kabel
Open Arduino IDE op uw PC
Selecteer de juiste ESP32 board (bijvoorbeeld ESP32 Dev Module) en de bijbehorende COM-poort
Open de Library Manager door te klikken op het Library Manager-icoon in de linker navigatiebalk van Arduino IDE
Zoek op ESP Mail Client en vind de ESP Mail Client gemaakt door Mobizt
Klik op de Install-knop om de ESP Mail Client bibliotheek te installeren
Kopieer bovenstaande code en open deze met Arduino IDE
Pas de WiFi-informatie (SSID en wachtwoord) in de code aan door de constants WIFI_SSID en WIFI_PASSWORD te wijzigen
Pas het afzender e-mailadres en wachtwoord aan in de code door de constants SENDER_EMAIL en SENDER_PASSWORD te wijzigen
Pas het ontvanger e-mailadres aan in de code door de constant RECIPIENT_EMAIL te wijzigen. Dit e-mailadres kan gelijk zijn aan het afzenderadres
※ Notiz:
Het afzender e-mailadres MOET Gmail zijn
Het wachtwoord is het App-wachtwoord dat u in de vorige stap heeft aangemaakt
Het ontvanger e-mailadres kan elk type e-mailadres zijn
Klik op de Upload-knop in Arduino IDE om de code naar de ESP32 te uploaden
Open de Seriële Monitor
Giet wat water op de waterleksensor
Kijk naar het resultaat in de Seriële Monitor
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
Controleer de inbox van de ontvanger. U zult een e-mail ontvangen zoals hieronder weergegeven:
Video Tutorial
We overwegen het maken van videotutorials. Als u videotutorials belangrijk vindt, abonneer u dan op ons YouTube-kanaal om ons te motiveren de video's te maken.
Bekijk onze video-tutorial voor een visuele begeleiding bij dit project! De video biedt extra inzichten en demonstraties om het aansluiten en programmeren van de waterleksensor met ESP32 eenvoudiger te maken.
U bent welkom om de link naar deze tutorial te delen. Gebruik onze inhoud echter niet op andere websites. We hebben veel moeite en tijd gestoken in het maken van de inhoud, respecteer alstublieft ons werk!