#define BLYNK_TEMPLATE_ID "TMPL5jAAC7V56"
#define BLYNK_TEMPLATE_NAME "Environmental Monitoring System"
#define BLYNK_AUTH_TOKEN "5DMlmnMK58SNBmXO5afi7iOIMcRCatG0"
#include <LiquidCrystal_I2C.h>
#include <DHTesp.h>
#include <ESP32Servo.h>
#include <WiFi.h>
#include <WiFiClient.h>
#include <BlynkSimpleEsp32.h>
char auth[] = BLYNK_AUTH_TOKEN;
char ssid[] = "Wokwi-GUEST";
char pass[] = "";
#define LED_PIN 14
#define BUZZ_PIN 12
#define PIR_SENS 17
#define SERVO 32
#define BUTTON 13
//the pin does matter when using the DHT-22 sensor
const double DHT_SENS = 16;
DHTesp dhtSensor;
BlynkTimer timer;
Servo myServo;
LiquidCrystal_I2C lcd(0x27, 20, 4);
void setup() {
// put your setup code here, to run once:
Serial.begin(115200);
Blynk.begin(auth,ssid,pass);
pinMode(LED_PIN, OUTPUT);
pinMode(BUZZ_PIN, OUTPUT);
pinMode(PIR_SENS, INPUT);
pinMode(BUTTON, INPUT);
myServo.attach(SERVO);
lcd.init();
lcd.backlight();
lcd.clear();
lcd.setCursor(0,0);
lcd.print("Temperature:");
lcd.setCursor(0,2);
lcd.print("Humidity:");
dhtSensor.setup(DHT_SENS, DHTesp::DHT22);
}
void loop() {
// put your main code here, to run repeatedly:
Blynk.run();
int PIR_status = digitalRead(PIR_SENS);
int BUTTON_status = digitalRead(BUTTON);
TempAndHumidity data = dhtSensor.getTempAndHumidity();
int temp = data.temperature;
int humid = data.humidity;
Blynk.virtualWrite(V0, temp);
Blynk.virtualWrite(V1, humid);
Blynk.virtualWrite(V2, PIR_status);
Blynk.virtualWrite(V3, BUTTON_status);
if(PIR_status == HIGH){
digitalWrite(LED_PIN, HIGH);
digitalWrite(BUZZ_PIN, HIGH);
Serial.println("Motion Detected!");
}
else{
digitalWrite(LED_PIN, LOW);
digitalWrite(BUZZ_PIN, LOW);
}
if(BUTTON_status == LOW){
myServo.write(90);
Serial.println("Door is locked!");
}
else{
myServo.write(0);
Serial.println("Door is unlocked!");
}
lcd.setCursor(15,0);
lcd.print(temp);
lcd.setCursor(15,2);
lcd.print(humid);
delay(1000);
}