이 튜토리얼에서는 ESP32와 힘 센서를 사용하여 누군가 당신의 물건을 가져갈 때 그것을 감지하는 방법을 배우게 됩니다. 이 자세한 가이드는 Gmail을 통해 즉각적인 이메일 알림을 보내는 도난 감지 시스템을 설정하는 방법을 안내합니다. ESP32 구성, 힘 센서 통합, 이메일 알림 시스템 코딩에 이르기까지 모든 과정을 다룹니다. 도난 감지 및 이메일 경보를 위해 ESP32와 힘 센서를 사용하는 것의 이점, 단계별 지침 및 실용적인 적용 사례를 알아보세요.
힘 센서는 물걍을 센서 위에 올려놓았을 때 얼마나 무거운지 측정할 수 있습니다. 물건을 힘 센서 위에 올려놓으면 ESP32가 이 무게를 읽고 기록합니다. 누군가 당신의 물건을 가져가면 센서의 무게가 변합니다. ESP32는 이 변화를 감지하고 이메일 알림을 보내어 물건이 움직였음을 알려줍니다.
ESP32 및 다른 구성 요소에 전원을 공급하는 방법에 대해 잘 알지 못하는 경우, 다음 튜토리얼에서 안내를 찾을 수 있습니다: ESP32 전원 공급 방법.
ESP32 코드
/* * 이 ESP32 코드는 newbiely.kr 에서 개발되었습니다 * 이 ESP32 코드는 어떠한 제한 없이 공개 사용을 위해 제공됩니다. * 상세한 지침 및 연결도에 대해서는 다음을 방문하세요: * https://newbiely.kr/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 valueSMTPSessionsmtp;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(DOOR_SENSOR_PIN, INPUT_PULLUP); // set ESP32 pin to input pull-up mode door_state = digitalRead(DOOR_SENSOR_PIN); // read state}voidloop() {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 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("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 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(); }}