#include <WiFi.h>
#include <Wire.h>
#include <RTClib.h>
#include <WiFiUdp.h>
#include <NTPClient.h>
// Wi-Fi credentials
const char* ssid = ".";
const char* password = "1231231234";
// RTC object
RTC_DS3231 rtc;
// NTP client settings
WiFiUDP ntpUDP;
NTPClient timeClient(ntpUDP, "pool.ntp.org", 19800, 60000); // IST offset: 5 hours 30 minutes
void setup() {
Serial.begin(115200);
// Initialize RTC
if (!rtc.begin()) {
Serial.println("Couldn't find RTC");
while (1);
}
if (rtc.lostPower()) {
Serial.println("RTC lost power, setting time...");
}
// Connect to Wi-Fi
Serial.print("Connecting to Wi-Fi");
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println("\nConnected to Wi-Fi");
// Initialize NTP client
timeClient.begin();
// Sync RTC with NTP
syncRTCWithNTP();
}
void loop() {
// Print time from RTC
DateTime now = rtc.now();
Serial.print("Current RTC Time: ");
Serial.print(now.year(), DEC);
Serial.print('/');
Serial.print(now.month(), DEC);
Serial.print('/');
Serial.print(now.day(), DEC);
Serial.print(" ");
Serial.print(now.hour(), DEC);
Serial.print(':');
Serial.print(now.minute(), DEC);
Serial.print(':');
Serial.println(now.second(), DEC);
delay(1000); // Update every second
}
// Function to sync RTC with NTP time
void syncRTCWithNTP() {
timeClient.update();
// Get time from NTP
unsigned long epochTime = timeClient.getEpochTime();
DateTime ntpTime = DateTime(epochTime);
// Set RTC to NTP time
rtc.adjust(ntpTime);
Serial.println("RTC synchronized with NTP time.");
}