#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include <RTClib.h>
#include <DHT.h>
// Initialize LCD with I2C address 0x27 and dimensions 20x4
LiquidCrystal_I2C lcd(0x27, 20, 4);
// Initialize RTC
RTC_DS1307 rtc;
// Define DHT sensor and pin
#define DHTPIN 8
#define DHTTYPE DHT22
DHT dht(DHTPIN, DHTTYPE);
void setup() {
// Initialize LCD
lcd.init();
lcd.backlight();
// Initialize RTC
if (!rtc.begin()) {
lcd.print("Couldn't find RTC");
while (1);
}
if (!rtc.isrunning()) {
lcd.print("RTC is NOT running!");
// Uncomment to set RTC to compile time
// rtc.adjust(DateTime(F(__DATE__), F(__TIME__)));
}
// Initialize DHT sensor
dht.begin();
// Print initial message
lcd.setCursor(0, 0);
lcd.print("Initializing...");
delay(2000); // Wait for 2 seconds
}
void loop() {
// Get current date and time from RTC
DateTime now = rtc.now();
// Get temperature and humidity from DHT22
float humidity = dht.readHumidity();
float temperature = dht.readTemperature();
// Check if any reads failed
if (isnan(humidity) || isnan(temperature)) {
lcd.setCursor(0, 0);
lcd.print("Sensor error");
return;
}
// Display date and time
lcd.setCursor(0, 0);
lcd.print("Date: ");
lcd.print(now.day());
lcd.print('/');
lcd.print(now.month());
lcd.print('/');
lcd.print(now.year());
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 and humidity
lcd.setCursor(0, 2);
lcd.print("Temp: ");
lcd.print(temperature);
lcd.print((char)223); // Degree symbol
lcd.print("C");
lcd.setCursor(0, 3);
lcd.print("Humidity: ");
lcd.print(humidity);
lcd.print("%");
// Wait for a second before updating the display
delay(1000);
}