아두이노 나노 ESP32 - 물 새는 것 이메일 알림 | Arduino Nano ESP32 - Water Leak Email Notification
이 가이드는 Arduino Nano ESP32를 사용하여 누수를 감지하고 즉시 이메일 경보를 보내는 방벗을 보여줄 것입니다. 센서를 설정하는 방법을 설명하고 코드 예를 제공하며 이메일 서비스와 연동하는 방법을 시연할 것입니다. 이는 집이나 사무실을 수해로부터 보호하는 데 유용하며 DIY 프로젝트를 좋아하고 누수 감지 시스템을 강화하고자 하는 사람들에게 이상적입니다.
Hardware Preparation
1 | × | Arduino Nano ESP32 | Amazon | |
1 | × | USB Cable Type-C | 쿠팡 | Amazon | |
1 | × | Water Leak Detector | Amazon | |
1 | × | Breadboard | 쿠팡 | Amazon | |
1 | × | Jumper Wires | Amazon | |
1 | × | (Optional) DC Power Jack | 쿠팡 | Amazon | |
1 | × | (Recommended) Screw Terminal Expansion Board for Arduino Nano | 쿠팡 | Amazon |
공개: 이 섹션에서 제공된 링크 중 일부는 제휴 링크입니다. 이 링크를 통해 구매한 경우 추가 비용없이 수수료를 받을 수 있습니다. 지원해 주셔서 감사합니다.
워터 센서와 Gmail에 관하여
저햬는 워터 센서와 Gmail에 대한 명확한 가이드를 제공합니다. 각 가이드에는 하드웨어 설정, 작동 원리 이해, Arduino Nano ESP32의 연결 및 프로그래밍에 대한 자세한 지침과 간단한 단계가 포함되어 있습니다. 자세한 정보를 알고 싶으시면 이 링크들을 클릭해 주세요.
- Arduino Nano ESP32 - Gmail tutorial
물 센서와 아두이노 나노 ESP32 간의 배선도
이 이미지는 Fritzing을 사용하여 만들어졌습니다. 이미지를 확대하려면 클릭하세요.
아두이노 나노 ESP32 코드
/*
* 이 Arduino Nano ESP32 코드는 newbiely.kr 에서 개발되었습니다
* 이 Arduino Nano ESP32 코드는 어떠한 제한 없이 공개 사용을 위해 제공됩니다.
* 상세한 지침 및 연결도에 대해서는 다음을 방문하세요:
* https://newbiely.kr/tutorials/arduino-nano-esp32/arduino-nano-esp32-water-leak-email-notification
*/
#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 WATER_SENSOR_PIN D4 // The Arduino Nano ESP32 pin D4 connected to water sensor's pin
int water_state; // current state of water sensor
int prev_water_state; // previous state of water 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(WATER_SENSOR_PIN, INPUT_PULLUP); // set ESP32 pin to input pull-up mode
water_state = digitalRead(WATER_SENSOR_PIN); // read state
}
void loop() {
prev_water_state = water_state; // save the last state
water_state = digitalRead(WATER_SENSOR_PIN); // read new state
if (prev_water_state == HIGH && water_state == LOW) {
Serial.println("Water leakage is detected!");
String subject = "Email Notification from ESP32";
String textMsg = "This is an email sent from ESP32.\n";
textMsg += "Water leakage is detected";
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();
}
}
Detailed Instructions
Arduino Nano ESP32를 시작하려면 다음 단계를 따르십시오:
- Arduino Nano ESP32를 처음 사용하는 경우, Arduino IDE에서 Arduino Nano ESP32 환경 설정 방법에 대한 튜토리얼을 참고하세요.
- 제공된 다이어그램에 따라 수분 센서를 Arduino Nano ESP32 보드에 연결하세요.
- USB 케이블을 사용하여 Arduino Nano ESP32 보드를 컴퓨터에 연결하세요.
- 컴퓨터에서 Arduino IDE를 실행하세요.
- Arduino Nano ESP32 보드와 해당 COM 포트를 선택하세요.
- Arduino IDE의 왼쪽에 있는 Library Manager 아이콘을 클릭하여 라이브러리 관리자를 엽니다.
- ESP Mail Client를 검색하고 Mobizt의 ESP Mail Client를 찾으세요.
- Install 버튼을 클릭하여 ESP Mail Client 라이브러리를 가져오세요.
- 제공된 코드를 복사하여 아두이노 IDE에 붙여넣으세요.
- 코드에서 WIFI_SSID와 WIFI_PASSWORD를 편집하여 WiFi 자격증명 정보를 변경하세요.
- SENDER_EMAIL과 SENDER_PASSWORD를 업데이트하여 발신자의 이메일과 비밀번호를 입력하세요.
- RECIPIENT_EMAIL을 변경하여 코드 내 수신자의 이메일 주소를 편집하세요. 발신자의 이메일과 동일할 수 있습니다.
※ NOTE THAT:
- 발신자의 이메일은 Gmail 계정이어야 합니다.
- 이전 단과에서의 앱 비밀번호를 발신자의 비밀번호로 사용하세요.
- 수신자의 이메일은 어떤 종류의 이메일이든 가능합니다.
- Arduino IDE에서 Upload 버튼을 클릭하여 코드를 Arduino Nano ESP32로 전송하세요.
- 시리얼 모니터를 엽니다.
- 물 센서에 물을 부으세요.
- 시리얼 모니터에서 결과를 확인하세요.
COM6
Water leakage is detected
#### 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 Arduino Nano ESP32
----------------
Autoscroll
Clear output
9600 baud
Newline
- 이메일 받은 편지함을 확인하세요. 이와 유사한 이메일을 받으셔야 합니다:
Video Tutorial
비디오 제작은 시간이 많이 걸리는 작업입니다. 비디오 튜토리얼이 학습에 도움이 되었다면, YouTube 채널 을 구독하여 알려 주시기 바랍니다. 비디오에 대한 높은 수요가 있다면, 비디오를 만들기 위해 노력하겠습니다.