#define BLYNK_TEMPLATE_ID "TMPL6UNyDB6SB"
#define BLYNK_TEMPLATE_NAME "automated food storage"
#define BLYNK_AUTH_TOKEN "5Eu8EJTNM-L-wh6kt7HrYFFEmrv_JZuj"
#include <DHT.h>
#include <WiFi.h>
#include <BlynkSimpleEsp32.h>
// Define DHT sensor
#define DHTPIN 4 // DHT22 pin
#define DHTTYPE DHT22
DHT dht(DHTPIN, DHTTYPE);
// Define LEDs
#define COOLER_LED_PIN 12
#define DEHUMIDIFIER_LED_PIN 14
#define WIFI_STATUS_LED_PIN 27 // New LED for Wi-Fi status
// Define relays
#define RELAY_COOLER 10
#define RELAY_DEHUMIDIFIER 11
// Define slide switch
#define SWITCH_PIN 2
// Blynk auth token
char auth[] = BLYNK_AUTH_TOKEN;
// Wi-Fi credentials for Wokwi
char ssid[] = "Wokwi-GUEST";
char pass[] = "";
// Variables to store humidity and temperature readings
float humidity, temperature;
void setup() {
// Initialize serial communication
Serial.begin(115200);
// Initialize DHT sensor
Serial.println("Initializing DHT sensor...");
dht.begin();
// Initialize LEDs and relays
pinMode(COOLER_LED_PIN, OUTPUT);
pinMode(DEHUMIDIFIER_LED_PIN, OUTPUT);
pinMode(WIFI_STATUS_LED_PIN, OUTPUT); // Initialize Wi-Fi status LED pin
pinMode(RELAY_COOLER, OUTPUT);
pinMode(RELAY_DEHUMIDIFIER, OUTPUT);
digitalWrite(COOLER_LED_PIN, LOW);
digitalWrite(DEHUMIDIFIER_LED_PIN, LOW);
digitalWrite(WIFI_STATUS_LED_PIN, LOW); // Ensure Wi-Fi status LED is off initially
digitalWrite(RELAY_COOLER, LOW);
digitalWrite(RELAY_DEHUMIDIFIER, LOW);
// Initialize slide switch
pinMode(SWITCH_PIN, INPUT_PULLUP);
// Initialize Wi-Fi and Blynk
Serial.println("Connecting to Wi-Fi...");
Blynk.begin(auth, ssid, pass);
}
void loop() {
// Run Blynk
Blynk.run();
// Check Wi-Fi connection status and update the Wi-Fi status LED
if (WiFi.status() == WL_CONNECTED) {
digitalWrite(WIFI_STATUS_LED_PIN, HIGH); // Turn on Wi-Fi status LED if connected
} else {
digitalWrite(WIFI_STATUS_LED_PIN, LOW); // Turn off Wi-Fi status LED if not connected
}
// Check if the switch is in the ON position
if (digitalRead(SWITCH_PIN) == LOW) {
// Read sensor values
humidity = dht.readHumidity();
temperature = dht.readTemperature();
// Check if any reads failed and exit early
if (isnan(humidity) || isnan(temperature)) {
Serial.println("Failed to read from DHT sensor!");
delay(2000);
return;
}
// Print temperature and humidity to serial monitor for debugging
Serial.print("Temperature: ");
Serial.print(temperature);
Serial.print(" C, Humidity: ");
Serial.print(humidity);
Serial.println(" %");
// Send data to Blynk
Blynk.virtualWrite(V0, temperature);
Blynk.virtualWrite(V1, humidity);
// Control cooler based on temperature
if (temperature > 10) {
digitalWrite(COOLER_LED_PIN, HIGH);
digitalWrite(RELAY_COOLER, HIGH);
Blynk.virtualWrite(V2, 1); // Turn on cooler indicator in Blynk
} else {
digitalWrite(COOLER_LED_PIN, LOW);
digitalWrite(RELAY_COOLER, LOW);
Blynk.virtualWrite(V2, 0); // Turn off cooler indicator in Blynk
}
// Control dehumidifier based on humidity
if (humidity > 35) {
digitalWrite(DEHUMIDIFIER_LED_PIN, HIGH);
digitalWrite(RELAY_DEHUMIDIFIER, HIGH);
Blynk.virtualWrite(V3, 1); // Turn on dehumidifier indicator in Blynk
} else {
digitalWrite(DEHUMIDIFIER_LED_PIN, LOW);
digitalWrite(RELAY_DEHUMIDIFIER, LOW);
Blynk.virtualWrite(V3, 0); // Turn off dehumidifier indicator in Blynk
}
delay(2000); // Delay for sensor reading interval
} else {
// System is off, turn off all outputs
digitalWrite(COOLER_LED_PIN, LOW);
digitalWrite(DEHUMIDIFIER_LED_PIN, LOW);
digitalWrite(RELAY_COOLER, LOW);
digitalWrite(RELAY_DEHUMIDIFIER, LOW);
delay(1000); // Delay to avoid bouncing issues
}
}