#include <WiFi.h>
#include <WiFiClientSecure.h>
#include "esp_mail_client.h"
// Sensor Pin
const int mq2Pin = 34;
const int ledPin = 26;
const int buzzerPin = 27;
// Email Credentials
const char* ssid = "your_SSID";
const char* password = "your_PASSWORD";
// Gmail credentials
#define EMAIL_SENDER "[email protected]"
#define EMAIL_PASSWORD "your_email_password"
#define EMAIL_RECIPIENT "[email protected]"
// SMTP server for Gmail
#define SMTP_HOST "smtp.gmail.com"
#define SMTP_PORT 465
// Threshold values (tentukan berdasarkan hasil kalibrasi)
int rokokThreshold = 300; // Nilai threshold untuk asap rokok
int vapeThreshold = 350; // Nilai threshold untuk asap vape
int kebakaranThreshold = 500; // Nilai threshold untuk kebakaran
// Mengirim Email
void sendEmailAlert(const char* subject, const char* message) {
ESP_Mail_Session session;
session.server.host_name = SMTP_HOST;
session.server.port = SMTP_PORT;
session.login.email = EMAIL_SENDER;
session.login.password = EMAIL_PASSWORD;
session.login.user_domain = "";
SMTP_Message email;
email.sender.name = "ESP32";
email.sender.email = EMAIL_SENDER;
email.subject = subject;
email.addRecipient("Recipient", EMAIL_RECIPIENT);
email.text.content = message;
SMTPSession smtp;
if (!smtp.connect(&session)) {
Serial.println("Failed to connect to the server.");
return;
}
if (!MailClient.sendMail(&smtp, &email)) {
Serial.println("Failed to send Email.");
} else {
Serial.println("Email sent successfully.");
}
smtp.closeSession();
}
void setup() {
Serial.begin(115200);
pinMode(ledPin, OUTPUT);
pinMode(buzzerPin, OUTPUT);
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(1000);
Serial.println("Connecting to WiFi...");
}
Serial.println("Connected to WiFi.");
}
void loop() {
int sensorValue = analogRead(mq2Pin);
Serial.print("Sensor Value: ");
Serial.println(sensorValue);
if (sensorValue > kebakaranThreshold) {
// Kebakaran
digitalWrite(ledPin, HIGH);
digitalWrite(buzzerPin, HIGH);
sendEmailAlert("Kebakaran Terdeteksi!", "Terdeteksi asap kebakaran. Segera ambil tindakan.");
delay(10000); // Mengirim email setiap 10 detik untuk kebakaran
} else if (sensorValue > vapeThreshold) {
// Vape terdeteksi
Serial.println("Vape terdeteksi.");
sendEmailAlert("Vape Terdeteksi", "Terdeteksi asap vape.");
delay(10000); // Hindari pengiriman email berlebihan
} else if (sensorValue > rokokThreshold) {
// Asap rokok terdeteksi
Serial.println("Asap rokok terdeteksi.");
sendEmailAlert("Asap Rokok Terdeteksi", "Terdeteksi asap rokok.");
delay(10000);
} else {
// Tidak ada asap berbahaya
digitalWrite(ledPin, LOW);
digitalWrite(buzzerPin, LOW);
}
delay(1000); // Pembacaan setiap detik
}