#define BLYNK_TEMPLATE_ID "TMPL6UNyDB6SB"
#define BLYNK_TEMPLATE_NAME "automated food storage"
#define BLYNK_AUTH_TOKEN "5Eu8EJTNM-L-wh6kt7HrYFFEmrv_JZuj"
#include <WiFi.h>
#include <BlynkSimpleEsp32.h>
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include <DHT.h>
#define DHTPIN 4 // Pin connected to the DHT sensor
#define DHTTYPE DHT22 // DHT 22 (AM2302)
#define RELAY_PIN 35 // Pin connected to relay for dehumidifier
#define RELAY_PIN2 32 // Pin connected to relay for cooler
#define RED_LED_PIN 14 // Pin connected to Red LED for humidity indication
#define BLUE_LED_PIN 12 // Pin connected to Blue LED for temperature indication
#define WIFI_LED_PIN 27 // Pin connected to LED for WiFi status
#define SWITCH_PIN 2 // Pin connected to slide switch
DHT dht(DHTPIN, DHTTYPE);
LiquidCrystal_I2C lcd(0x27, 16, 2);
bool wifiConnected = false;
bool displayWifiStatus = true;
bool systemOn = true;
char auth[] = BLYNK_AUTH_TOKEN;
// WiFi credentials
char ssid[] = "Wokwi-GUEST";
char pass[] = "";
BlynkTimer timer;
void setup() {
Serial.begin(115200);
pinMode(RELAY_PIN, OUTPUT);
pinMode(RELAY_PIN2, OUTPUT);
pinMode(RED_LED_PIN, OUTPUT);
pinMode(BLUE_LED_PIN, OUTPUT);
pinMode(WIFI_LED_PIN, OUTPUT);
pinMode(SWITCH_PIN, INPUT_PULLUP);
digitalWrite(RELAY_PIN, LOW);
digitalWrite(RELAY_PIN2, LOW);
digitalWrite(RED_LED_PIN, LOW);
digitalWrite(BLUE_LED_PIN, LOW);
digitalWrite(WIFI_LED_PIN, LOW);
lcd.init();
lcd.backlight();
dht.begin();
WiFi.begin(ssid, pass);
Blynk.config(auth);
timer.setInterval(2000L, readSensors);
}
void readSensors() {
if (systemOn) {
float humidity = dht.readHumidity();
float temperature = dht.readTemperature();
if (isnan(humidity) || isnan(temperature)) {
Serial.println("Failed to read from DHT sensor!");
return;
}
if (humidity > 35.0) {
digitalWrite(RELAY_PIN, HIGH);
digitalWrite(RED_LED_PIN, HIGH);
} else {
digitalWrite(RELAY_PIN, LOW);
digitalWrite(RED_LED_PIN, LOW);
}
if (temperature > 10.0) {
digitalWrite(RELAY_PIN2, HIGH);
digitalWrite(BLUE_LED_PIN, HIGH);
} else {
digitalWrite(RELAY_PIN2, LOW);
digitalWrite(BLUE_LED_PIN, LOW);
}
if (displayWifiStatus) {
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("WiFi Connected");
digitalWrite(WIFI_LED_PIN, HIGH);
delay(3000); // Show WiFi connected status for 3 seconds
displayWifiStatus = false;
lcd.clear();
}
lcd.setCursor(0, 0);
lcd.print("Temp: ");
lcd.print(temperature);
lcd.print("C");
lcd.setCursor(0, 1);
lcd.print("Humidity: ");
lcd.print(humidity);
lcd.print("%");
Blynk.virtualWrite(V0, temperature);
Blynk.virtualWrite(V1, humidity);
} else {
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("System Off");
}
}
void loop() {
if (digitalRead(SWITCH_PIN) == LOW) {
systemOn = false;
digitalWrite(RELAY_PIN, LOW);
digitalWrite(RELAY_PIN2, LOW);
digitalWrite(RED_LED_PIN, LOW);
digitalWrite(BLUE_LED_PIN, LOW);
} else {
systemOn = true;
}
if (WiFi.status() == WL_CONNECTED && !wifiConnected) {
wifiConnected = true;
displayWifiStatus = true;
Blynk.connect();
}
Blynk.run();
timer.run();
}