#include <WiFi.h>
// #include <math.h>
// #include "time.h"
#include <esp_sntp.h>
WiFiClient client;
WiFiServer server(80);
int Initial_Connect_Attempts = 0;
int Try_Count = 0;
char wifissid[18] = "Wokwi-GUEST";
char wifipass[13] = "";
unsigned long current_Millis = 0;
unsigned long request_time_Millis = 10000; // 1 hour = 3600000
unsigned long timeHack_Millis = 0;
int time_month = 0;
int time_day = 0;
int time_hour = 0;
int time_min = 0;
int time_sec = 0;
//---------------------------------------------------------------
void setup() {
Serial.begin(115200);
while (WiFi.status() != WL_CONNECTED) {
Initial_Connect_Attempts++;
Serial.println(F("Attempting to Connect To Local Network: "));
Serial.println(wifissid);
WiFi.begin(wifissid, wifipass);
delay(4000);
if (Initial_Connect_Attempts == 5) {
Serial.println(F("5 LAN connect attempts unsuccessful; going to connectToWifi()"));
connectToWiFi();
}
Serial.print(".");
}
Serial.println("");
Serial.print(F("Connected to WiFi network with IP Address: "));
Serial.println(WiFi.localIP());
Serial.println(F("Attempting to connect to local WPA network..."));
initTime("CST6CDT,M3.2.0,M11.1.0"); // https://sites.google.com/a/usapiens.com/opnode/time-zones
server.begin();
// you're connected now, so print out the status:
Serial.print("WiFi Status: ");
Serial.println(WiFi.status());
Serial.println();
Serial.print(F("ESP Board MAC Address: "));
Serial.println(WiFi.macAddress());
}
//---------------------------------------------------------------
void loop() {
current_Millis = millis();
if ((current_Millis - timeHack_Millis) >= request_time_Millis) {
GetLocalTime();
Serial.println();
Serial.print("Time = Hr: ");
Serial.print(time_hour);
Serial.print(" Min: ");
Serial.print(time_min);
Serial.print(" Sec: ");
Serial.print(time_sec);
Serial.println();
//delay(3000);
timeHack_Millis = current_Millis;
}
}
//---------------------------------------------------------------
void setTimezone(const char* timezone) {
Serial.print(F("Setting Timezone to "));
Serial.println(timezone);
setenv("TZ", timezone, 1);
tzset();
}
//---------------------------------------------------------------
void initTime(const char* timezone) {
struct tm timeinfo;
Serial.println(F("Getting time from NTP server"));
configTime(0, 0, "pool.ntp.org"); // First connect to NTP server, use 0 TZ offset
if (!getLocalTime(&timeinfo)) {
Serial.println(F(" Failed to obtain time"));
return;
}
Serial.println(F("OK, Got the time from NTP"));
setTimezone(timezone); // then set your timezone
}
//---------------------------------------------------------------
void GetLocalTime() { // this function monitors current time of day to initiate
struct tm timeinfo; // pump counter reset at midnight
if (!getLocalTime(&timeinfo)) {
Serial.println(F("Failed to obtain time"));
return;
}
time_hour = timeinfo.tm_hour; // tm structure element "hour" from time.h
time_min = timeinfo.tm_min; // "minute" " "
time_sec = timeinfo.tm_sec; // "second"
time_month = timeinfo.tm_mon + 1; // + 1 is due to way time.h assigns month values (starts w/ 0)
time_day = timeinfo.tm_mday;
Serial.println(&timeinfo, "%A, %B %d %Y %H:%M:%S zone %Z %z ");
Serial.println();
}
//---------------------------------------------------------------
void connectToWiFi() {
Try_Count = 0;
while (WiFi.status() != WL_CONNECTED) {
Try_Count++;
WiFi.disconnect();
WiFi.begin(wifissid, wifipass);
vTaskDelay(10000);
if (Try_Count == 10) {
Serial.println(F("..... 10 attempts failed....rebooting processor..."));
ESP.restart(); // reboot processor!!!
}
}
// WiFi.onEvent( WiFiEvent ); > define WiFiEvent to do ???
}