#include <WiFi.h>
#include "DHT.h"
#include <ESP_Mail_Client.h>
// ================= WIFI =================
#define WIFI_SSID "Wokwi-GUEST"
#define WIFI_PASSWORD ""
// ================= DHT =================
#define DHTPIN 4
#define DHTTYPE DHT22
DHT dht(DHTPIN, DHTTYPE);
// ================= SMTP (MAILTRAP) =================
#define SMTP_HOST "smtp.gmail.com"
#define SMTP_PORT 587
#define AUTHOR_EMAIL "[email protected]"
#define AUTHOR_PASSWORD "vygyrzvcfpkqtbmd"
#define RECIPIENT_EMAIL "[email protected]"
// ================= THRESHOLD =================
float thresholdTemp = 30.0;
// ================= SMTP SESSION =================
SMTPSession smtp;
void setup() {
Serial.begin(115200);
// WiFi connect
WiFi.begin(WIFI_SSID, WIFI_PASSWORD);
Serial.print("Connecting to WiFi");
while (WiFi.status() != WL_CONNECTED) {
Serial.print(".");
delay(500);
}
Serial.println("\nConnected to WiFi!");
dht.begin();
}
void loop() {
float temp = dht.readTemperature();
if (isnan(temp)) {
Serial.println("DHT read failed!");
delay(2000);
return;
}
Serial.print("Temperature: ");
Serial.println(temp);
if (temp > thresholdTemp) {
Serial.println("⚠️ Threshold exceeded! Sending email...");
smtp.debug(1);
sendEmail(temp);
delay(60000); // avoid repeated emails
}
delay(5000);
}
// ================= EMAIL FUNCTION =================
void sendEmail(float temp) {
SMTP_Message message;
message.sender.name = "ESP32 Alert";
message.sender.email = AUTHOR_EMAIL;
message.subject = "Temperature Alert!";
message.addRecipient("User", RECIPIENT_EMAIL);
String body = "Temperature exceeded threshold!\n";
body += "Current Temperature: " + String(temp) + " C";
message.text.content = body.c_str();
ESP_Mail_Session session;
session.server.host_name = SMTP_HOST;
session.server.port = SMTP_PORT;
session.login.email = AUTHOR_EMAIL;
session.login.password = AUTHOR_PASSWORD;
if (!smtp.connect(&session)) {
Serial.println("SMTP connection failed!");
return;
}
if (!MailClient.sendMail(&smtp, &message)) {
Serial.println("Error sending Email: " + smtp.errorReason());
} else {
Serial.println("Email sent successfully!");
}
}