Arduino - Notification par e-mail d'ouverture de porte
Dans ce guide, nous apprendrons comment utiliser un Arduino pour envoyer des courriels lorsqu'une porte s'ouvre. Nous expliquerons comment le configurer, quelles pièces vous avez besoin, et nous vous donnerons des étapes détaillées pour connecter un Arduino avec un capteur de porte et un service de messagerie. Cela aidera à sécuriser votre maison en vous envoyant des alertes par courriel instantanées lorsque la porte est ouverte.
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 proposons des tutoriels détaillés sur les Capteurs de Porte et Gmail. Chaque guide comprend des détails complets et des instructions claires, étape par étape, sur l'installation matérielle, les principes de fonctionnement, et comment connecter et programmer l'Arduino. Vous pouvez en savoir plus sur ces tutoriels via ces liens :
This image is created using Fritzing. Click to enlarge image
#include <WiFiS3.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 13
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 Arduino";
String textMsg = "This is an email sent from Arduino.\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("Arduino");
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.println("Connection error: ");
Serial.print("- Status Code: ");
Serial.println(smtp.statusCode());
Serial.print("- Error Code: ");
Serial.println(smtp.errorCode());
Serial.print("- Reason: ");
Serial.println(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.println("Connection error: ");
Serial.print("- Status Code: ");
Serial.println(smtp.statusCode());
Serial.print("- Error Code: ");
Serial.println(smtp.errorCode());
Serial.print("- Reason: ");
Serial.println(smtp.errorReason().c_str());
}
}
void smtpCallback(SMTP_Status status) {
Serial.println(status.info());
if (status.success()) {
for (size_t i = 0; i < smtp.sendingResult.size(); i++) {
SMTP_Result result = smtp.sendingResult.getItem(i);
Serial.print("Status: ");
if (result.completed)
Serial.println("success");
else
Serial.println("failed");
Serial.print("Recipient: ");
Serial.println(result.recipients.c_str());
Serial.print("Subject: ");
Serial.println(result.subject.c_str());
}
Serial.println("----------------\n");
smtp.sendingResult.clear();
}
}
Fixez le capteur de porte sur votre porte.
Reliez la carte Arduino au capteur de porte.
Connectez la carte Arduino à votre ordinateur en utilisant un câble micro USB.
Lancez l'Arduino IDE sur votre ordinateur.
Sélectionnez la bonne carte Arduino (Arduino Uno R4 WiFi) et le port COM.
Dans Arduino IDE, cliquez sur l'icône "Gestionnaire de Bibliothèques" dans le menu de gauche pour l'ouvrir.
Tapez ESP Mail Client dans la boîte de recherche, et cherchez ESP Mail Client par Mobizt.
Appuyez sur le bouton Install pour ajouter la bibliothèque ESP Mail Client.
Copiez le code fourni et ouvrez-le avec l'IDE Arduino.
Mettez à jour les détails de votre WiFi (nom du réseau et mot de passe) dans le code. Changez les valeurs de WIFI_SSID et WIFI_PASSWORD par les vôtres.
Modifiez l'email et le mot de passe de l'expéditeur dans le code. Modifiez SENDER_EMAIL et SENDER_PASSWORD.
※ Note:
Assurez-vous que l'email de l'expéditeur provient de Gmail. Utilisez le mot de passe de l'application de l'étape précédente comme mot de passe de l'expéditeur. L'email du destinataire peut être de n'importe quel type.
Appuyez sur le bouton Upload dans Arduino IDE pour télécharger le code sur l'Arduino.
Ouvrez le Moniteur Série.
Ouvrez la porte.
Consultez les résultats sur le Moniteur Série.
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 Arduino
----------------