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

Hướng dẫn này sẽ cho bạn biết cách thiết lập ESP8266 để gửi email khi cửa mở. Chúng tôi sẽ đề cập đến quá trình thiết lập, các bộ phận cần thiết, và cung cấp hướng dẫn chi tiết từng bước về cách kết nối ESP8266 với một cảm biến cửa và một dịch vụ email. Điều này sẽ tăng cường an ninh cho ngôi nhà của bạn bằng cách thông báo ngay cho bạn qua email mỗi khi cửa mở.

thông báo email khi mở cửa bằng ESP8266 NodeMCU.

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

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×cảm biến cửa
1×(Tùy chọn) DC Power Jack
1×breadboard
1×dây jumper
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)

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

Chúng tôi cung cấp các hướng dẫn chi tiết về Cảm biến cửa và Gmail. Mỗi hướng dẫn đều có đầy đủ chi tiết và các bước hướng dẫn dễ hiểu để thiết lập phần cứng, hiểu cách nó hoạt động, và cách kết nối cũng như lập trình ESP8266. Bạn có thể tìm hiểu thêm về các hướng dẫn này bằng cách theo các liên kết sau đây:

Sơ đồ nối giữa cảm biến cửa và ESP8266

sơ đồ đấu dây cảm biến cửa ESP8266 NodeMCU

This image is created using Fritzing. Click to enlarge image

Xem thêm Sơ đồ chân ESP8266Cách cấp nguồn cho ESP8266.

Mã ESP8266

/* * 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-door-open-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 DOOR_SENSOR_PIN D7 // ESP8266 pin D7 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 ESP8266 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 ESP8266"; String textMsg = "This is an email sent from ESP8266.\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("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 server 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."); } // start sending Email and close the session 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()); } // 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()) { 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 memory smtp.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:

  • Xem hướng dẫn ESP8266 - Cài đặt phần mềm nếu đây là lần đầu tiên bạn sử dụng ESP8266.
  • Nối các thành phần như được hiển thị trong sơ đồ.
  • Gắn cảm biến cửa lên cửa của bạn.
  • Kết nối bảng ESP8266 với máy tính của bạn 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, chẳng hạn NodeMCU 1.0 (ESP-12E Module), và cổng COM tương ứng.
  • Trong Arduino IDE, nhấn vào biểu tượng Library Manager ở menu bên trái để mở nó.
  • Tìm kiếm ESP Mail Client và tìm ESP Mail Client do Mobizt phát triển.
  • Nhấp nút Install để thêm thư viện ESP Mail Client.
thư viện esp mail client cho ESP8266 NodeMCU
  • Sao chép mã và mở nó bằng Arduino IDE.
  • Nhập thông tin WiFi của bạn (tên mạng và mật khẩu) vào mã. Cập nhật WIFI_SSIDWIFI_PASSWORD với thông tin của bạn.
  • Đổi địa chỉ email và mật khẩu của người gửi trong mã. Thay SENDER_EMAILSENDER_PASSWORD bằng email và mật khẩu của bạn.
  • Cập nhật địa chỉ email người nhận trong RECIPIENT_EMAIL thành chính email của bạn, nếu cần. Nó có thể giống với email của người gửi.

※ Lưu ý:

Đảm bảo email của người gửi dùng Gmail. Sử dụng mật khẩu ứng dụng được tạo trước đó làm mật khẩu cho người gửi. Email của người nhận có thể thuộc bất kỳ loại nào.

  • Nhấp nút Tải lên trong Arduino IDE để gửi mã tới ESP8266.
  • Mở Serial Monitor.
  • Mở cửa.
  • Kiểm tra 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 ESP8266 ----------------
Autoscroll Show timestamp
Clear output
9600 baud  
Newline  
  • Kiểm tra hộp thư đến email của người mà bạn đã gửi email. Bạn sẽ thấy một email trông như thế này:
cảm biến cửa ESP8266 NodeMCU gửi email

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.