ESP32 - 소지품 보호: 도난 감지 및 이메일 알림 보내기 | ESP32 - Secure Your Belongings: Detect Theft and Send Email Alerts
이 튜토리얼에서는 ESP32와 힘 센서를 사용하여 누군가 당신의 물건을 가져갈 때 그것을 감지하는 방법을 배우게 됩니다. 이 자세한 가이드는 Gmail을 통해 즉각적인 이메일 알림을 보내는 도난 감지 시스템을 설정하는 방법을 안내합니다. ESP32 구성, 힘 센서 통합, 이메일 알림 시스템 코딩에 이르기까지 모든 과정을 다룹니다. 도난 감지 및 이메일 경보를 위해 ESP32와 힘 센서를 사용하는 것의 이점, 단계별 지침 및 실용적인 적용 사례를 알아보세요.
공개: 이 섹션에서 제공된 링크 중 일부는 제휴 링크입니다. 이 링크를 통해 구매한 경우 추가 비용없이 수수료를 받을 수 있습니다. 지원해 주셔서 감사합니다.
포스 센서와 Gmail에 대한 구체적인 튜토리얼이 있습니다. 각 튜토리얼에는 하드웨어 핀 아웃, 작동 원리, ESP32와의 배선 연결, ESP32 코드에 대한 자세한 정보와 단계별 지침이 포함되어 있습니다. 다음 링크에서 자세히 알아보세요:
힘 센서는 물걍을 센서 위에 올려놓았을 때 얼마나 무거운지 측정할 수 있습니다. 물건을 힘 센서 위에 올려놓으면 ESP32가 이 무게를 읽고 기록합니다. 누군가 당신의 물건을 가져가면 센서의 무게가 변합니다. ESP32는 이 변화를 감지하고 이메일 알림을 보내어 물건이 움직였음을 알려줍니다.
이 이미지는 Fritzing을 사용하여 만들어졌습니다. 이미지를 확대하려면 클릭하세요.
ESP32 및 다른 구성 요소에 전원을 공급하는 방법에 대해 잘 알지 못하는 경우, 다음 튜토리얼에서 안내를 찾을 수 있습니다: ESP32 전원 공급 방법.
#include <WiFi.h>
#include <ESP_Mail_Client.h>
#define WIFI_SSID "YOUR_WIFI_SSID"
#define WIFI_PASSWORD "YOUR_WIFI_PASSWORD"
#define SENDER_EMAIL "xxxxxx@gmail.com"
#define SENDER_PASSWORD "xxxx xxxx xxxx xxxx"
#define RECIPIENT_EMAIL "xxxxxx@gmail.com"
#define SMTP_HOST "smtp.gmail.com"
#define SMTP_PORT 587
#define FORCE_SENSOR_PIN 36
#define THRESHOLD 100
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);
door_state = digitalRead(DOOR_SENSOR_PIN);
}
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) {
MailClient.networkReconnect(true);
smtp.debug(1);
smtp.callback(smtpCallback);
Session_Config 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;
SMTP_Message message;
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;
message.addHeader(F("Message-ID: <abcde.fghij@gmail.com>"));
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.");
}
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());
}
void smtpCallback(SMTP_Status status) {
Serial.println(status.info());
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++) {
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");
smtp.sendingResult.clear();
}
}
힘 센서에 ESP32 보드를 연결하십시오.
물건을 힘 센서 위에 올려놓으십시오.
USB 케이블을 통해 ESP32 보드를 PC에 연결하십시오.
PC에서 Arduino IDE를 엽니다.
올바른 ESP32 보드(예: ESP32 Dev Module)와 COM 포트를 선택하십시오.
Arduino IDE의 왼쪽 네비게이션 바에 있는 Library Manager 아이콘을 클릭하여 라이브러리 매니저를 엽니다.
ESP Mail Client를 검색한 후 Mobizt가 만든 ESP Mail Client를 찾으십시오.
Install 버튼을 클릭하여 ESP Mail Client 라이브러리를 설치하십시오.
위의 코드를 복사하여 아두이노 IDE에서 열기
코드 내의 WiFi 정보(SSID 및 비밀번호)를 WIFI_SSID와 WIFI_PASSWORD 두 상수를 변경하여 자신의 것으로 바꾸기
코드 내의 발신자 이메일과 비밀번호를 SENDER_EMAIL과 SENDER_PASSWORD 두 상수를 변경하여 자신의 것으로 바꾸기
코드 내의 수신자 이메일을 RECIPIENT_EMAIL 두 상수를 변경하여 자신의 것으로 바꾸기. 수신자 이메일은 발신자 이메일과 동일할 수 있음
※ NOTE THAT:
발신자 이메일은 반드시 Gmail이어야 합니다
발신자 비밀번호는 이전 단계에서 받은 앱 비밀번호입니다
수신자 이메일은 어떤 종류의 이메일이든 가능합니다
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
----------------
비디오 제작은 시간이 많이 걸리는 작업입니다. 비디오 튜토리얼이 학습에 도움이 되었다면, YouTube 채널 을 구독하여 알려 주시기 바랍니다. 비디오에 대한 높은 수요가 있다면, 비디오를 만들기 위해 노력하겠습니다.