#define BLYNK_TEMPLATE_ID "TMPL6BPiGZOpK"
#define BLYNK_TEMPLATE_NAME "smart"
#include <BlynkSimpleEsp32.h>
#include <DHT.h>
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include <ESP32Servo.h>
#include <WiFi.h>
// Pin Definitions
#define DHTPIN 15
#define DHTTYPE DHT22
#define PUSHBUTTON_PIN 13
#define LED_PIN 14
#define SERVO_PIN 26
#define BUZZER_PIN 12 // Pin for Buzzer
// Objects
DHT dht(DHTPIN, DHTTYPE);
LiquidCrystal_I2C lcd(0x27, 16, 2);
Servo hangerServo;
BlynkTimer timer;
// Blynk Auth and Wi-Fi Credentials
char auth[] = "ivBvGQ0o2KKZCR6mjH-pNva6VIRSqQmC";
char ssid[] = "Wokwi-GUEST";
char pass[] = "";
// State Variables
bool hangerOutside = false; // Tracks if the hanger is outside
bool buttonPressed = false; // Tracks the button press state
void setup() {
// Initialize Serial
Serial.begin(115200);
// Initialize Blynk
Blynk.begin(auth, ssid, pass);
// Initialize Pins
pinMode(PUSHBUTTON_PIN, INPUT_PULLUP);
pinMode(LED_PIN, OUTPUT);
pinMode(BUZZER_PIN, OUTPUT); // Initialize buzzer pin
// Initialize DHT Sensor, LCD, and Servo
dht.begin();
lcd.init();
lcd.backlight();
hangerServo.attach(SERVO_PIN);
hangerServo.write(90); // Initial position inside
// Print Wi-Fi Status
if (WiFi.status() == WL_CONNECTED) {
Serial.println("Wi-Fi connected!");
} else {
Serial.println("Wi-Fi connection failed!");
}
// Timer for periodic updates to Blynk
timer.setInterval(2000L, sendToBlynk); // Every 2 seconds
Serial.println("System Initialized");
}
void loop() {
Blynk.run();
timer.run(); // Run the BlynkTimer
// Read Pushbutton State with Debouncing
if (digitalRead(PUSHBUTTON_PIN) == LOW) {
if (!buttonPressed) {
buttonPressed = true; // Prevent multiple toggles for a single press
// Toggle the hanger position
hangerOutside = !hangerOutside;
if (hangerOutside) {
hangerServo.write(0); // Move hanger outside
digitalWrite(LED_PIN, LOW); // LED off
digitalWrite(BUZZER_PIN, LOW); // Turn off buzzer (sunny)
Serial.println("It's Sunny..! Moving hanger outside");
lcd.setCursor(0, 0);
lcd.print("It's sunny ");
} else {
hangerServo.write(90); // Move hanger inside
digitalWrite(LED_PIN, HIGH); // LED on
digitalWrite(BUZZER_PIN, HIGH); // Turn on buzzer (rainy)
Serial.println("It's rainy..! Moving hanger inside");
lcd.setCursor(0, 0);
lcd.print("It's raining ");
}
}
} else {
buttonPressed = false; // Reset button state when released
}
// Update LCD with Temperature and Humidity
float temperature = dht.readTemperature();
float humidity = dht.readHumidity();
lcd.setCursor(0, 1);
lcd.print("T:");
lcd.print(temperature);
lcd.print(" H:");
lcd.print(humidity);
}
// Function to send data to Blynk
void sendToBlynk() {
// Read DHT Sensor
float temperature = dht.readTemperature();
float humidity = dht.readHumidity();
// Check Sensor Readings
if (isnan(temperature) || isnan(humidity)) {
Serial.println("Failed to read from DHT sensor!");
return;
}
// Prepare status
String status = hangerOutside ? "Sunny" : "Raining";
// Send data to Blynk
Blynk.virtualWrite(V1, status); // V0 for Status
Blynk.virtualWrite(V2, temperature); // V1 for Temperature
Blynk.virtualWrite(V3, humidity); // V2 for Humidity
// Debug
Serial.print("Status: ");
Serial.println(status);
Serial.print("Temperature: ");
Serial.println(temperature);
Serial.print("Humidity: ");
Serial.println(humidity);
}