/*************************************************************
Blynk Weather Station with ESP32 in Wokwi
*************************************************************/
#define BLYNK_TEMPLATE_ID "TMPL6qeuX1RFk"
#define BLYNK_TEMPLATE_NAME "Quickstart Device"
#define BLYNK_AUTH_TOKEN "FQtUBlA18FCZ9xeLp6QoOp2PaHo0Br52"
#define BLYNK_PRINT Serial
#define RAIN_ANALOG 34
#define W_SPEED_ANALOG 35
#define DUST_ANALOG 36
#define LIGHT_ANALOG 39
#include <WiFi.h>
#include <WiFiClient.h>
#include <BlynkSimpleEsp32.h>
#include "DHT.h"
#include <Wire.h>
#include <LCD_I2C.h>
#define DHTPIN 15 // DHT sensor connected to GPIO 4
#define DHTTYPE DHT22 // Change to DHT11 if using a DHT11 sensor
DHT dht(DHTPIN, DHTTYPE);
// Wokwi default WiFi credentials (used for simulation)
char ssid[] = "Wokwi-GUEST";
char pass[] = "";
LCD_I2C lcd(0x27, 16, 2);
BlynkTimer timer;
// Read temperature and humidity and send to Blynk
void sendSensorData() {
float temperature = dht.readTemperature();
float humidity = dht.readHumidity();
int rain =analogRead(RAIN_ANALOG)/10;
int wind_speed = analogRead(W_SPEED_ANALOG)/10;
int dust = analogRead(DUST_ANALOG)/10;
int light = 4065-analogRead((LIGHT_ANALOG));
if (!isnan(temperature) && !isnan(humidity)) {
Blynk.virtualWrite(V6, temperature); // Send temperature to Virtual Pin V0
Blynk.virtualWrite(V5, humidity); // Send humidity to Virtual Pin V1
Blynk.virtualWrite(V7, rain);
Blynk.virtualWrite(V8, wind_speed);
Blynk.virtualWrite(V9, dust);
Blynk.virtualWrite(V10, light);
Serial.print(" Temp: ");
Serial.print(temperature);
Serial.print(" °C, Hum: ");
Serial.print(humidity);
Serial.print(" Rain amount: ");
Serial.print(rain);
Serial.print(" Dust amount: ");
Serial.print(dust);
Serial.print(" Light amount: ");
Serial.print(light);
Serial.print(" Wind amount: ");
Serial.println(wind_speed);
// Display on LCD
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("T:"); lcd.print(temperature); lcd.print("C H:"); lcd.print(humidity); lcd.print("%");
lcd.setCursor(0, 1);
lcd.print("R:"); lcd.print(rain); lcd.print(" D:"); lcd.print(dust); lcd.print(" L:"); lcd.print(light);
} else {
Serial.println("Failed to read from DHT sensor!");
}
}
// This function is called every time the Virtual Pin 0 state changes
BLYNK_WRITE(V0) {
int value = param.asInt();
Blynk.virtualWrite(V1, value);
}
// This function is called every time the device is connected to Blynk.Cloud
BLYNK_CONNECTED() {
}
void setup() {
Serial.begin(115200);
dht.begin();
pinMode(RAIN_ANALOG, INPUT);
pinMode(W_SPEED_ANALOG, INPUT);
pinMode(DUST_ANALOG, INPUT);
pinMode(LIGHT_ANALOG, INPUT);
lcd.begin();
lcd.backlight();
Blynk.begin(BLYNK_AUTH_TOKEN, ssid, pass);
// Call `sendSensorData` every 2 seconds
timer.setInterval(200L, sendSensorData);
}
void loop() {
Blynk.run();
timer.run();
}