#define BLYNK_TEMPLATE_ID "TMPL2Na-Eb8sK"
#define BLYNK_TEMPLATE_NAME "Temperature and Humidity Monitor"
#define BLYNK_AUTH_TOKEN "AbQ5JuSGQjKTZvo9eMIPJbL-OP1wFtDz"
#include <WiFi.h> // Include Wi-Fi library
#include <BlynkSimpleEsp32.h> // Include Blynk ESP32 library
#include <DHT.h> // Include DHT library
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
// Wi-Fi credentials
#define WIFI_SSID "Wokwi-GUEST" // Use Wokwi-Guest for Wokwi simulator
#define WIFI_PASSWORD "" // Empty password for Wokwi
// DHT sensor pin and type
#define DHTPIN 4
#define DHTTYPE DHT22
// Potentiometer pin
#define POT_PIN 34 // Pin connected to Potentiometer
// Initialize DHT sensor and LCD
DHT dht(DHTPIN, DHTTYPE);
LiquidCrystal_I2C lcd(0x27, 20, 4);
// Variables for sensor data
float temperature;
float humidity;
int airQuality = 0;
// Simulated variables for testing
float simulatedTemp = 24.0;
float simulatedHum = 40.0;
void connectToWiFi() {
Serial.println("Connecting to Wi-Fi...");
WiFi.begin(WIFI_SSID, WIFI_PASSWORD);
int retryCount = 0;
while (WiFi.status() != WL_CONNECTED && retryCount < 20) {
delay(1000);
Serial.print(".");
retryCount++;
}
if (WiFi.status() == WL_CONNECTED) {
Serial.println("\nWi-Fi connected!");
} else {
Serial.println("\nWi-Fi connection failed.");
while (true) {
delay(1000);
}
}
}
void setup() {
lcd.begin(20, 4); // Initialize 20x4 LCD
lcd.init(); // Initialize the LCD
lcd.backlight(); // Turn on LCD backlight
Serial.begin(115200); // Start serial for debugging
dht.begin(); // Initialize the DHT sensor
connectToWiFi(); // Connect to Wi-Fi
Blynk.begin(BLYNK_AUTH_TOKEN, WIFI_SSID, WIFI_PASSWORD); // Connect to Blynk
}
void loop() {
Blynk.run();
// Simulate changes in temperature and humidity
simulatedTemp += random(-10, 11) / 10.0; // Random change between -1.0 and +1.0
simulatedHum += random(-5, 6) / 10.0; // Random change between -0.5 and +0.5
// Clamp simulated values to realistic ranges
if (simulatedTemp < 15) simulatedTemp = 15;
if (simulatedTemp > 35) simulatedTemp = 35;
if (simulatedHum < 20) simulatedHum = 20;
if (simulatedHum > 80) simulatedHum = 80;
// Read potentiometer value and map to air quality range
int potValue = analogRead(POT_PIN); // Read potentiometer value (0-4095)
airQuality = map(potValue, 0, 4095, 200, 400); // Map value to air quality range (200-400)
// Simulate the effect of air quality on temperature
if (airQuality < 250) {
simulatedTemp += 0.5; // Higher temperature with worse air quality
} else {
simulatedTemp -= 0.5; // Lower temperature with better air quality
}
// Display temperature on LCD (Row 1)
lcd.setCursor(0, 0);
lcd.print("Temp: ");
lcd.print(simulatedTemp); // Use simulatedTemp instead of temperature
lcd.print("C");
// Display humidity on LCD (Row 2)
lcd.setCursor(0, 1);
lcd.print("Humidity: ");
lcd.print(simulatedHum); // Use simulatedHum instead of humidity
lcd.print("%");
// Display air quality on LCD (Row 3)
lcd.setCursor(0, 2);
lcd.print("Air Quality: ");
lcd.print(airQuality);
// Send data to Blynk
Blynk.virtualWrite(V0, simulatedTemp); // Use simulatedTemp for Blynk
Blynk.virtualWrite(V1, simulatedHum); // Use simulatedHum for Blynk
Blynk.virtualWrite(V2, airQuality);
// Log data to Serial Monitor
Serial.print("Temperature: ");
Serial.print(simulatedTemp);
Serial.print(" C, Humidity: ");
Serial.print(simulatedHum);
Serial.print(" %, Air Quality: ");
Serial.print(airQuality);
Serial.print(" (Pot Value: ");
Serial.print(potValue);
Serial.println(")");
delay(2000); // Wait before next update
}