Arduino Thông báo email về rò rỉ nước

Trong hướng dẫn này, chúng ta sẽ học cách sử dụng Arduino để 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ẽ đi qua cách cài đặt cảm biến, trình bày các ví dụ về mã nguồn, và giải thích cách kết nối với các dịch vụ email. Việc này sẽ giúp giữ cho ngôi nhà hoặc văn phòng của bạn an toàn trước hư hỏng do nước. Điều này rất phù hợp với những người thích tự làm (DIY) và muốn cải thiện hệ thống phát hiện rò rỉ nước.

thông báo email về rò nước Arduino

Phần cứng cần chuẩn bị

1×Arduino UNO R4 WiFi
1×Alternatively, DIYables STEM V4 IoT
1×(Tùy chọn) DIYables STEM V4 IoT
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 Block Shield for Arduino UNO R4
1×(Khuyến nghị) Breadboard Shield for Arduino UNO R4
1×(Khuyến nghị) Enclosure for Arduino UNO R4
1×(Khuyến nghị) Power Splitter for Arduino UNO R4
1×(Khuyến nghị) Prototyping Base Plate & Breadboard Kit for Arduino UNO

Or you can buy the following kits:

1×DIYables STEM V4 IoT Starter Kit (Arduino included)
1×DIYables Sensor Kit (30 sensors/displays)
1×DIYables Sensor Kit (18 sensors/displays)

Giới thiệu 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ảm biến nước và Gmail. Mỗi hướng dẫn cung cấp chi tiết toàn diện và các bước dễ làm theo về cách lắp đặt phần cứng, cách hoạt động của nó, và cách kết nối và lập trình Arduino. Để tìm hiểu thêm, hãy truy cập các liên kết sau:

Sơ đồ nối dây giữa cảm biến nước và Arduino

sơ đồ nối dây cảm biến nước Arduino

This image is created using Fritzing. Click to enlarge image

Mã Arduino

/* * Mã Arduino này được phát triển bởi newbiely.vn * Mã Arduino 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/arduino/arduino-water-leak-email-notification */ #include <WiFiS3.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 7 // Arduino pin D7 connected to water sensor's pin int water_state; // current state of water sensor int prev_water_state; // previous state of water sensor 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); // set Arduino pin to input pull-up mode water_state = digitalRead(WATER_SENSOR_PIN); // read state } void loop() { prev_water_state = water_state; // save the last state water_state = digitalRead(WATER_SENSOR_PIN); // read new state if (prev_water_state == HIGH && water_state == LOW) { Serial.println("Water leakage is detected!"); String subject = "Email Notification from Arduino"; String textMsg = "This is an email sent from Arduino.\n"; textMsg += "Water leakage is detected"; gmail_send(subject, textMsg); } } void gmail_send(String subject, String textMsg) { // set the network reconnection option MailClient.networkReconnect(true); smtp.debug(1); smtp.callback(smtpCallback); Session_Config config; // set the session 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; // declare the message class SMTP_Message message; // set the message headers message.sender.name = F("Arduino"); 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 server if (!smtp.connect(&config)) { Serial.println("Connection error: "); Serial.print("- Status Code: "); Serial.println(smtp.statusCode()); Serial.print("- Error Code: "); Serial.println(smtp.errorCode()); Serial.print("- Reason: "); Serial.println(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."); } // start sending Email and close the session if (!MailClient.sendMail(&smtp, &message)) { Serial.println("Connection error: "); Serial.print("- Status Code: "); Serial.println(smtp.statusCode()); Serial.print("- Error Code: "); Serial.println(smtp.errorCode()); Serial.print("- Reason: "); Serial.println(smtp.errorReason().c_str()); } } // callback function to get the Email sending status void smtpCallback(SMTP_Status status) { // print the current status Serial.println(status.info()); // print the sending result if (status.success()) { for (size_t i = 0; i < smtp.sendingResult.size(); i++) { // get the result item SMTP_Result result = smtp.sendingResult.getItem(i); Serial.print("Status: "); if (result.completed) Serial.println("success"); else Serial.println("failed"); Serial.print("Recipient: "); Serial.println(result.recipients.c_str()); Serial.print("Subject: "); Serial.println(result.subject.c_str()); } Serial.println("----------------\n"); // free the memory smtp.sendingResult.clear(); } }

Hướng dẫn từng bước

  • Nếu đây là lần đầu bạn sử dụng Arduino Uno R4, hãy xem Cách bắt đầu với Arduino UNO R4.
  • Đặt cảm biến nước ở nơi có thể phát hiện rò rỉ nước.
  • Kết nối cảm biến nước với bo mạch Arduino.
  • Kết nối bo mạch Arduino với máy tính của bạn bằng cáp micro USB.
  • Mở Arduino IDE trên máy tính của bạn.
  • Chọn bo mạch Arduino đúng (Arduino Uno R4 WiFi) và cổng COM.
  • Mở Trình quản lý thư viện bằng cách nhấp vào biểu tượng Trình quản lý thư viện trong thanh điều hướng bên trái của Arduino IDE.
  • Tìm kiếm ESP Mail Client và chọn ESP Mail Client do Mobizt phát triển.
  • Nhấp vào nút Cài đặt để thêm thư viện ESP Mail Client.
thư viện Arduino esp mail client
  • Sao chép mã được cung cấp và mở nó trong Arduino IDE.
  • Cập nhật thông tin WiFi của bạn (SSID và mật khẩu) trong mã bằng cách chỉnh sửa WIFI_SSIDWIFI_PASSWORD.
  • Thay đổi email người gửi và mật khẩu bằng của bạn bằng cách chỉnh sửa SENDER_EMAILSENDER_PASSWORD.
  • Cập nhật địa chỉ email người nhận trong mã bằng cách chỉnh sửa RECIPIENT_EMAIL. Điều này có thể giống với email người gửi.

※ Lưu ý:

  • Địa chỉ email của người gửi phải là một tài khoản Gmail.
  • Mật khẩu của người gửi là mật khẩu ứng dụng được lấy từ bước trước.
  • Địa chỉ email của người nhận có thể là bất kỳ loại email nào.
  • Nhấn nút Tải lên trong Arduino IDE để tải mã lên Arduino.
  • Mở Trình theo dõi Serial.
  • Đổ nước lên cảm biến nước.
  • Xem kết quả trên Trình theo dõi Serial.
COM6
Send
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 Arduino ----------------
Autoscroll Show timestamp
Clear output
9600 baud  
Newline  
  • Kiểm tra hộp thư đến của bạn. Bạn sẽ nhận được một email như sau:
email cho cảm biến nước Arduino

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.