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.
Tiết lộ: Một số liên kết trong bài viết này là liên kết tiếp thị Amazon và có thể nhận hoa hồng theo chính sách của chương trình.
Về cảm biến nước và Gmail
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.
/* * Mã ESP8266 NodeMCU này được phát triển bởi newbiely.vn * Mã ESP8266 NodeMCU này được cung cấp để sử dụng công khai, không có ràng buộc. * Để xem hướng dẫn chi tiết và sơ đồ kết nối, vui lòng truy cập: * https://newbiely.vn/tutorials/esp8266/esp8266-water-leak-email-notification */#include <ESP8266WiFi.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 D7 // ESP8266 pin D7 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 ESP8266 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 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) {// 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("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;// 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(); }}
Hướng dẫn từng bước
Để 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.
Newbiely | Arduino IDE 2.3.8
──
☐
✕
File
Edit
Sketch
Tools
Help
Nodemcu 1.0 (ESP-12E Module)
Newbiely.ino
···
8Serial.println("Hello World!");
Output
Serial Monitor
Message (Enter to send message to 'Nodemcu 1.0 (ESP-12E 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 ESP8266
----------------
Ln 11, Col 1
Nodemcu 1.0 (ESP-12E Module) on COM15
2
Kiểm tra email của bạn. Bạn sẽ nhận được một email tương tự như thế này:
Video Tutorial
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.