ESP32 - Notification par email d'ouverture de porte
Dans ce tutoriel, nous allons apprendre à utiliser un ESP32 pour envoyer des notifications par e-mail lorsqu'une porte est ouverte. Ce guide complet couvre le processus de configuration, les composants nécessaires et les instructions étape par étape pour intégrer un ESP32 avec un capteur de porte et un service de messagerie. Assurez la sécurité de votre domicile et restez informé avec des alertes en temps réel envoyées directement dans votre boîte de réception en utilisant l'ESP32.
Or you can buy the following sensor kits:
Divulgation : Certains des liens fournis dans cette section sont des liens affiliés Amazon. Nous pouvons recevoir une commission pour tout achat effectué via ces liens, sans coût supplémentaire pour vous. Nous vous remercions de votre soutien.
Nous disposons de tutoriels spécifiques sur le capteur de porte et Gmail. Chaque tutoriel contient des informations détaillées et des instructions étape par étape sur le brochage du matériel, le principe de fonctionnement, la connexion de câblage à l'ESP32, le code ESP32... Apprenez-en plus à leur sujet aux liens suivants :
This image is created using Fritzing. Click to enlarge image
Si vous ne savez pas comment alimenter l'ESP32 et d'autres composants, vous pouvez trouver des conseils dans le tutoriel suivant : Comment alimenter l'ESP32.
#include <WiFi.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 19
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 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) {
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("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;
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();
}
}
Installez le capteur de porte sur votre porte.
Connectez la carte ESP32 au capteur de porte.
Connectez la carte ESP32 à votre PC via un câble micro USB.
Ouvrez Arduino IDE sur votre PC.
Sélectionnez la bonne carte ESP32 (par exemple, Module de développement ESP32) et le port COM.
Ouvrez le gestionnaire de bibliothèques en cliquant sur l'icône Gestionnaire de bibliothèques dans la barre de navigation gauche de l'Arduino IDE.
Recherchez ESP Mail Client, puis trouvez le client de messagerie ESP créé par Mobizt.
Cliquez sur le bouton Installing pour installer la bibliothèque ESP Mail Client.
Copiez le code ci-dessus et ouvrez-le avec l'IDE Arduino
Modifiez les informations WiFi (SSID et mot de passe) dans le code par les vôtres en changeant deux constantes WIFI_SSID et WIFI_PASSWORD
Modifiez l'email et le mot de passe de l'expéditeur dans le code par les vôtres en changeant deux constantes SENDER_EMAIL et SENDER_PASSWORD
Modifiez l'email du destinataire dans le code par le vôtre en changeant la constante RECIPIENT_EMAIL. L'email du destinataire peut être le même que celui de l'expéditeur
※ Note:
L'email de l'expéditeur DOIT être Gmail
Le mot de passe de l'expéditeur est le mot de passe d'application que vous avez obtenu à l'étape précédente
L'email du destinataire peut être de n'importe quel type
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
----------------