#define BLYNK_TEMPLATE_ID "TMPL31KQgGblO"
#define BLYNK_TEMPLATE_NAME "santhiya"
#define BLYNK_AUTH_TOKEN "xQx6IiOlLXTl0u-mIcODDJUTu0l7yVsA"
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#include <Adafruit_Sensor.h>
#include <DHT.h>
#include <WiFi.h>
#include <BlynkSimpleEsp32.h>
#define DHTPIN 15
#define DHTTYPE DHT22
#define SCREEN_WIDTH 128
#define SCREEN_HEIGHT 64
DHT dht(DHTPIN, DHTTYPE);
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, -1);
char auth[] = BLYNK_AUTH_TOKEN;
char ssid[] = "Wokwi-GUEST"; // Use the Wokwi Guest network
char pass[] = "";
void setup() {
Serial.begin(115200);
dht.begin();
if (!display.begin(SSD1306_SWITCHCAPVCC, 0x3C)) {
Serial.println(F("SSD1306 allocation failed"));
while (true); // Infinite loop on error
}
display.display();
delay(2000);
display.clearDisplay();
Blynk.begin(auth, ssid, pass);
}
void updateDisplay(float humidity, float temperature, float fahrenheit, float heatIndexC, float heatIndexF) {
display.clearDisplay();
display.setTextSize(1);
display.setTextColor(SSD1306_WHITE);
display.setCursor(0, 0);
display.print(F("Humidity: "));
display.print(humidity);
display.print(F("%"));
display.setCursor(0, 10);
display.print(F("Temperature: "));
display.print(temperature);
display.print(F("°C "));
display.print(fahrenheit);
display.print(F("°F"));
display.setCursor(0, 20);
display.print(F("Heat index: "));
display.print(heatIndexC);
display.print(F("°C "));
display.print(heatIndexF);
display.print(F("°F"));
display.display();
}
void sendToBlynk(float temperature, float humidity, float fahrenheit) {
Blynk.virtualWrite(V0, temperature); // Virtual pin V0 for temperature
Blynk.virtualWrite(V1, humidity); // Virtual pin V1 for humidity
Blynk.virtualWrite(V2, fahrenheit); // Virtual pin V2 for fahrenheit
}
void loop() {
Blynk.run();
float humidity = dht.readHumidity();
float temperature = dht.readTemperature();
float fahrenheit = dht.readTemperature(true);
if (isnan(humidity) || isnan(temperature) || isnan(fahrenheit)) {
Serial.println(F("Failed to read from DHT sensor!"));
return;
}
float heatIndexF = dht.computeHeatIndex(fahrenheit, humidity);
float heatIndexC = dht.computeHeatIndex(temperature, humidity, false);
Serial.print(F("Humidity: "));
Serial.print(humidity);
Serial.print(F("% Temperature: "));
Serial.print(temperature);
Serial.print(F("°C "));
Serial.print(fahrenheit);
Serial.print(F("°F Heat index: "));
Serial.print(heatIndexC);
Serial.print(F("°C "));
Serial.print(heatIndexF);
Serial.print(F("°F"));
Serial.println();
updateDisplay(humidity, temperature, fahrenheit, heatIndexC, heatIndexF);
sendToBlynk(temperature, humidity, fahrenheit);
delay(2000);
}