#include <WiFi.h>
#define NTP_SERVER "pool.ntp.org"
#define ntpUpdateDelay 20000 // 60 * 1000
#define connectRetryDelay 5000
uint32_t curMillis = 0;
bool timeUpdated = false;
uint32_t lastTimeUpdate = 0;
uint32_t lastConnectAttempt = 0;
bool wifiStatus = WL_STOPPED; // 254
void setup() {
Serial.begin(115200);
Serial.println("");
Serial.println("==> Start! <==");
Serial.println("");
Serial.print("WiFi status: ");
Serial.println(WiFi.status());
}
void loop() {
curMillis = millis();
wifiStatus = WiFi.status();
Serial.print("WiFi status: ");
Serial.print(wifiStatus);
Serial.print(" ==? ");
Serial.println(WL_CONNECTED);
if (wifiStatus != WL_CONNECTED) {
connectWifi();
} else {
updateClock();
}
delay(300);
}
void updateClock() {
if (lastTimeUpdate + ntpUpdateDelay < curMillis) {
Serial.println("The time has come!");
getNtpTime();
}
}
void setClockTime() {
Serial.println("set clock");
lastTimeUpdate = curMillis;
}
void getNtpTime() {
if (wifiStatus == WL_CONNECTED) {
Serial.println("Get ntp time");
setClockTime();
}
}
void connectWifi() {
if (wifiStatus == WL_CONNECTED) {
return;
};
if (lastConnectAttempt == 0) {
Serial.println("Try to connect on start");
WiFi.begin("Wokwi-GUEST", "", 6);
lastConnectAttempt = curMillis;
}
if (lastConnectAttempt + connectRetryDelay < curMillis) {
Serial.println("Try to reconnect");
lastConnectAttempt = curMillis;
WiFi.disconnect();
WiFi.reconnect();
}
}