0% found this document useful (0 votes)
86 views3 pages

ESP32 Email Alert for Temperature Monitoring

This code summarizes an ESP32 project that monitors temperature using a DS18B20 sensor, sends email alerts when the temperature exceeds a threshold, and allows configuring email settings and the threshold through a web interface. The ESP32 connects to WiFi, sets up the temperature sensor and an AsyncWebServer on port 80. It displays the current temperature on the home page and allows changing the recipient, enabling alerts, and threshold through GET requests. On each sensor reading, it checks if the temperature exceeds the threshold and sends an email if so. It also sends an email when the temperature drops below the threshold if a previous alert was sent.
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
86 views3 pages

ESP32 Email Alert for Temperature Monitoring

This code summarizes an ESP32 project that monitors temperature using a DS18B20 sensor, sends email alerts when the temperature exceeds a threshold, and allows configuring email settings and the threshold through a web interface. The ESP32 connects to WiFi, sets up the temperature sensor and an AsyncWebServer on port 80. It displays the current temperature on the home page and allows changing the recipient, enabling alerts, and threshold through GET requests. On each sensor reading, it checks if the temperature exceeds the threshold and sends an email if so. It also sends an email when the temperature drops below the threshold if a previous alert was sent.
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 3

#include <WiFi.

h>
#include <AsyncTCP.h>
#include <ESPAsyncWebServer.h>
#include <OneWire.h>
#include <DallasTemperature.h>
#include "ESP32_MailClient.h"

// REPLACE WITH YOUR AVAILABLE WIFI NETWORK CREDENTIALS


const char* ssid = "XXXXXXXXXX";//SSID of Wifi network
const char* password = "XXXXXXXXXX";// Password of wifi network

// To send Email using Gmail use port 465 (SSL) and SMTP Server [Link]
// YOU MUST ENABLE less secure app option [Link]
#define emailSenderAccount "XXXXXXXXXXXX"// Sender email address
#define emailSenderPassword "XXXXXXXXXXXX" // Sender email password
#define smtpServer "[Link]"
#define smtpServerPort 465
#define emailSubject "[ALERT] ESP32 Temperature" // Email subject

// Default Recipient Email Address


String inputMessage = "[Link]@[Link]"; //Reciepent email alert.
String enableEmailChecked = "checked";
String inputMessage2 = "true";
// Default Threshold Temperature Value
String inputMessage3 = "25.0";// Default temperature
String lastTemperature;

// HTML web page to handle 3 input fields (email_input, enable_email_input, threshold_input)


const char index_html[] PROGMEM = R"rawliteral(
<!DOCTYPE HTML><html><head>
<title>Email Notification with Temperature</title>
<meta name="viewport" content="width=device-width, initial-scale=1">
</head><body>
<h2>DS18B20 Temperature</h2>
<h3>%TEMPERATURE% &deg;C</h3>
<h2>ESP Email Notification</h2>
<form action="/get">
Email Address <input type="email" name="email_input" value="%EMAIL_INPUT%" required><br>
Enable Email Notification <input type="checkbox" name="enable_email_input" value="true" %ENABLE_EMAIL%><br>
Temperature Threshold <input type="number" step="0.1" name="threshold_input" value="%THRESHOLD%" required><br>
<input type="submit" value="Submit">
</form>
</body></html>)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){
//[Link](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);

// The Email Sending data object contains config and data to send
SMTPData smtpData;

void setup() {
[Link](115200);
[Link](WIFI_STA);
[Link](ssid, password);
if ([Link]() != WL_CONNECTED) {
[Link]("WiFi Failed!");
return;
}
[Link]();
[Link]("ESP IP Address: [Link]
[Link]([Link]());

// Start the DS18B20 sensor


[Link]();

// Send web page to client


[Link]("/", HTTP_GET, [](AsyncWebServerRequest *request){
request->send_P(200, "text/html", index_html, processor);
});

// Receive an HTTP GET request at <ESP_IP>/get?email_input=<inputMessage>&enable_email_input=<inputMessage2>&threshold_input=<inputMessage3>


[Link]("/get", HTTP_GET, [] (AsyncWebServerRequest *request) {
// GET email_input value on <ESP_IP>/get?email_input=<inputMessage>
if (request->hasParam(PARAM_INPUT_1)) {
inputMessage = request->getParam(PARAM_INPUT_1)->value();
// GET enable_email_input value on <ESP_IP>/get?enable_email_input=<inputMessage2>
if (request->hasParam(PARAM_INPUT_2)) {
inputMessage2 = request->getParam(PARAM_INPUT_2)->value();
enableEmailChecked = "checked";
}
else {
inputMessage2 = "false";
enableEmailChecked = "";
}
// GET threshold_input value on <ESP_IP>/get?threshold_input=<inputMessage3>
if (request->hasParam(PARAM_INPUT_3)) {
inputMessage3 = request->getParam(PARAM_INPUT_3)->value();
}
}
else {
inputMessage = "No message sent";
}
[Link](inputMessage);
[Link](inputMessage2);
[Link](inputMessage3);
request->send(200, "text/html", "HTTP GET request sent to your ESP.<br><a href=\"/\">Return to Home Page</a>");
});
[Link](notFound);
[Link]();
}

void loop() {
unsigned long currentMillis = millis();
if (currentMillis - previousMillis >= interval) {
previousMillis = currentMillis;
[Link]();
// Temperature in Celsius degrees
float temperature = [Link](0);
[Link](temperature);
[Link](" *C");

// Temperature in Fahrenheit degrees


/*float temperature = [Link](0);
[Link](temperature);
[Link](" *F");*/

lastTemperature = String(temperature);

// Check if temperature is above threshold and if it needs to send the Email alert
if(temperature > [Link]() && inputMessage2 == "true" && !emailSent){
String emailMessage = String("Temperature above threshold. Current temperature: ") +
String(temperature) + String("C");
if(sendEmailNotification(emailMessage)) {
[Link](emailMessage);
emailSent = true;
}
else {
[Link]("Email failed to send");
}
}
// Check if temperature is below threshold and if it needs to send the Email alert
else if((temperature < [Link]()) && inputMessage2 == "true" && emailSent) {
String emailMessage = String("Temperature below threshold. Current temperature: ") +
String(temperature) + String(" C");
if(sendEmailNotification(emailMessage)) {
[Link](emailMessage);
emailSent = false;
}
else {
[Link]("Email failed to send");
}
}
}
}

bool sendEmailNotification(String emailMessage){


// Set the SMTP Server Email host, port, account and password
[Link](smtpServer, smtpServerPort, emailSenderAccount, emailSenderPassword);

// For library version 1.2.0 and later which STARTTLS protocol was supported,the STARTTLS will be
// enabled automatically when port 587 was used, or enable it manually using setSTARTTLS function.
//[Link](true);

// Set the sender name and Email


[Link]("ESP32_ElectronicsInnovation", emailSenderAccount);
// Set Email priority or importance High, Normal, Low or 1 to 5 (1 is highest)
[Link]("High");

// Set the subject


[Link](emailSubject);

// Set the message with HTML format


[Link](emailMessage, true);

// Add recipients
[Link](inputMessage);

[Link](sendCallback);

// Start sending Email, can be set callback function to track the status
if (![Link](smtpData)) {
[Link]("Error sending Email, " + [Link]());
return false;
}
// Clear all data from Email object to free memory
[Link]();
return true;
}

// Callback function to get the Email sending status


void sendCallback(SendStatus msg) {
// Print the current status
[Link]([Link]());

// Do something when complete


if ([Link]()) {
[Link]("----------------");
}
}

You might also like