ESP8266 - 문 열림 이메일 알림 | ESP8266 - Door Open Email Notification
이 가이드는 문이 열릴 때 이메일을 보내기 위해 ESP8266을 설정하는 방벖을 보여줄 것입니다. 우리는 설정 과정, 필요한 부품, 그리고 문 센서와 이메일 서비스에 ESP8266을 연결하는 방법에 대한 단계별 지침을 제공할 것입니다. 이는 문이 열릴 때마다 즉시 이메일로 알림을 보내어 집의 보안을 강화할 것입니다.
공개: 이 섹션에서 제공된 링크 중 일부는 제휴 링크입니다. 이 링크를 통해 구매한 경우 추가 비용없이 수수료를 받을 수 있습니다. 지원해 주셔서 감사합니다.
우리는 도어 센서와 Gmail에 대한 상세한 가이드를 제공합니다. 모든 가이드에는 하드웨어 설정 방법, 작동 원리 이해, ESP8266 연결 및 프로그래밍 방법에 대한 자세한 내용과 쉬운 단계별 지침이 포함되어 있습니다. 이러한 가이드에 대해 자세히 알아보려면 다음 링크를 따라가세요:
이 이미지는 Fritzing을 사용하여 만들어졌습니다. 이미지를 확대하려면 클릭하세요.
ESP8266의 핀 배치 및 ESP8266 및 다른 구성 요소에 전원을 공급하는 방법에 대해 더 많이 보십시오.
#include <ESP8266WiFi.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 DOOR_SENSOR_PIN D7
int door_state;
int prev_door_state;
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() {
prev_door_state = door_state;
door_state = digitalRead(DOOR_SENSOR_PIN);
if (prev_door_state == LOW && door_state == 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) {
Serial.println("The door is closed");
}
}
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("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;
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();
}
}
Arduino IDE에서 ESP8266을 시작하렺면 다음 단계를 따르세요:
도식에 나타난 대로 구성요소를 연결하세요.
문 센서를 문에 설치하세요.
USB 케이블을 사용하여 ESP8266 보드를 컴퓨터에 연결하세요.
컴퓨터에서 Arduino IDE를 엽니다.
올바른 ESP8266 보드를 선택하세요. 예를 들어, NodeMCU 1.0 (ESP-12E Module) 및 해당 COM 포트를 선택하세요.
Arduino IDE에서 왼쪽 메뉴의 Library Manager 아이콘을 클릭하여 엽니다.
ESP Mail Client를 검색하고 Mobizt의 ESP Mail Client를 찾으세요.
Install 버튼을 클릭하여 ESP Mail Client 라이브러리를 추가하세요.
코드를 복사하여 Arduino IDE로 엽니다.
코드에 WiFi 정보(네트워크 이름과 비밀번호)를 입력하세요. WIFI_SSID와 WIFI_PASSWORD를 귀하의 정보로 업데이트하세요.
코드 내 보내는 사람의 이메일과 비밀번호를 변경하세요. SENDER_EMAIL과 SENDER_PASSWORD를 귀하의 이메일과 비밀번호로 변경하세요.
필요한 경우 RECIPIENT_EMAIL의 수신자 이메일 주소를 귀하의 이메일로 업데이트하세요. 발신자의 이메일과 동일할 수 있습니다.
※ NOTE THAT:
발신자의 이메일은 Gmail을 사용해야 합니다. 앞서 생성한 앱 비밀번호를 발신자의 비밀번호로 사용하세요. 수신자의 이메일은 어떤 유형이어도 괜찮습니다.
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
----------------
비디오 제작은 시간이 많이 걸리는 작업입니다. 비디오 튜토리얼이 학습에 도움이 되었다면, YouTube 채널 을 구독하여 알려 주시기 바랍니다. 비디오에 대한 높은 수요가 있다면, 비디오를 만들기 위해 노력하겠습니다.