ESP32 Bảo Vệ Tài Sản: Phát Hiện Trộm Cắp và Gửi Email Cảnh Báo

Trong hướng dẫn này, chúng ta sẽ học cách bảo vệ tài sản quý giá của bạn bằng cách sử dụng ESP32 và cảm biến lực để phát hiện khi có ai đó lấy đồ của bạn. Hướng dẫn chi tiết này sẽ đưa bạn qua từng bước thiết lập hệ thống phát hiện trộm cắp có thể gửi thông báo email tức thì qua Gmail. Tutorial của chúng tôi bao gồm mọi thứ từ cấu hình ESP32, tích hợp cảm biến lực, và lập trình hệ thống cảnh báo email. Khám phá những lợi ích, hướng dẫn từng bước, và các ứng dụng thực tế của việc sử dụng ESP32 và cảm biến lực để phát hiện trộm cắp và cảnh báo qua email.

ESP32 theft detection email notification

Phần Cứng Cần Thiết

1×mô-đun phát triển ESP-WROOM-32
1×Alternatively, ESP32 Uno-form board
1×Alternatively, ESP32 S3 Uno-form board
1×Cáp USB Type-C
1×Cảm biến lực (Force Sensor)
1×Điện trở 10 kΩ
1×breadboard (bo mạch thí nghiệm)
1×Dây jumper
1×DC Power Jack (tùy chọn)
1×(Khuyến nghị) Screw Terminal Expansion Board for ESP32
1×(Khuyến nghị) Breakout Expansion Board for ESP32
1×(Khuyến nghị) Power Splitter for ESP32

Or you can buy the following kits:

1×DIYables ESP32 Starter Kit (ESP32 included)
1×DIYables Sensor Kit (30 sensors/displays)
1×DIYables Sensor Kit (18 sensors/displays)

Về Cảm Biến Lực và Gmail

Chúng tôi có các hướng dẫn chuyên biệt về Cảm biến lực và Gmail. Mỗi tutorial chứa thông tin chi tiết và hướng dẫn từng bước về pinout phần cứng, nguyên lý hoạt động, kết nối dây với ESP32, code ESP32... Tìm hiểu thêm về chúng tại các liên kết sau:

Cách hoạt động của hệ thống phát hiện trộm cắp

Cảm biến lực có thể đo được trọng lượng của vật thể khi bạn đặt lên cảm biến. Khi bạn đặt vật dụng của mình lên cảm biến lực, ESP32 sẽ đọc và ghi lại trọng lượng này. Nếu có ai đó lấy vật dụng của bạn, trọng lượng trên cảm biến sẽ thay đổi. ESP32 phát hiện sự thay đổi này và gửi thông báo email cho bạn biết rằng vật dụng của bạn đã bị di chuyển.

Sơ Đồ Đấu Nối giữa Cảm Biến Lực và ESP32

  • Cách kết nối ESP32 và cảm biến lực sử dụng breadboard
ESP32 force sơ đồ đấu dây

This image is created using Fritzing. Click to enlarge image

Nếu bạn chưa rõ cách cấp nguồn cho ESP32 và các linh kiện khác, xem: Cách Cung Cấp Nguồn Điện Cho ESP32.

how to connect ESP32 and cảm biến lực

Code ESP32

/* * Mã ESP32 này được phát triển bởi newbiely.vn * Mã ESP32 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/esp32/esp32-secure-your-belongings-detect-theft-and-send-email-alerts */ #include <WiFi.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 FORCE_SENSOR_PIN 36 // ESP32 pin GPIO36 (ADC0): the FSR and 10K pulldown are connected to A0 #define THRESHOLD 100 // may need to callibrate this value SMTPSession smtp; void setup() { Serial.begin(9600); // set the ADC attenuation to 11 dB (up to ~3.3V input) analogSetAttenuation(ADC_11db); 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 ESP32 pin to input pull-up mode door_state = digitalRead(DOOR_SENSOR_PIN); // read state } void loop() { int forceValue = analogRead(FORCE_SENSOR_PIN); if (forceValue < THRESHOLD) { Serial.println("Alert! Someone has stolen your stuff!"); String subject = "Email Notification from ESP32"; String textMsg = "This is an email sent from ESP32.\n"; textMsg += "Alert! Someone has stolen your stuff!"; 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("ESP32"); 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(); } }

Các Bước Thực Hiện

  • Nếu đây là lần đầu tiên bạn sử dụng ESP32, hãy xem ESP32 - Cài Đặt Phần Mềm.
  • Kết nối board ESP32 với cảm biến lực
  • Đặt đồ đạc của bạn lên cảm biến lực
  • Kết nối board ESP32 với PC của bạn qua cáp USB
  • Mở Arduino IDE trên PC của bạn.
  • Chọn đúng board ESP32 (ví dụ: ESP32 Dev Module) và cổng COM.
  • Mở Library Manager bằng cách nhấp vào biểu tượng Library Manager trên thanh điều hướng bên trái của Arduino IDE.
  • Tìm kiếm ESP Mail Client, sau đó tìm ESP Mail Client được tạo bởi Mobizt.
  • Nhấp nút Install để cài đặt thư viện ESP Mail Client.
ESP32 esp mail client thư viện
  • Sao chép code ở trên và mở bằng Arduino IDE
  • Thay đổi thông tin WiFi (SSID và password) trong code thành của bạn bằng cách thay đổi hai hằng số WIFI_SSIDWIFI_PASSWORD
  • Thay đổi email người gửi và password trong code thành của bạn bằng cách thay đổi hai hằng số SENDER_EMAILSENDER_PASSWORD
  • Thay đổi email người nhận trong code thành của bạn bằng cách thay đổi hằng số RECIPIENT_EMAIL. Email người nhận có thể giống với email người gửi

※ Lưu ý:

  • Email người gửi PHẢI là Gmail
  • Password người gửi là App passwords bạn đã lấy từ bước trước
  • Email người nhận có thể là bất kỳ loại email nào
  • Nhấp nút Upload trên Arduino IDE để upload code lên ESP32
  • Mở Serial Monitor
  • Lấy đồ đạc của bạn ra khỏi cảm biến lực
  • Kiểm tra kết quả trên Serial Monitor.
COM6
Send
Alert! Someone has stolen your stuff! #### 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 ESP32 ----------------
Autoscroll Show timestamp
Clear output
9600 baud  
Newline  
  • Kiểm tra hộp thư email người nhận của bạn. Bạn sẽ nhận được email như bên dưới:
ESP32 theft detection 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.