/*
* DHT22 Temperature and Humidity Sensor with ESP32
* Wokwi Simulator Version - No breadboard needed!
*
* Connections in Wokwi:
* DHT22 VCC → ESP32 3V3
* DHT22 SDA → ESP32 GPIO 4
* DHT22 GND → ESP32 GND
*/
#include <DHT.h>
// Define the pin and sensor type
#define DHTPIN 4 // GPIO pin connected to DHT22 data pin
#define DHTTYPE DHT22 // DHT22 sensor type
// Create DHT object
DHT dht(DHTPIN, DHTTYPE);
void setup() {
// Initialize serial communication
Serial.begin(115200);
// Initialize the DHT sensor
dht.begin();
// Print startup message
Serial.println("=================================");
Serial.println(" DHT22 Sensor - Wokwi Demo");
Serial.println("=================================");
Serial.println("🚀 Starting sensor...");
// Wait for sensor to stabilize
delay(2000);
Serial.println("✅ Sensor initialized successfully!");
Serial.println();
}
void loop() {
// Read humidity and temperature
float humidity = dht.readHumidity();
float temperature = dht.readTemperature(); // Celsius
float temperatureF = dht.readTemperature(true); // Fahrenheit
// Check if any reads failed
if (isnan(humidity) || isnan(temperature) || isnan(temperatureF)) {
Serial.println("❌ ERROR: Failed to read from DHT sensor!");
delay(2000);
return;
}
// Calculate heat index (feels like temperature)
float heatIndexC = dht.computeHeatIndex(temperature, humidity, false);
float heatIndexF = dht.computeHeatIndex(temperatureF, humidity);
// Calculate dew point
float dewPoint = temperature - ((100 - humidity) / 5.0);
// Print results with nice formatting
Serial.println("📊 ========== SENSOR READINGS ==========");
Serial.println();
Serial.print("🌡️ Temperature: ");
Serial.print(temperature, 1);
Serial.print(" °C (");
Serial.print(temperatureF, 1);
Serial.println(" °F)");
Serial.print("💧 Humidity: ");
Serial.print(humidity, 1);
Serial.println(" %");
Serial.print("🔥 Heat Index: ");
Serial.print(heatIndexC, 1);
Serial.print(" °C (");
Serial.print(heatIndexF, 1);
Serial.println(" °F)");
Serial.print("💎 Dew Point: ");
Serial.print(dewPoint, 1);
Serial.println(" °C");
// Comfort level indicator
Serial.print("😊 Comfort: ");
if (temperature >= 20 && temperature <= 26 && humidity >= 40 && humidity <= 60) {
Serial.println("COMFORTABLE 😊");
} else if (temperature > 30) {
Serial.println("TOO HOT 🥵");
} else if (temperature < 18) {
Serial.println("TOO COLD 🥶");
} else if (humidity > 70) {
Serial.println("TOO HUMID 💦");
} else if (humidity < 30) {
Serial.println("TOO DRY 🏜️");
} else {
Serial.println("MODERATE 😐");
}
Serial.println("=========================================");
Serial.println();
// Wait 3 seconds before next reading
delay(3000);
}