Arduino Thông báo email khi cửa mở

Trong hướng dẫn này, chúng ta sẽ học cách sử dụng Arduino để gửi email khi cửa mở. Chúng ta sẽ giải thích cách thiết lập nó, những bộ phận bạn cần, và cung cấp cho bạn các bước chi tiết để kết nối Arduino với cảm biến cửa và một dịch vụ email. Điều này sẽ giúp tăng cường an ninh cho ngôi nhà của bạn bằng cách gửi cho bạn các cảnh báo email ngay lập tức khi cửa mở.

thông báo email về cửa mở bằng 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×cảm biến cửa
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)

Về cảm biến cửa và Gmail

Chúng tôi cung cấp các bài hướng dẫn chi tiết về Cảm biến cửa và Gmail. Mỗi hướng dẫn đều bao gồm các chi tiết toàn diện và các chỉ dẫn rõ ràng, theo trình tự từng bước về cách lắp đặt phần cứng, nguyên lý hoạt động, và cách kết nối và lập trình Arduino. Bạn có thể tìm hiểu thêm về các hướng dẫn này thông qua các liên kết sau:

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

sơ đồ nối dây cảm biến cửa 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-door-open-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 DOOR_SENSOR_PIN 13 // Arduino pin connected to door sensor's pin int door_state; // current state of door sensor int prev_door_state; // previous state of door 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(DOOR_SENSOR_PIN, INPUT_PULLUP); // set Arduino pin to input pull-up mode door_state = digitalRead(DOOR_SENSOR_PIN); // read state } void loop() { prev_door_state = door_state; // save the last state door_state = digitalRead(DOOR_SENSOR_PIN); // read new state if (prev_door_state == LOW && door_state == HIGH) { // state change: LOW -> HIGH Serial.println("The door is opened"); String subject = "Email Notification from Arduino"; String textMsg = "This is an email sent from Arduino.\n"; textMsg += "Your door is opened"; gmail_send(subject, textMsg); } else if (prev_door_state == HIGH && door_state == LOW) { // state change: HIGH -> LOW Serial.println("The door is closed"); } } 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, xem Cách bắt đầu với Arduino UNO R4.
  • Gắn cảm biến cửa lên cửa của bạn.
  • Kết nối bo mạch Arduino với cảm biến cửa.
  • 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 phù hợp (Arduino Uno R4 WiFi) và cổng COM.
  • Trong Arduino IDE, nhấp vào biểu tượng 'Trình quản lý thư viện' ở thanh bên trái để mở nó.
  • Nhập ESP Mail Client vào ô tìm kiếm, và tìm ESP Mail Client do Mobizt.
  • Nhấp 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ó bằng Arduino IDE.
  • Cập nhật chi tiết WiFi của bạn (tên mạng và mật khẩu) trong mã. Thay đổi giá trị của WIFI_SSIDWIFI_PASSWORD thành của bạn.
  • Chỉnh sửa địa chỉ email và mật khẩu của người gửi trong mã. Thay đổi SENDER_EMAILSENDER_PASSWORD.

※ Lưu ý:

Hãy đảm bảo email của người gửi thuộc Gmail. Sử dụng mật khẩu ứng dụng từ bước trước làm mật khẩu của người gửi. 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ở Serial Monitor
  • Mở cửa
  • Xem kết quả trên Serial Monitor.
COM6
Send
The door is opened #### 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 email của người nhận. Bạn sẽ nhận được một email tương tự như sau:
email của cảm biến cửa 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.