ESP32 Thông Báo Email Phát Hiện Rò Rỉ Nước
Trong hướng dẫn này, chúng ta sẽ học cách sử dụng ESP32 để phát hiện rò rỉ nước và gửi thông báo tức thời qua email. Hướng dẫn từng bước này bao gồm thiết lập cảm biến, ví dụ code, và tích hợp với dịch vụ email, đảm bảo nhà hoặc văn phòng của bạn được bảo vệ khỏi thiệt hại do nước. Hoàn hảo cho những người đam mê DIY và các nhà phát triển smart home muốn nâng cao hệ thống phát hiện rò rỉ nước.
| 1 | × | mô-đun phát triển ESP-WROOM-32 | | |
| 1 | × | Alternatively, ESP32 Uno-form board | | |
| 1 | × | Alternatively, ESP32 S3 Uno-form board | | |
| 1 | × | Cáp USB Type-C | | |
| 1 | × | Cảm Biến Phát Hiện Rò Rỉ Nước | | |
| 1 | × | breadboard | | |
| 1 | × | Dây Jumper | | |
| 1 | × | (Tùy chọn) DC Power Jack | | |
| 1 | × | (Khuyến nghị) Screw Terminal Expansion Board for ESP32 | | |
| 1 | × | (Khuyến nghị) Breakout Expansion Board for ESP32 | | |
| 1 | × | (Khuyến nghị) Power Splitter for ESP32 | | |
Or you can buy the following kits:
| 1 | × | DIYables ESP32 Starter Kit (ESP32 included) | | |
| 1 | × | DIYables Sensor Kit (30 sensors/displays) | | |
| 1 | × | DIYables Sensor Kit (18 sensors/displays) | | |
Chúng tôi có các hướng dẫn cụ thể về Cảm Biến Nước và Gmail. Mỗi hướng dẫn chứa thông tin chi tiết và hướng dẫn từng bước về pinout phần cứng, nguyên lý hoạt động, kết nối đấu dây với ESP32, code ESP32... Tìm hiểu thêm về chúng tại các liên kết sau:

This image is created using Fritzing. Click to enlarge image
Nếu bạn chưa rõ cách cấp nguồn cho ESP32 và các linh kiện khác, xem: Cách Cung Cấp Nguồn Điện Cho ESP32.
#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();
}
}
Lắp đặt cảm biến nước ở vị trí có thể gặp phải rò rỉ nước
Kết nối board ESP32 với cảm biến nước
Kết nối board ESP32 với PC của bạn qua cáp micro USB
Mở Arduino IDE trên PC của bạn.
Chọn đúng board ESP32 (ví dụ: ESP32 Dev Module) và cổng COM.
Mở Library Manager bằng cách nhấp vào biểu tượng Library Manager trên thanh điều hướng bên trái của Arduino IDE.
Tìm kiếm ESP Mail Client, sau đó tìm ESP Mail Client được tạo bởi Mobizt.
Nhấp nút Install để cài đặt thư viện ESP Mail Client.
Copy code trên và mở bằng Arduino IDE
Thay đổi thông tin WiFi (SSID và password) trong code thành của bạn bằng cách thay đổi hai hằng số WIFI_SSID và WIFI_PASSWORD
Thay đổi email người gửi và password trong code thành của bạn bằng cách thay đổi hai hằng số SENDER_EMAIL và SENDER_PASSWORD
Thay đổi email người nhận trong code thành của bạn bằng cách thay đổi hai hằng số RECIPIENT_EMAIL. Email người nhận có thể giống như email người gửi
※ Lưu ý:
Email người gửi PHẢI là Gmail
Password người gửi là App passwords bạn đã lấy từ bước trước
Email người nhận có thể là bất kỳ loại email nào
Nhấp nút Upload trên Arduino IDE để tải code lên ESP32
Mở Serial Monitor
Đổ một ít nước lên cảm biến nước
Kiểm tra kết quả trên Serial 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
----------------
Việc sản xuất video tốn rất nhiều thời gian. Nếu video hướng dẫn hữu ích cho việc học của bạn, hãy đăng ký kênh YouTube để ủng hộ. Nếu nhu cầu đủ cao, chúng tôi sẽ cố gắng làm thêm nhiều video.