카테고리 없음

초음파 센서에 신호 도달 시 메일 보내는 자동화 코드

하고싶은거하는여자 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
반응형