#include <WiFi.h>
#include <RTClib.h>
#include <NTPClient.h>
#include <WiFiUdp.h>
#define RTC_SDA D1
#define RTC_SCL D2
const char *ssid = "Wokwi-GUEST";
const char *pass = "";
RTC_DS1307 rtc;
WiFiUDP ntpUDP;
NTPClient timeClient(ntpUDP, "pool.ntp.org");
void setup() {
Serial.begin(115200);
// Initialize Wi-Fi
Serial.print("Connecting to WiFi");
WiFi.begin(ssid, pass, 6);
while (WiFi.status() != WL_CONNECTED) {
delay(100);
Serial.print(".");
}
Serial.println(" Connected!");
// Initialize RTC
if (! rtc.begin()) {
Serial.println("RTC module is NOT found");
while (1);
}
// Initialize a NTPClient
timeClient.begin();
// Set offset time in seconds to adjust for your timezone, for example:
// GMT +1 = 3600
// GMT +8 = 28800
// GMT -1 = -3600
// GMT 0 = 0
timeClient.setTimeOffset(28800);
syncTime();
}
void loop() {
DateTime now = rtc.now();
Serial.print("RTC Date 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.dayOfTheWeek());
Serial.print(") ");
Serial.print(now.hour(), DEC);
Serial.print(':');
Serial.print(now.minute(), DEC);
Serial.print(':');
Serial.println(now.second(), DEC);
delay(1000);
delay(10); // this speeds up the simulation
}
void syncTime() {
Serial.println("Time Syncing...");
timeClient.update();
unsigned long epochTime = timeClient.getEpochTime();
struct tm *ptm = gmtime ((time_t *)&epochTime);
rtc.adjust(
DateTime(
ptm->tm_year + 1900,
ptm->tm_mon + 1, ptm->tm_mday,
timeClient.getHours(),
timeClient.getMinutes(),
timeClient.getSeconds()
)
);
}