ESP32 - Notificação por E-mail de Porta Aberta

Neste tutorial, vamos aprender a usar um ESP32 para enviar notificações por e-mail quando uma porta é aberta. Este guia completo cobre o processo de configuração, os componentes necessários e as instruções passo a passo para integrar um ESP32 a um sensor de porta e a um serviço de e-mail. Garanta a segurança da sua casa e fique informado com alertas em tempo real enviados direto para a sua caixa de entrada usando o ESP32.

Notificação por E-mail de Porta Aberta com ESP32

Sobre o Sensor de Porta e o Gmail

Temos tutoriais específicos sobre o Sensor de Porta e o Gmail. Cada tutorial contém informações detalhadas e instruções passo a passo sobre a pinagem do hardware, o princípio de funcionamento, a ligação com o ESP32, o código ESP32... Saiba mais sobre eles nos links a seguir:

Diagrama de Ligação entre o Sensor de Porta e o ESP32

Diagrama de Ligação do Sensor de Porta com ESP32

This image is created using Fritzing. Click to enlarge image

Se você não sabe como alimentar o ESP32 e outros componentes, veja as instruções no tutorial a seguir: Como alimentar o ESP32.

Código ESP32

/* * Este código de ESP32 foi desenvolvido por pt.newbiely.com * Este código de ESP32 é disponibilizado ao público sem nenhuma restrição. * Para tutoriais completos e diagramas de ligação, visite: * https://pt.newbiely.com/tutorials/esp32/esp32-door-open-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 DOOR_SENSOR_PIN 19 // ESP32 pin GPIO19 connected to door sensor's pin int door_state; // current state of door sensor int prev_door_state; // previous state of door 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(DOOR_SENSOR_PIN, INPUT_PULLUP); // set ESP32 pin to input pull-up mode door_state = digitalRead(DOOR_SENSOR_PIN); // read state } void loop() { prev_door_state = door_state; // save the last state door_state = digitalRead(DOOR_SENSOR_PIN); // read new state if (prev_door_state == LOW && door_state == HIGH) { // state change: LOW -> HIGH Serial.println("The door is opened"); String subject = "Email Notification from ESP32"; String textMsg = "This is an email sent from ESP32.\n"; textMsg += "Your door is opened"; gmail_send(subject, textMsg); } else if (prev_door_state == HIGH && door_state == LOW) { // state change: HIGH -> LOW Serial.println("The door is closed"); } } 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(); } }

Passos Rápidos

  • Se esta é a primeira vez que você usa o ESP32, veja como configurar o ambiente para ESP32 no Arduino IDE.
  • Instale o sensor de porta na sua porta
  • Conecte a placa ESP32 ao sensor de porta
  • Conecte a placa ESP32 ao seu PC por um cabo micro USB
  • Abra o Arduino IDE no seu PC.
  • Selecione a placa ESP32 correta (por exemplo, ESP32 Dev Module) e a porta COM.
  • Abra o Library Manager clicando no ícone Library Manager na barra de navegação à esquerda do Arduino IDE.
  • Pesquise ESP Mail Client e encontre o ESP Mail Client criado por Mobizt.
  • Clique no botão Install para instalar a biblioteca ESP Mail Client.
Biblioteca ESP Mail Client do ESP32
  • Copie o código acima e abra no Arduino IDE
  • Altere as informações de WiFi (SSID e senha) no código para as suas, mudando as duas constantes WIFI_SSID e WIFI_PASSWORD
  • Altere o e-mail e a senha do remetente no código para os seus, mudando as duas constantes SENDER_EMAIL e SENDER_PASSWORD
  • Altere o e-mail do destinatário no código para o seu, mudando a constante RECIPIENT_EMAIL. O e-mail do destinatário pode ser o mesmo do remetente

※ Nota:

  • O e-mail do remetente DEVE ser do Gmail
  • A senha do remetente é a senha de app que você obteve no passo anterior
  • O e-mail do destinatário pode ser de qualquer tipo
  • Clique no botão Upload no Arduino IDE para fazer upload do código para o ESP32
  • Abra o Serial Monitor
  • Abra a porta
  • Veja o resultado no Serial Monitor.
∞
Newbiely | Arduino IDE 2.3.8
──
☐
✕
File
Edit
Sketch
Tools
Help
ESP32 Dev Module
Newbiely.ino
···
8 Serial.println("Hello World!");
Output
Serial Monitor
Message (Enter to send message to 'ESP32 Dev Module' on 'COM15')
New Line
9600 baud
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 ESP32 ----------------
Ln 11, Col 1
ESP32 Dev Module on COM15
2
  • Verifique a caixa de entrada do e-mail do destinatário. Você receberá um e-mail como abaixo:
E-mail do sensor de porta do ESP32

Vídeo

※ NOSSAS MENSAGENS

  • Fique à vontade para compartilhar o link deste tutorial. Porém, por favor, não use nosso conteúdo em outros sites. Investimos muito esforço e tempo para criar este conteúdo, por favor respeite nosso trabalho!