카테고리 없음
초음파 센서에 신호 도달 시 메일 보내는 자동화 코드
하고싶은거하는여자
2024. 11. 9. 15:43
728x90
반응형
감지 메세지 -> 메일로
ex. 입구에 누가 들어왔을때 누군가 들어왔습니다 메세지
택배 왔을 때
감지 - 초음파 센서
-> send -mail
온도센서 - 온도과열 -
상황 센서 감지 했을 때 조건을 줘서
조건을 만족했을 때 메일 보내는 조건
* 위 내용을 실현하기 위해서는 앱 비밀번호를 활용한다
* send, callback 함수를 사용한다
#include <Arduino.h>
#include <WiFi.h>
#include <ESP_Mail_Client.h>
#define WIFI_SSID "iptime"
#define WIFI_PASSWORD "a123456789"
#define SMTP_HOST "ooooooo@gmail.com"
#define SMTP_PORT esp_mail_smtp_port_587
#define AUTHOR_EMAIL "ooooooo@gmail.com" // 구글 계정
#define AUTHOR_PASSWORD "oooooo " // 앱 비밀번호
SMTPSession smtp;
String strSender = "ESP32-IoT"; // 보내는 사람 (영어만)
String strRecipientName = "jojo"; // 받는 사람 (영어만)
String strRecipientMail = "ooooo@naver.com"; // 받는 사람 이메일
String strSubject = "ESP32-IoT mail Test"; // 메일 제목 (영어만)
String strMsg = "구글메일에서 네이버메일로 이메일 보내기"; // 메일 내용
const int trigPin = 12;
const int echoPin = 14;
long duration;
float distanceCm;
float distanceInch;
void sendEmail()
{
smtp.debug(1);
smtp.callback(smtpCallback);
ESP_Mail_Session session;
session.server.host_name = SMTP_HOST;
session.server.port = SMTP_PORT;
session.login.email = AUTHOR_EMAIL;
session.login.password = AUTHOR_PASSWORD;
session.login.user_domain = F("mydomain.net");
session.time.ntp_server = F("pool.ntp.org,time.nist.gov");
session.time.gmt_offset = 3;
session.time.day_light_offset = 0;
SMTP_Message message;
message.sender.name = strSender;
message.sender.email = AUTHOR_EMAIL;
message.subject = strSubject;
message.addRecipient(strRecipientName, strRecipientMail);
String textMsg = strMsg;
message.text.content = textMsg;
message.text.charSet = F("utf-8");
message.text.transfer_encoding = Content_Transfer_Encoding::enc_7bit;
message.priority = esp_mail_smtp_priority::esp_mail_smtp_priority_low;
message.addHeader(F("Message-ID: <abcde.fghij@gmail.com>"));
if (!smtp.connect(&session))
return;
if (!MailClient.sendMail(&smtp, &message))
Serial.println("Error sending Email, " + smtp.errorReason());
ESP_MAIL_PRINTF("Free Heap: %d\n", MailClient.getFreeHeap());
}
void smtpCallback(SMTP_Status status)
{
Serial.println(status.info());
if (status.success())
{
Serial.println("----------------");
ESP_MAIL_PRINTF("Message sent success: %d\n", status.completedCount());
ESP_MAIL_PRINTF("Message sent failled: %d\n", status.failedCount());
Serial.println("----------------\n");
struct tm dt;
for (size_t i = 0; i < smtp.sendingResult.size(); i++)
{
SMTP_Result result = smtp.sendingResult.getItem(i);
time_t ts = (time_t)result.timestamp;
localtime_r(&ts, &dt);
ESP_MAIL_PRINTF("Message No: %d\n", i + 1);
ESP_MAIL_PRINTF("Status: %s\n", result.completed ? "success" : "failed");
ESP_MAIL_PRINTF("Date/Time: %d/%d/%d %d:%d:%d\n", dt.tm_year + 1900, dt.tm_mon + 1, dt.tm_mday, dt.tm_hour, dt.tm_min, dt.tm_sec);
ESP_MAIL_PRINTF("Recipient: %s\n", result.recipients.c_str());
ESP_MAIL_PRINTF("Subject: %s\n", result.subject.c_str());
}
Serial.println("----------------\n");
smtp.sendingResult.clear();
}
}
void setup()
{
Serial.begin(115200);
pinMode(trigPin, OUTPUT); //
pinMode(echoPin, INPUT);
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();
}
void loop()
{
digitalWrite(trigPin, LOW);
delayMicroseconds(2);
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);
duration = pulseIn(echoPin, HIGH);
distanceCm = duration * 0.034/2;
Serial.print("Distance: ");
Serial.println(distanceCm);
if(distanceCm > 10 && distanceCm < 30){
Serial.println("움직임 감지");
sendEmail(); //메일을 발송합니다.
delay(60000);
}
delay(1000);
}
728x90
반응형