#define BLYNK_TEMPLATE_ID "TMPL2ju_xMfb-"
#define BLYNK_TEMPLATE_NAME "samrt building"
#define BLYNK_AUTH_TOKEN "Lru4m-di5mMpaYYg9E30hMwRlO1zYahZ"
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include "DHT.h"
#include <ESP32Servo.h>
#include <WiFi.h>
#include <BlynkSimpleEsp32.h>
#define BLYNK_PRINT Serial
// Define Pins
#define DHTPIN 4 // DHT sensor pin
#define ldrPin 27 // Smoke sensor pin
#define redLedPin 12 // Red LED pin
#define blueLedPin 2 // blue LED pin
#define greenLedPin 13// Green LED pin
#define buzzerPin 14 // Buzzer pin
#define SERVO_PIN 5 // Servo motor pin
#define PIR_PIN 15 // PIR sensor pin
// Define Pins Blynk serial
#define BLYNK_PRINT Serial
// LCD
LiquidCrystal_I2C lcd(0x27, 16, 3);
// DHT Sensor
#define DHTTYPE DHT22
DHT dht(DHTPIN, DHTTYPE);
// Servo motor
Servo servo;
// connexion configuration
char auth[] = "Lru4m-di5mMpaYYg9E30hMwRlO1zYahZ";
const char ssid[] = "Wokwi-GUEST";
const char password[] = "";
BlynkTimer timer;
// Variables for temperature and humidity
float temperature_, humidity;
void setup() {
Serial.begin(9600); // Start the serial communication
// Initialize LCD
lcd.init();
lcd.backlight();
lcd.clear();
lcd.setCursor(0, 0);
lcd.print(F("Starting..."));
// Initialize DHT sensor
dht.begin();
servo.attach(SERVO_PIN); // Attach the servo to the corresponding pin
// connect to Blynk
Blynk.begin(auth, ssid, password);
// Set pin modes for smoke detection system
pinMode(redLedPin, OUTPUT);
pinMode(greenLedPin, OUTPUT);
pinMode(blueLedPin, OUTPUT);
pinMode(buzzerPin, OUTPUT);
pinMode(ldrPin, INPUT);
pinMode(PIR_PIN, INPUT); // Set PIR sensor pin as input
delay(500); // Short delay before starting the main loop
}
void loop() {
// Read temperature and humidity from DHT sensor
temperature_ = dht.readTemperature();
humidity = dht.readHumidity();
int initialServoPosition = 0; // Position initiale du servo
// Update LCD with temperature and humidity
lcd.setCursor(0, 0);
lcd.print("T:");
lcd.print(temperature_, 1);
lcd.print("C H:");
lcd.print(humidity, 1);
lcd.print("%");
// Read PIR sensor state
int motionState = digitalRead(PIR_PIN);
int sensorValue;
sensorValue = analogRead(ldrPin);
Serial.print("LDR Value: ");
Serial.println(sensorValue);
// Send temperature and humidity data to the serial monitor and Blynk
Serial.print("Temperature: ");
Serial.print(temperature_);
Blynk.virtualWrite(V0,temperature_);
Serial.print("C, Humidity: ");
Serial.print(humidity);
Blynk.virtualWrite(V1,humidity);
Serial.println("%");
Serial.print("LDR: ");
// Control the servo based on temperature
if (temperature_ > 25.0) {
// If temperature is above 25°C, turn on the fan continuously
digitalWrite(blueLedPin, HIGH);
lcd.setCursor(0, 1);
lcd.print("Fan: ON ");
Serial.println("Fan:ON");
} else {
// If temperature is below 25°C, turn off the fan
digitalWrite(blueLedPin, LOW);
lcd.setCursor(0, 1);
lcd.print("Fan: OFF");
}
// fire detection logic
if (sensorValue < 500) {
digitalWrite(redLedPin, HIGH);
digitalWrite(greenLedPin, LOW);
tone(buzzerPin, 100);
lcd.setCursor(0, 3);
lcd.print("Fire detected ");
Serial.print(sensorValue);
Blynk.virtualWrite(V2,humidity);
Serial.println(" Fire detected ");
for (int angle = 0; angle <= 180; angle += 1) {
servo.write(angle);
delay(15); // Adjust the delay as needed for the speed of rotation
}
} else {
digitalWrite(redLedPin, LOW);
digitalWrite(greenLedPin, HIGH);
noTone(buzzerPin);
lcd.setCursor(0, 3);
lcd.print(" ");
Serial.println(" Nothing detected.");
servo.write(initialServoPosition);
}
// Print motion detection to LCD
lcd.setCursor(0, 2);
if (motionState == HIGH) {
lcd.print("Object Detected");
Serial.println("Object Detected");
Blynk.virtualWrite(V3,1);
} else {
lcd.print(" "); // Clear the line if no motion
Blynk.virtualWrite(V3,0);
}
delay(1000); // Wait for 1 second before reading the sensor again.
}