ESP32 - Waterlek E-mailmelding
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.
Of u kunt de volgende kits kopen:
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.
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:

This image is created using Fritzing. Click to enlarge image
#include <WiFi.h>
#include <ESP_Mail_Client.h>
#define WIFI_SSID "YOUR_WIFI_SSID"
#define WIFI_PASSWORD "YOUR_WIFI_PASSWORD"
#define SENDER_EMAIL "xxxxxx@gmail.com"
#define SENDER_PASSWORD "xxxx xxxx xxxx xxxx"
#define RECIPIENT_EMAIL "xxxxxx@gmail.com"
#define SMTP_HOST "smtp.gmail.com"
#define SMTP_PORT 587
#define WATER_SENSOR_PIN 19
int water_state;
int prev_water_state;
SMTPSession smtp;
void setup() {
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);
water_state = digitalRead(WATER_SENSOR_PIN);
}
void loop() {
prev_water_state = water_state;
water_state = digitalRead(WATER_SENSOR_PIN);
if (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) {
MailClient.networkReconnect(true);
smtp.debug(1);
smtp.callback(smtpCallback);
Session_Config config;
config.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;
SMTP_Message message;
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;
message.addHeader(F("Message-ID: <abcde.fghij@gmail.com>"));
if (!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.");
else
Serial.println("Connected with no Auth.");
}
if (!MailClient.sendMail(&smtp, &message))
Serial.printf("Error, Status Code: %d, Error Code: %d, Reason: %s\n", smtp.statusCode(), smtp.errorCode(), smtp.errorReason().c_str());
}
void smtpCallback(SMTP_Status status) {
Serial.println(status.info());
if (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++) {
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");
smtp.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
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
----------------
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.