Apprenez à envoyer une alerte par e-mail avec l’ESP32 en fonction d’un seuil de température. L’ESP32 héberge également un serveur Web qui affiche les dernières lectures de capteurs et champs d’entrée pour modifier la valeur de seuil, le destinataire de l’e-mail et l’option d’armer ou de désarmer le système.

Mise à jour du 12 avril 2025
Nous lirons la température à l’aide d’un capteur DS18B20 et envoyons des e-mails à l’aide d’un serveur SMTP. L’ESP32 sera programmé à l’aide d’Arduino IDE.
Pour mieux comprendre le fonctionnement de ce projet, nous vous recommandons de jeter un œil aux tutoriels suivants:
Regardez la démonstration vidéo
Pour voir comment fonctionne le projet, vous pouvez regarder la démonstration vidéo suivante:
https://www.youtube.com/watch?v=meepouvazmi
Aperçu du projet
L’image suivante montre un aperçu de haut niveau du projet que nous construirons.

- L’ESP32 héberge un serveur Web qui montre les dernières lectures de température d’un capteur de température DS18B20.
- Il y a un champ de saisie pour configurer un seuil. Lorsque la température va au-dessus ou en dessous de la valeur de seuil, vous recevrez un e-mail.
- Vous pouvez également configurer l’adresse e-mail du destinataire sur la page Web.
- Le système peut être activé ou désactivé via le serveur Web. Si vous choisissez de désactiver le système, vous ne recevrez pas de notifications par e-mail lorsque la température traverse la valeur de seuil.
L’image suivante montre un aperçu de la page du serveur Web.

Condition préalable
Assurez-vous de vérifier chacune des conditions préalables suivantes avant de poursuivre ce projet.
1. ESP32 Add-on Arduino IDE
Nous programmerons l’ESP32 en utilisant Arduino IDE. Ainsi, vous devez faire installer le module complémentaire ESP32 dans votre IDE Arduino. Suivez le prochain tutoriel, si vous ne l’avez pas déjà fait.
2. Bibliothèque client ESP Mail
Pour envoyer des e-mails avec l’ESP32, nous allons utiliser la bibliothèque ESP-Mail-Client. Suivez les étapes suivantes pour installer la bibliothèque.
Allez dans Sketch> Inclure la bibliothèque> Gérer les bibliothèques et rechercher le client ESP Mail. Installez la bibliothèque client ESP Mail par Mobizt.

3. Créez un e-mail de l’expéditeur (nouveau compte)
Nous vous recommandons de créer un nouveau compte de messagerie pour envoyer les e-mails à votre principale adresse e-mail personnelle. N’utilisez pas votre principal e-mail personnel pour envoyer des e-mails via ESP32. Si quelque chose ne va pas dans votre code ou si, par erreur, vous faites trop de demandes, vous pouvez être interdit ou avoir votre compte temporairement désactivé.
Créez un nouveau compte de messagerie pour envoyer des e-mails avec l’ESP32. Si vous souhaitez utiliser un compte Gmail, accédez à ce lien pour en créer un nouveau.

Créer un mot de passe d’application
Vous devez créer un mot de passe d’application afin que l’ESP32 puisse envoyer des e-mails à l’aide de votre compte Gmail. Un mot de passe d’application est un code d’accès à 16 chiffres qui donne une application ou un appareil moins sécurisé pour accéder à votre compte Google. En savoir plus sur la connexion avec les mots de passe de l’application ici.
Un mot de passe d’application ne peut être utilisé qu’avec des comptes qui ont une vérification en 2 étapes activée.
- Ouvrez votre compte Google.
- Dans le panneau de navigation, sélectionnez la sécurité.
- Sous «Signer à Google», sélectionnez Vérification en 2 étapes> Démarrez.
- Suivez les étapes à l’écran.
Après avoir activé une vérification en 2 étapes, vous pouvez créer un mot de passe d’application.
- Ouvrez votre compte Google.
- Dans le panneau de recherche, recherchez les mots de passe de l’application.
- Ouvrez le menu des mots de passe de l’application.

- Donnez un nom au mot de passe de l’application, par exemple en particulier. Ensuite, cliquez sur Créer. Il apparaîtra d’une fenêtre avec un mot de passe que vous utiliserez avec ESP32 ou ESP8266 pour envoyer des e-mails. Enregistrez ce mot de passe (même s’il dit que vous n’aurez pas besoin de vous en souvenir) car vous en aurez besoin plus tard.

