#include <Arduino.h>
#include <WiFi.h>
#include <ESP_Mail_Client.h>
#include <ThingSpeak.h>
#define WIFI_SSID "102"
#define WIFI_PASSWORD "12345678"
#define SMTP_HOST "smtp.gmail.com"
#define SMTP_PORT 465
#define AUTHOR_EMAIL "[email protected]"
#define AUTHOR_PASSWORD "tderjwiigdfiwevc"
#define RECIPIENT_EMAIL "[email protected]"
// ThingSpeak credentials
const int myChannelNumber = 2838297;
const char* myApiKey = "WEQW3NBH8LOHW2PB";
unsigned long sendDataPrevMillis = 0;
SMTPSession smtp;
WiFiClient client;
void smtpCallback(SMTP_Status status) {
Serial.println(status.info());
if (status.success()) {
Serial.println("Email sent successfully!");
} else {
// Serial.printf("Error: %s\n", status.info().c_str());
}
}
void setup() {
Serial.begin(115200);
Serial.println("Connecting to WiFi...");
WiFi.begin(WIFI_SSID, WIFI_PASSWORD);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println("\nWiFi connected.");
ThingSpeak.begin(client);
}
void sendEmailAlert(float temperature) {
smtp.debug(1);
smtp.callback(smtpCallback);
Session_Config config;
config.server.host_name = SMTP_HOST;
config.server.port = SMTP_PORT;
config.login.email = AUTHOR_EMAIL;
config.login.password = AUTHOR_PASSWORD;
config.login.user_domain = "";
SMTP_Message message;
message.sender.name = "ESP32 Alert";
message.sender.email = AUTHOR_EMAIL;
message.subject = "Temperature Alert!";
message.addRecipient("Receiver", RECIPIENT_EMAIL);
String msg = "Warning! High Temperature Detected: " + String(temperature) + "°C";
message.text.content = msg;
if (!smtp.connect(&config)) {
Serial.println("Failed to connect to SMTP server");
return;
}
if (!MailClient.sendMail(&smtp, &message)) Serial.println("Failed to send email.");
}
void loop() {
// No need for continuous execution
if ((millis() - sendDataPrevMillis > 5000 || sendDataPrevMillis == 0)) {
sendDataPrevMillis = millis();
if (WiFi.status() != WL_CONNECTED) {
Serial.println("WiFi not connected! Reconnecting...");
WiFi.begin(WIFI_SSID, WIFI_PASSWORD);
return;
}
int temperature = random(20, 50); // Simulated temperature data
float humidity = random(30, 90); // Simulated humidity data
Serial.println("Temperature: " + String(temperature) + "°C, Humidity: " + String(humidity) + "%");
// Send data to ThingSpeak
ThingSpeak.setField(1, temperature);
ThingSpeak.setField(2, humidity);
int x = ThingSpeak.writeFields(myChannelNumber, myApiKey);
if (x == 200) {
Serial.println("ThingSpeak update successful.");
} else {
Serial.println("ThingSpeak update failed. HTTP error: " + String(x));
}
// Send email alert if temperature exceeds threshold
if (temperature > 40) {
Serial.println("High temperature detected! Sending email...");
sendEmailAlert(temperature);
delay(100000); // its for debugging for giving time to see mail sending or not
}
}
}