#include <WiFi.h>
#include <NTPClient.h>
#include <WiFiUdp.h>
#include <RTClib.h>
// WiFi credentials
const char* ssid = "Wokwi-GUEST";
const char* password = "";
// NTP server and time offset
WiFiUDP ntpUDP;
NTPClient timeClient(ntpUDP, "pool.ntp.org", 8 * 3600, 60000); // GMT+8 (Kuala Lumpur)
// RTC DS3231
RTC_DS3231 rtc;
void setup() {
Serial.begin(115200);
// Connect to WiFi
WiFi.begin(ssid, password);
Serial.print("Connecting to WiFi");
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println("\nWiFi connected!");
// Start the NTP client
timeClient.begin();
timeClient.update();
// Initialize RTC
if (!rtc.begin()) {
Serial.println("Couldn't find RTC");
while (1);
}
// Set RTC time from NTP
updateRTCFromNTP();
}
void loop() {
// Print RTC time every 5 seconds
printRTCTime();
delay(5000);
}
void updateRTCFromNTP() {
timeClient.update();
time_t epochTime = timeClient.getEpochTime();
struct tm *timeinfo = gmtime(&epochTime);
DateTime now(timeinfo->tm_year + 1900, timeinfo->tm_mon + 1, timeinfo->tm_mday,
timeinfo->tm_hour, timeinfo->tm_min, timeinfo->tm_sec);
rtc.adjust(now);
Serial.println("RTC updated with NTP time.");
}
void printRTCTime() {
DateTime now = rtc.now();
Serial.printf("RTC Date & Time: %04d-%02d-%02d %02d:%02d:%02d\n",
now.year(), now.month(), now.day(),
now.hour(), now.minute(), now.second());
}