ESP32 - Deur Open E-mailmelding
In deze tutorial leren we hoe u een ESP32 gebruikt om e-mailmeldingen te versturen zodra een deur wordt geopend. Deze uitgebreide handleiding behandelt het installatieproces, benodigde componenten en stap-voor-stap instructies om een ESP32 te koppelen aan een deur sensor en een e-mailservice. Zorg voor uw thuisbeveiliging en blijf geïnformeerd met realtime meldingen die direct naar uw inbox worden gestuurd via de ESP32.
Of u kunt de volgende kits kopen:
Openbaarmaking: Sommige van de links in deze sectie zijn Amazon-affiliate links. We kunnen een commissie ontvangen voor aankopen die via deze links worden gedaan, zonder extra kosten voor u. We waarderen uw steun.
We hebben specifieke tutorials over Deursensor en Gmail. Elke tutorial bevat gedetailleerde informatie en stap-voor-stap instructies over hardware pinout, werkingsprincipe, bedrading met ESP32, ESP32 code... Leer er meer over via de volgende links:

This image is created using Fritzing. Click to enlarge image
#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();
}
}
Installeer de deursensor op uw deur
Verbind het ESP32 board met de deursensor
Sluit het ESP32 board aan op uw PC via een micro USB-kabel
Open Arduino IDE op uw PC
Selecteer het juiste ESP32 board (bijv. ESP32 Dev Module) en de juiste COM-poort
Open de Library Manager door te klikken op het Library Manager icoon in de linker navigatiebalk van Arduino IDE
Zoek op ESP Mail Client en selecteer de ESP Mail Client gemaakt door Mobizt
Klik op de Install knop om de ESP Mail Client bibliotheek te installeren

Kopieer de bovenstaande code en open deze in Arduino IDE
Pas de WiFi-informatie (SSID en wachtwoord) in de code aan naar uw eigen gegevens door de twee constanten WIFI_SSID en WIFI_PASSWORD te wijzigen
Pas het e-mailadres en wachtwoord van de afzender in de code aan naar uw eigen gegevens door de twee constanten SENDER_EMAIL en SENDER_PASSWORD te wijzigen
Pas het e-mailadres van de ontvanger in de code aan naar uw eigen gegevens door de constante RECIPIENT_EMAIL te wijzigen. Het ontvangersadres kan hetzelfde zijn als het afzenderadres
※ Notiz:
Het e-mailadres van de afzender MOET Gmail zijn
Het wachtwoord van de afzender is het app-wachtwoord dat u in een eerdere stap hebt ontvangen
Het e-mailadres van de ontvanger kan elk type e-mail zijn
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
----------------
We overwegen het maken van videotutorials. Als u videotutorials belangrijk vindt, abonneer u dan op ons YouTube-kanaal om ons te motiveren de video's te maken.
Bekijk onze video-tutorial voor een visuele begeleiding bij dit project! De video biedt extra inzichten, duidelijke stappen en helpt u snel aan de slag te gaan.