#include <LiquidCrystal_I2C.h>
#include <Wire.h>
#include <DHT.h>
// Initialize LCD at I2C address 0x27 for a 16x2 display
LiquidCrystal_I2C lcd(0x27, 16, 2); // Connection (SCL: 21/GPIO5, SDA: 22/GPIO4)
// Define DHT22 sensor pin and type
#define DHTPIN D1 // Pin where the DHT22 is connected
#define DHTTYPE DHT22 // DHT 22 (AM2302)
DHT dht(DHTPIN, DHTTYPE);
void setup() {
// Start serial communication for debugging
Serial.begin(115200);
// Start the DHT sensor
dht.begin();
// Initialize I2C with default pins (SDA: GPIO4/D2, SCL: GPIO5/D1)
Wire.begin(); // Default works for ESP8266; use Wire.begin(SDA, SCL) for custom pins
// Initialize LCD and turn on backlight
lcd.init();
lcd.backlight();
// Print static labels on the LCD
lcd.setCursor(0, 0);
lcd.print("Temp: ");
lcd.setCursor(0, 1);
lcd.print("Humidity: ");
}
void loop() {
// Read temperature (Celsius) and humidity
float temp = dht.readTemperature();
float hum = dht.readHumidity();
// Check if readings failed
//if (isnan(temp) || isnan(hum)) {
//Serial.println("Error: Failed to read from DHT sensor!");
//lcd.setCursor(0, 0);
//lcd.print("Error reading "); // Clear the line
//lcd.setCursor(0, 1);
//lcd.print("Humidity: --% "); // Clear humidity line
//delay(2000); // Wait before retrying
//return;
//}
// Print temperature and humidity to Serial for debugging
Serial.print("Temperature: ");
Serial.print(temp);
Serial.println(" °C");
Serial.print("Humidity: ");
Serial.print(hum);
Serial.println(" %");
// Clear previous values by overwriting with spaces
lcd.setCursor(6, 0); // After "Temp: "
lcd.print(" "); // Clear previous temperature value
lcd.setCursor(6, 0);
lcd.print(temp, 1); // Display temperature with 1 decimal place lcd.print((char)223); // Degree symbol
lcd.print("C");
lcd.setCursor(10, 1); // After "Humidity: "
lcd.print(" "); // Clear previous humidity value
lcd.setCursor(10, 1);
lcd.print(hum, 1); // Display humidity with 1 decimal place
lcd.print("%");
delay(2000); // Update every 2 seconds
}