#include <WiFi.h> // Define WiFi
#include <ESP32Time.h> // Define ESP32Time
ESP32Time *rtc = nullptr;
// Function to get current date and time as a formatted string
String getCurrentDateTimeString() {
struct tm timeinfo;
if (getLocalTime(&timeinfo)) {
char timeString[20]; // Buffer for "%d/%m/%Y %H:%M:%S" (19 chars) + null terminator
strftime(timeString, sizeof(timeString), "%d/%m/%Y %H:%M:%S", &timeinfo);
return String(timeString);
} else {
return "Time not synced"; // Or any other placeholder
}
}
void wiFiStationConnected(WiFiEvent_t event, WiFiEventInfo_t info) {
Serial.println("Connected to AP successfully!");
}
void wiFiGotIP(WiFiEvent_t event, WiFiEventInfo_t info) {
Serial.println("WiFi connected");
Serial.print("IP address: ");
Serial.println(WiFi.localIP());
Serial.println("** Running tasks requiring WiFi");
}
void wiFiStationDisconnected(WiFiEvent_t event, WiFiEventInfo_t info) {
Serial.println("Disconnected from WiFi access point");
Serial.print("WiFi lost connection. Reason: ");
Serial.println(info.wifi_sta_disconnected.reason);
Serial.println("Trying to Reconnect");
WiFi.begin("Wokwi-GUEST", "", 6);
Serial.println("** Running tasks requiring WiFi -- HALTED");
}
void setup() {
Serial.begin(115200);
WiFi.onEvent(wiFiStationConnected, ARDUINO_EVENT_WIFI_STA_CONNECTED);
WiFi.onEvent(wiFiGotIP, ARDUINO_EVENT_WIFI_STA_GOT_IP);
WiFi.onEvent(wiFiStationDisconnected, ARDUINO_EVENT_WIFI_STA_DISCONNECTED);
WiFi.mode(WIFI_STA);
WiFi.begin("Wokwi-GUEST", "", 6);
WiFi.setAutoReconnect(true); // Will try to reconnect
}
void loop() {
delay(1000);
static int count = 1;
if (count < 5) {
// rtc is not yet initialized
Serial.printf("Count %03d: ", count);
Serial.println(getCurrentDateTimeString());
}
else if (count == 5 && rtc == nullptr) {
// ESP32Time preset the RTC to Unix epoch: 1970-01-01 00:00:00
rtc = new ESP32Time(0);
Serial.printf("Count %03d: ", count);
Serial.println("Created rtc object");
}
else if (count < 10) {
Serial.printf("Count %03d: ", count);
Serial.println(rtc->getTimeDate());
}
else if (count == 15) {
Serial.printf("Count %03d: Set time manually\n", count);
rtc->setTime(55, 44, 3, 22, 1, 2020); // 2020-1-22 3:44:55
}
else if (count < 20) {
Serial.printf("Count %03d: ", count);
Serial.println(rtc->getTimeDate());
}
else if (count == 20) {
Serial.printf("Count %03d: Set time from NTP\n");
configTime(8*3600, 0, "pool.ntp.org");
}
else {
Serial.printf("Count %03d: ", count);
Serial.println(rtc->getTimeDate());
}
count++;
}