Il apparaîtra d’une fenêtre avec un mot de passe que vous utiliserez avec l’ESP32 pour envoyer des e-mails. Enregistrez ce mot de passe (même s’il dit que vous n’aurez pas besoin de vous en souvenir) car vous en aurez besoin plus tard.

Maintenant, vous devriez avoir un mot de passe d’application que vous utiliserez sur le code ESP32 pour envoyer les e-mails.

Si vous utilisez un autre fournisseur de messagerie, vérifiez comment créer un mot de passe d’application. Vous devriez être en mesure de trouver les instructions avec une recherche rapide sur Google « Your_EMail_Provider + Créer un mot de passe de l’application ».
4. Paramètres du serveur SMTP
Avant de procéder, vous devez connaître les paramètres du serveur SMTP de l’e-mail de l’expéditeur.
Paramètres du serveur GMail SMTP
Si vous utilisez un compte Gmail, ce sont les détails du serveur SMTP:
- Serveur SMTP: SMTP.gmail.com
- Nom d’utilisateur SMTP: Adresse Gmail complète
- Mot de passe SMTP: votre mot de passe Gmail
- Port SMTP (TLS): 587
- Port SMTP (SSL): 465
- SMTP TLS / SSL requis: oui
Paramètres du serveur SMTP Outlook
Pour les comptes Outlook, ce sont les paramètres du serveur SMTP:
- Serveur SMTP: SMTP.Office365.com
- Nom d’utilisateur SMTP: Adresse e-mail complète Outlook
- Mot de passe SMTP: votre mot de passe Outlook
- Port SMTP: 587
- SMTP TLS / SSL requis: oui
Paramètres du serveur SMTP en direct ou hotmail
Pour les comptes live ou hotmail, ce sont les paramètres du serveur SMTP:
- Serveur SMTP: SMTP.Live.com
- Nom d’utilisateur SMTP: Adresse e-mail complète en direct / hotmail
- Mot de passe SMTP: votre mot de passe Windows Live Hotmail
- Port SMTP: 587
- SMTP TLS / SSL requis: oui
Si vous utilisez un autre fournisseur de messagerie, vous devez rechercher ses paramètres de serveur SMTP.
5. Bibliothèques Async Server Web et DS18B20
Bibliothèques asyncwerver
Dans ce projet, nous créerons un serveur Web asynchrone à l’aide des bibliothèques suivantes:
Vous pouvez installer ces bibliothèques dans le gestionnaire de bibliothèque Arduino. Ouvrez le gestionnaire de bibliothèque en cliquant sur l’icône de la bibliothèque dans la barre latérale gauche.
Recherchez EspasyncWebserver et installez le EspasyncWerver par ESP32Async.

Ensuite, installez la bibliothèque AsyncTCP. Recherchez ASYNCTCP et installez l’ASYNCTCP par ESP32Async.

Bibliothèques DS18B20
Pour le DS18B20, nous utiliserons les bibliothèques suivantes.
Vous pouvez les installer dans le gestionnaire de bibliothèque Arduino. Allez dans Sketch> Inclure la bibliothèque> Gérer les bibliothèques. Le gestionnaire de bibliothèque doit s’ouvrir. Ensuite, recherchez les noms des bibliothèques et installez-les.
6. Pièces requises

Pour suivre ce tutoriel, vous avez besoin des parties suivantes:
Vous pouvez utiliser les liens précédents ou aller directement à makeradvisor.com/tools pour trouver toutes les pièces de vos projets au meilleur prix!

Diagramme schématique
Tirez le capteur de température DS18B20 à l’ESP32 comme indiqué dans le diagramme schématique suivant, avec la broche de données connectée à GPIO 4

