ESP8266 Thông báo email về rò rỉ nước
Hướng dẫn này sẽ chỉ cho bạn cách sử dụng ESP8266 để phát hiện rò rỉ nước và gửi cảnh báo qua email ngay lập tức. Chúng ta sẽ trình bày cách thiết lập cảm biến, cung cấp các ví dụ mã nguồn, và mô tả cách liên kết với các dịch vụ email. Điều này có thể bảo vệ ngôi nhà hoặc văn phòng của bạn khỏi thiệt hại do nước. Nó phù hợp với những người thích dự án DIY và muốn nâng cao hệ thống phát hiện rò rỉ nước của mình.
| 1 | × | ESP8266 NodeMCU ESP-12E | | |
| 1 | × | Recommended: ESP8266 NodeMCU ESP-12E (Uno-form) | | |
| 1 | × | USB Cable Type-A to Type-C (for USB-A PC) | | |
| 1 | × | USB Cable Type-C to Type-C (for USB-C PC) | | |
| 1 | × | Water Leak Detector | | |
| 1 | × | breadboard | | |
| 1 | × | dây jumper | | |
| 1 | × | (Tùy chọn) DC Power Jack | | |
| 1 | × | (Khuyến nghị) Screw Terminal Expansion Board for ESP8266 | | |
| 1 | × | (Khuyến nghị) Power Splitter for ESP8266 Type-C | | |
Or you can buy the following kits:
| 1 | × | DIYables Sensor Kit (30 sensors/displays) | | |
| 1 | × | DIYables Sensor Kit (18 sensors/displays) | | |
Chúng tôi cung cấp các hướng dẫn chi tiết về cách sử dụng Cảm biến nước và Gmail. Mỗi hướng dẫn bao gồm đầy đủ chỉ dẫn và các bước đơn giản để thiết lập phần cứng, hiểu cách nó hoạt động, và kết nối cũng như lập trình ESP8266. Để biết thêm thông tin, vui lòng truy cập các liên kết này.

This image is created using Fritzing. Click to enlarge image
Xem thêm Sơ đồ chân ESP8266 và Cách cấp nguồn cho ESP8266.
#include <ESP8266WiFi.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 D7
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 ESP8266";
String textMsg = "This is an email sent from ESP8266.\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("ESP8266");
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();
}
}
Để bắt đầu với ESP8266 trên Arduino IDE, hãy làm theo các bước sau:
Kết nối các thành phần như được hiển thị trong sơ đồ.
Đặt cảm biến nước ở vị trí có thể phát hiện rò rỉ.
Kết nối bo mạch ESP8266 với máy tính bằng cáp USB.
Mở Arduino IDE trên máy tính của bạn.
Chọn bo mạch ESP8266 phù hợp, ví dụ (NodeMCU 1.0 (ESP-12E Module)), và cổng COM tương ứng của nó.
Mở Quản lý thư viện bằng cách nhấp vào biểu tượng trong thanh điều hướng bên trái của Arduino IDE.
Tìm kiếm ESP Mail Client và tìm thư viện do Mobizt phát triển.
Nhấn nút Cài đặt để thêm thư viện ESP Mail Client.
Sao chép mã được cung cấp và mở nó bằng Arduino IDE.
Nhập thông tin WiFi của bạn, bao gồm tên mạng (SSID) và mật khẩu bằng cách chỉnh sửa WIFI_SSNID và WIFI_PASSWORD.
Thay đổi thông tin người gửi email thành của bạn bằng cách chỉnh sửa SENDER_EMAIL và SENDER_PASSWORD.
Đặt địa chỉ email của người nhận vào mã bằng cách cập nhật RECIPIENT_EMAIL. Điều này có thể là cùng một email với email của người gửi.
※ Lưu ý:
Người gửi phải sử dụng một tài khoản Gmail.
Mật khẩu của người gửi nên là mật khẩu ứng dụng mà bạn đã có trước đây.
Bạn có thể sử dụng bất kỳ loại email nào làm email của người nhận.
Nhấn nút Tải lên trong Arduino IDE để gửi mã nguồn đến ESP8266.
Mở Trình theo dõi nối tiếp.
Đổ nước lên cảm biến nước.
Kiểm tra kết quả trên Trình theo dõi nối tiếp.
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 ESP8266
----------------
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.