#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include <RTClib.h>
#include <DHT.h>
// Define DHT22 pin and type
#define DHTPIN 8
#define DHTTYPE DHT22
// Initialize LCD (Address: 0x27 for many I2C LCDs, 20 columns and 4 rows)
LiquidCrystal_I2C lcd(0x27, 20, 4);
// Initialize RTC
RTC_DS1307 rtc;
// Initialize DHT sensor
DHT dht(DHTPIN, DHTTYPE);
void setup() {
// Initialize Serial Monitor for debugging (optional)
Serial.begin(9600);
// Initialize LCD
lcd.init();
lcd.backlight();
// Initialize RTC
if (!rtc.begin()) {
lcd.setCursor(0, 0);
lcd.print("RTC not found!");
while (1); // Stop execution
}
// Check if RTC is running, if not set the time
if (!rtc.isrunning()) {
lcd.setCursor(0, 1);
lcd.print("RTC not running!");
// Set RTC to the date & time this sketch was compiled
rtc.adjust(DateTime(F(__DATE__), F(__TIME__)));
}
// Initialize DHT sensor
dht.begin();
}
void loop() {
// Get current time from RTC
DateTime now = rtc.now();
// Read temperature and humidity from DHT22
float temperature = dht.readTemperature(); // Celsius
float humidity = dht.readHumidity();
// Clear LCD before updating
/// lcd.clear();
// Display Date: DD/MM/YYYY
lcd.setCursor(0, 0);
lcd.print("Date: ");
if (now.day() < 10) lcd.print('0');
lcd.print(now.day());
lcd.print('/');
if (now.month() < 10) lcd.print('0');
lcd.print(now.month());
lcd.print('/');
lcd.print(now.year());
// Display Time: HH:MM:SS
lcd.setCursor(0, 1);
lcd.print("Time: ");
if (now.hour() < 10) lcd.print('0');
lcd.print(now.hour());
lcd.print(':');
if (now.minute() < 10) lcd.print('0');
lcd.print(now.minute());
lcd.print(':');
if (now.second() < 10) lcd.print('0');
lcd.print(now.second());
// Display Temperature
lcd.setCursor(0, 2);
lcd.print("Temp: ");
if (isnan(temperature)) {
lcd.print("N/A");
} else {
lcd.print(temperature);
lcd.print(" C");
}
// Display Humidity
lcd.setCursor(0, 3);
lcd.print("Humidity: ");
if (isnan(humidity)) {
lcd.print("N/A");
} else {
lcd.print(humidity);
lcd.print(" %");
}
// Optional: Print to Serial Monitor for debugging
Serial.print("Date: ");
Serial.print(now.day());
Serial.print('/');
Serial.print(now.month());
Serial.print('/');
Serial.print(now.year());
Serial.print(" Time: ");
Serial.print(now.hour());
Serial.print(':');
Serial.print(now.minute());
Serial.print(':');
Serial.print(now.second());
Serial.print(" Temp: ");
Serial.print(temperature);
Serial.print(" C Humidity: ");
Serial.print(humidity);
Serial.println(" %");
// Wait for 1 second before updating again
delay(1000);
}