Code ESP32 – serveur Web de messagerie
Copiez le code suivant sur votre IDE Arduino, mais ne le téléchargez pas encore. Vous devez apporter des modifications pour que cela fonctionne pour vous. Vous devez insérer l’adresse e-mail de l’expéditeur, l’adresse e-mail du destinataire, votre entrée de seuil par défaut et vos informations d’identification réseau.
/*********
Rui Santos & Sara Santos - Raspberryme.com
Complete project details at https://Raspberryme.com/esp32-email-alert-temperature-threshold/
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files.
The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
*********/
#include
#include
#include
#include
#include
#include
// REPLACE WITH YOUR NETWORK CREDENTIALS
const char* ssid = "REPLACE_WITH_YOUR_SSID";
const char* password = "REPLACE_WITH_YOUR_PASSWORD";
// To send Emails using Gmail on port 465 (SSL), you need to create an app password: https://support.google.com/accounts/answer/185833
#define emailSenderAccount "[email protected]"
#define emailSenderPassword "email_sender_app_password"
#define smtpServer "smtp.gmail.com"
#define smtpServerPort 465
#define emailSubject "[ALERT] ESP32 Temperature"
// Default Recipient Email Address
String inputMessage = "[email protected]";
String enableEmailChecked = "checked";
String inputMessage2 = "true";
// Default Threshold Temperature Value
String inputMessage3 = "25.0";
String lastTemperature;
// HTML web page to handle 3 input fields (email_input, enable_email_input, threshold_input)
const char index_html[] PROGMEM = R"rawliteral(
Email Notification with Temperature
DS18B20 Temperature
%TEMPERATURE% C
ESP Email Notification
)rawliteral";
void notFound(AsyncWebServerRequest *request) {
request->send(404, "text/plain", "Not found");
}
AsyncWebServer server(80);
// Replaces placeholder with DS18B20 values
String processor(const String& var){
if(var == "TEMPERATURE"){
return lastTemperature;
}
else if(var == "EMAIL_INPUT"){
return inputMessage;
}
else if(var == "ENABLE_EMAIL"){
return enableEmailChecked;
}
else if(var == "THRESHOLD"){
return inputMessage3;
}
return String();
}
// Flag variable to keep track if email notification was sent or not
bool emailSent = false;
const char* PARAM_INPUT_1 = "email_input";
const char* PARAM_INPUT_2 = "enable_email_input";
const char* PARAM_INPUT_3 = "threshold_input";
// Interval between sensor readings
unsigned long previousMillis = 0;
const long interval = 5000;
// GPIO where the DS18B20 is connected to
const int oneWireBus = 4;
// Setup a oneWire instance to communicate with any OneWire devices
OneWire oneWire(oneWireBus);
// Pass our oneWire reference to Dallas Temperature sensor
DallasTemperature sensors(&oneWire);
// SMTP session object
SMTPSession smtp;
void setup() {
Serial.begin(115200);
WiFi.mode(WIFI_STA);
WiFi.begin(ssid, password);
if (WiFi.waitForConnectResult() != WL_CONNECTED) {
Serial.println("WiFi Failed!");
return;
}
Serial.println();
Serial.print("ESP IP Address: http://");
Serial.println(WiFi.localIP());
// Start the DS18B20 sensor
sensors.begin();
// Send web page to client
server.on("/", HTTP_GET, [](AsyncWebServerRequest *request){
request->send(200, "text/html", index_html, processor);
});
// Receive an HTTP GET request at /get?email_input=&enable_email_input=&threshold_input=
server.on("/get", HTTP_GET, [] (AsyncWebServerRequest *request) {
if (request->hasParam(PARAM_INPUT_1)) {
inputMessage = request->getParam(PARAM_INPUT_1)->value();
if (request->hasParam(PARAM_INPUT_2)) {
inputMessage2 = request->getParam(PARAM_INPUT_2)->value();
enableEmailChecked = "checked";
}
else {
inputMessage2 = "false";
enableEmailChecked = "";
}
if (request->hasParam(PARAM_INPUT_3)) {
inputMessage3 = request->getParam(PARAM_INPUT_3)->value();
}
}
else {
inputMessage = "No message sent";
}
Serial.println(inputMessage);
Serial.println(inputMessage2);
Serial.println(inputMessage3);
request->send(200, "text/html", "HTTP GET request sent to your ESP.
Return to Home Page");
});
server.onNotFound(notFound);
server.begin();
// Initialize ESP-Mail-Client
MailClient.networkReconnect(true);
}
void loop() {
unsigned long currentMillis = millis();
if (currentMillis - previousMillis >= interval) {
previousMillis = currentMillis;
sensors.requestTemperatures();
// Temperature in Celsius degrees
float temperature = sensors.getTempCByIndex(0);
Serial.print(temperature);
Serial.println(" *C");
lastTemperature = String(temperature);
// Check if temperature is above threshold and if it needs to send the Email alert
if(temperature > inputMessage3.toFloat() && inputMessage2 == "true" && !emailSent){
String emailMessage = String("Temperature above threshold. Current temperature: ") +
String(temperature) + String("C");
if(sendEmailNotification(emailMessage)) {
Serial.println(emailMessage);
emailSent = true;
}
else {
Serial.println("Email failed to send");
}
}
// Check if temperature is below threshold and if it needs to send the Email alert
else if((temperature < inputMessage3.toFloat()) && inputMessage2 == "true" && emailSent) {
String emailMessage = String("Temperature below threshold. Current temperature: ") +
String(temperature) + String(" C");
if(sendEmailNotification(emailMessage)) {
Serial.println(emailMessage);
emailSent = false;
}
else {
Serial.println("Email failed to send");
}
}
}
}
bool sendEmailNotification(String emailMessage) {
// Configure the session
ESP_Mail_Session session;
session.server.host_name = smtpServer;
session.server.port = smtpServerPort;
session.login.email = emailSenderAccount;
session.login.password = emailSenderPassword;
session.login.user_domain = "";
// Configure the message
SMTP_Message message;
message.sender.name = "ESP32";
message.sender.email = emailSenderAccount;
message.subject = emailSubject;
message.addRecipient("Recipient", inputMessage);
message.text.content = emailMessage.c_str();
message.text.charSet = "utf-8";
message.text.transfer_encoding = Content_Transfer_Encoding::enc_7bit;
message.priority = esp_mail_smtp_priority::esp_mail_smtp_priority_high;
// Set the callback function
smtp.callback(smtpCallback);
// Connect to the server and send the email
if (!smtp.connect(&session)) {
Serial.println("Failed to connect to SMTP server: " + smtp.errorReason());
return false;
}
if (!MailClient.sendMail(&smtp, &message)) {
Serial.println("Error sending Email: " + smtp.errorReason());
smtp.closeSession();
return false;
}
smtp.closeSession();
return true;
}
// Callback function for email sending status
void smtpCallback(SMTP_Status status) {
Serial.println(status.info());
if (status.success()) {
Serial.println("Email sent successfully");
Serial.println("----------------");
}
}
Afficher le code brut
Comment fonctionne le code
Continuez à lire pour savoir comment fonctionne le code ou passez à la section de démonstration.
Bibliothèques
Commencez par importer les bibliothèques requises. Le WiFi, AsyncTCP et EspasyncWebserver sont nécessaires pour créer le serveur Web. Le Onewire et la Dallaterature sont nécessaires pour s’interfacer avec le DS18B20 et l’ESP_MAIL_CLIENT est nécessaire pour envoyer des e-mails avec l’ESP32 via le serveur SMTP.
#include
#include
#include
#include
#include
#include
Références de réseau
Insérez vos informations d’identification de réseau dans les lignes suivantes:
// REPLACE WITH YOUR NETWORK CREDENTIALS
const char* ssid = "REPLACE_WITH_YOUR_SSID";
const char* password = "REPLACE_WITH_YOUR_PASSWORD";
Paramètres de messagerie
Insérez l’e-mail de l’expéditeur – c’est l’e-mail qui sera utilisé pour envoyer des e-mails par l’ESP32.
#define emailSenderAccount "[email protected]"
Tapez le mot de passe de l’application de l’expéditeur de messagerie (c’est le mot de passe de l’application que vous avez défini précédemment – ce n’est pas le mot de passe de l’e-mail):
#define emailSenderPassword "email_sender_app_password"
Dans les lignes suivantes, insérez les paramètres du serveur SMTP de l’expéditeur de messagerie. Nous utilisons un compte Gmail. Si vous utilisez un autre fournisseur de messagerie, vous devez insérer les bons paramètres du serveur.
#define smtpServer "smtp.gmail.com"
#define smtpServerPort 465
Insérez le sujet de messagerie sur la ligne suivante:
#define emailSubject "[ALERT] ESP32 Temperature"
Variables auxiliaires
Ensuite, nous avons des variables auxiliaires pour enregistrer les valeurs soumises via le formulaire. La variable InputMessage contient l’e-mail du destinataire. Vous pouvez insérer l’e-mail du destinataire par défaut. Vous pouvez modifier l’e-mail du destinataire plus tard sur le formulaire.
String inputMessage = "[email protected]";
La variable ACTIVEMAILCHECKED nous dira si la case à cocher pour envoyer un e-mail est cochée ou non.
String enableEmailChecked = "checked";
Dans le cas où il est vérifié, la valeur enregistrée sur InputMessage2 doit être définie sur true.
String inputMessage2 = "true";
L’INPUTMESSAGE3 contient la valeur de seuil de température. Par défaut, il est défini sur 25,0 ° C, mais vous pouvez le définir sur toute autre valeur par défaut qui fait votre projet. Vous pouvez également le changer plus tard sous la forme HTML.
String inputMessage3 = "25.0";
La variable de la dernière température économise la dernière valeur de température à comparer avec la valeur actuelle.
String lastTemperature;
Texte html
Ensuite, nous avons du texte HTML de base pour créer une page avec trois champs d’entrée: l’e-mail du destinataire, une case à cocher pour activer ou désactiver les notifications par e-mail et le champ de saisie du seuil de température. La page Web affiche également la dernière lecture de température du capteur de température DS18B20.
Les lignes suivantes affichent la température:
DS18B20 Temperature
%TEMPERATURE% °C
Le% de température% est un espace réservé qui sera remplacé par la valeur de température réelle lorsque l’ESP32 sert la page.
Ensuite, nous avons un formulaire avec trois champs d’entrée et un bouton «Soumettre». Lorsque l’utilisateur tape certaines données et clique sur le bouton «Soumettre», ces valeurs sont envoyées à l’ESP32 pour mettre à jour les variables.
The first input field is of type email, the second input field is a checkbox and the last input field is of type number. To learn more about input fields, we recommend taking a look at following resources of the w3schools website:
The action attribute of the form specifies where to send the data inserted on the form after pressing submit. In this case, it makes an HTTP GET request to:
/get?email_input=value&enable_email_input=value&threshold_input=value
La valeur fait référence au texte que vous entrez dans chacun des champs d’entrée. Pour en savoir plus sur la gestion des champs d’entrée avec l’ESP32, lisez: Données d’entrée sur le serveur Web HTML Form ESP32 à l’aide d’Arduino IDE.
processeur()
La fonction processeur () remplace tous les espaces réservés du texte HTML par les valeurs réelles.
- % De température% »LastTemperature
- % Email_input% »InputMessage
- % Enable_email% »Activer EmailCched
- % Seuil% »inputMessage3
String processor(const String& var){
//Serial.println(var);
if(var == "TEMPERATURE"){
return lastTemperature;
}
else if(var == "EMAIL_INPUT"){
return inputMessage;
}
else if(var == "ENABLE_EMAIL"){
return enableEmailChecked;
}
else if(var == "THRESHOLD"){
return inputMessage3;
}
return String();
}
Paramètres de champ de saisie
Les variables suivantes seront utilisées pour vérifier si nous avons reçu une demande de GET HTTP à ces champs d’entrée et enregistrer les valeurs en variables en conséquence.
const char* PARAM_INPUT_1 = "email_input";
const char* PARAM_INPUT_2 = "enable_email_input";
const char* PARAM_INPUT_3 = "threshold_input";
Capteur de température DS18B20
Initialisez le capteur de température DS18B20.
// GPIO where the DS18B20 is connected to
const int oneWireBus = 4;
// Setup a oneWire instance to communicate with any OneWire devices
OneWire oneWire(oneWireBus);
// Pass our oneWire reference to Dallas Temperature sensor
DallasTemperature sensors(&oneWire);
Pour en savoir plus sur l’interfaçage du capteur de température DS18B20 avec l’ESP32, lisez: Capteur de température ESP32 DS18B20 avec Arduino IDE.
Objet SMTPSESSION
L’objet SMTPSESSIE contient des configurations et des données à envoyer par e-mail. Ces configurations sont définies ultérieurement sur la fonction SendEmailNotification ().
SMTPSession smtp;
installation()
Dans la configuration (), connectez-vous au Wi-Fi en mode station et imprimez l’adresse IP ESP32:
Serial.begin(115200);
WiFi.mode(WIFI_STA);
WiFi.begin(ssid, password);
if (WiFi.waitForConnectResult() != WL_CONNECTED) {
Serial.println("WiFi Failed!");
return;
}
Serial.println();
Serial.print("ESP IP Address: http://");
Serial.println(WiFi.localIP());
Initialisez le capteur de température DS18B20:
sensors.begin();
Gérer le serveur Web
Ensuite, définissez ce qui se passe lorsque l’ESP32 reçoit des demandes HTTP. Lorsque nous obtenons une demande sur la root / URL, envoyez le texte HTML avec le processeur (afin que les espaces réservés soient remplacés par les dernières valeurs).
server.on("/", HTTP_GET, [](AsyncWebServerRequest *request){
request->send_P(200, "text/html", index_html, processor);
});
Lorsqu’un formulaire est soumis, l’ESP32 reçoit une demande sur l’URL suivante:
/get?email_input=&enable_email_input=&threshold_input=
Nous vérifions donc si la demande contient des paramètres d’entrée et enregistrons ces paramètres dans les variables:
server.on("/get", HTTP_GET, [] (AsyncWebServerRequest *request) {
// GET email_input value on /get?email_input=
if (request->hasParam(PARAM_INPUT_1)) {
inputMessage = request->getParam(PARAM_INPUT_1)->value();
// GET enable_email_input value on /get?enable_email_input=
if (request->hasParam(PARAM_INPUT_2)) {
inputMessage2 = request->getParam(PARAM_INPUT_2)->value();
enableEmailChecked = "checked";
}
else {
inputMessage2 = "false";
enableEmailChecked = "";
}
// GET threshold_input value on /get?threshold_input=
if (request->hasParam(PARAM_INPUT_3)) {
inputMessage3 = request->getParam(PARAM_INPUT_3)->value();
}
}
else {
inputMessage = "No message sent";
}
Il s’agit de la partie du code où les variables seront remplacées par les valeurs soumises sur le formulaire. La variable InputMessage enregistre l’adresse e-mail du destinataire, le SpoingMessage2 enregistre si le système de notification par e-mail est activé ou non et que le seuil de la température est en cours.
Après avoir soumis les valeurs sur le formulaire, il affiche une nouvelle page disant que la demande a été envoyée avec succès à l’ESP32 avec un lien pour revenir à la page d’accueil.
request->send(200, "text/html", "HTTP GET request sent to your ESP.
Return to Home Page");
});
Enfin, démarrez le serveur:
server.begin();
boucle()
Dans la boucle (), nous utilisons des minuteries pour obtenir de nouvelles lectures de température toutes les 5 secondes.
unsigned long currentMillis = millis();
if (currentMillis - previousMillis >= interval) {
previousMillis = currentMillis;
sensors.requestTemperatures();
// Temperature in Celsius degrees
float temperature = sensors.getTempCByIndex(0);
Serial.print(temperature);
Serial.println(" *C");
// Temperature in Fahrenheit degrees
/*float temperature = sensors.getTempFByIndex(0);
SerialMon.print(temperature);
SerialMon.println(" *F");*/
lastTemperature = String(temperature);
Après avoir obtenu une nouvelle lecture de température, nous vérifions s’il est au-dessus ou en dessous du seuil et envoyons un e-mail si nécessaire.
Vous enverrez une alerte par e-mail si toutes ces conditions sont remplies:
- La température actuelle est supérieure au seuil;
- Les notifications par e-mail sont activées (la case à cocher est cochée sur la page Web);
- Si un e-mail n’a pas encore été envoyé.
if(temperature > inputMessage3.toFloat() && inputMessage2 == "true" && !emailSent){
String emailMessage = String("Temperature above threshold. Current temperature: ") +
String(temperature) + String("C");
if(sendEmailNotification(emailMessage)) {
Serial.println(emailMessage);
emailSent = true;
}
else {
Serial.println("Email failed to send");
}
}
L’e-mail contient un message indiquant que la température est supérieure au seuil et à la température actuelle.
Ensuite, si la température descend en dessous du seuil, envoyez un autre e-mail.
else if((temperature < inputMessage3.toFloat()) && inputMessage2 == "true" && emailSent) {
String emailMessage = String("Temperature below threshold. Current temperature: ")
+ String(temperature) + String(" C");
if(sendEmailNotification(emailMessage)) {
Serial.println(emailMessage);
emailSent = false;
}
else {
Serial.println("Email failed to send");
}
}
Pour envoyer des e-mails, nous avons créé la fonction SendEmailNotification () qui contient tous les détails pour envoyer l’e-mail. Cette fonction renvoie True si l’e-mail a été envoyé avec succès ou faux s’il a échoué.
bool sendEmailNotification(String emailMessage) {
// Configure the session
ESP_Mail_Session session;
session.server.host_name = smtpServer;
session.server.port = smtpServerPort;
session.login.email = emailSenderAccount;
session.login.password = emailSenderPassword;
session.login.user_domain = "";
// Configure the message
SMTP_Message message;
message.sender.name = "ESP32";
message.sender.email = emailSenderAccount;
message.subject = emailSubject;
message.addRecipient("Recipient", inputMessage);
message.text.content = emailMessage.c_str();
message.text.charSet = "utf-8";
message.text.transfer_encoding = Content_Transfer_Encoding::enc_7bit;
message.priority = esp_mail_smtp_priority::esp_mail_smtp_priority_high;
// Set the callback function
smtp.callback(smtpCallback);
// Connect to the server and send the email
if (!smtp.connect(&session)) {
Serial.println("Failed to connect to SMTP server: " + smtp.errorReason());
return false;
}
if (!MailClient.sendMail(&smtp, &message)) {
Serial.println("Error sending Email: " + smtp.errorReason());
smtp.closeSession();
return false;
}
smtp.closeSession();
return true;
}
Pour en savoir plus sur l’envoi d’e-mails via SMTP Server avec l’ESP32, lisez: ESP32 Envoyez des e-mails à l’aide d’un serveur SMTP.
Démonstration
Téléchargez le code sur votre carte ESP32 (avec le DS18B20 câblé sur votre carte ESP32).

Ouvrez le moniteur en série à un taux de bauds de 115200 et appuyez sur le bouton de bord intégré. L’ESP32 imprimera son adresse IP et commencera à afficher de nouvelles valeurs de température toutes les 5 secondes.
Ouvrez un navigateur et saisissez l’adresse IP ESP32. Une page Web similaire devrait se charger avec les valeurs par défaut (définies dans votre code):

Si les notifications par e-mail sont activées (coche coché) et si la température dépasse le seuil, vous recevrez une notification par e-mail.

Après cela, lorsque la température descend en dessous du seuil, vous recevrez un autre e-mail.

Vous pouvez utiliser les champs de saisie de la page Web pour configurer l’adresse e-mail d’un destinataire différent, activer ou désactiver les notifications par e-mail et modifier la valeur de seuil. Pour que toutes les modifications prennent effet, il vous suffit d’appuyer sur le bouton «Soumettre».
Dans le même temps, vous devriez obtenir les nouveaux champs d’entrée dans le moniteur série.
Emballage
Dans ce projet, vous avez appris à définir une valeur de seuil et à envoyer une notification par e-mail lorsque la température traverse cette valeur. Nous espérons que vous avez trouvé ce projet intéressant. Maintenant, n’hésitez pas à le modifier pour répondre à vos propres besoins. Par exemple, lorsque la température traverse le seuil, vous pouvez également déclencher une sortie pour contrôler un relais.
Dans ce projet, nous avons utilisé du texte HTML brut, pour rendre le projet plus facile à suivre. Nous vous suggérons d’ajouter des CSS pour styliser votre page Web pour le rendre plus agréable.
Au lieu d’utiliser un DS18B20, vous pourriez envisager d’utiliser un capteur de température différent: DHT vs LM35 vs DS18B20 vs BME280 vs BMP180.
Si vous souhaitez en savoir plus sur l’ESP32, essayez nos projets et nos ressources:
Merci d’avoir lu.
Cette vidéo vous emmène dans l’histoire de Raspberry Pi :

-
Freenove ESP32 Kit Dev CAM Carte Kit de Démarrage de Base, Microcontrôleur à Double Noyau 32 Bits 240 MHz, Caméra WiFi+BT, Tutorial Détaillé de 400 Pages, Code Python C, 58 Projets, 141 Articles
-
DUBEUYEW ESP32-DevKitC Carte de Base ESP32 Carte de Développement ESP32-WROOM-32U Ensemble pour Arduino avec Antenne et Câble
