#include "Network.h" #include #include #include void Network::begin() { // Initiating wifi, like in BasicHttpClient example WiFi.mode(WIFI_STA); WiFi.begin(ssid, pass); int cnt = 0; Serial.print(F("Waiting for WiFi to connect...")); while ((WiFi.status() != WL_CONNECTED)) { Serial.print(F(".")); delay(1000); ++cnt; WiFi.reconnect(); delay(5000); if (cnt == 10) { Serial.println("Can't connect to WIFI, restarting"); delay(100); ESP.restart(); } } Serial.println(F(" connected")); // Find internet time setTime(); } // Gets time from ntp server void Network::getTime(char *timeStr, long offSet) { // Get seconds since 1.1.1970. time_t nowSecs = time(nullptr) + (long)timeZone * 3600L + offSet; // Used to store time struct tm timeinfo; gmtime_r(&nowSecs, &timeinfo); // Copies time string into timeStr strcpy(timeStr, asctime(&timeinfo)); } // Function to get all war data from web bool Network::getData(char *data) { // Variable to store fail bool f = 0; // If not connected to wifi reconnect wifi if (WiFi.status() != WL_CONNECTED) { WiFi.reconnect(); delay(5000); int cnt = 0; Serial.println(F("Waiting for WiFi to reconnect...")); while ((WiFi.status() != WL_CONNECTED)) { // Prints a dot every second that wifi isn't connected Serial.print(F(".")); delay(1000); ++cnt; WiFi.reconnect(); delay(5000); if (cnt == 10) { Serial.println("Can't connect to WIFI, restart initiated."); delay(100); ESP.restart(); } } } // Http object used to make get request HTTPClient http; http.getStream().setTimeout(10); http.getStream().flush(); // Begin http by passing url to it http.begin(calendarURL); delay(300); // Actually do request int httpCode = http.GET(); if (httpCode == 200) { long n = 0; while (http.getStream().available()) data[n++] = http.getStream().read(); data[n++] = 0; } else { Serial.println(httpCode); f = 1; } // end http http.end(); return !f; } void Network::setTime() { // Used for setting correct time configTime(0, 0, "pool.ntp.org", "time.nist.gov"); Serial.print(F("Waiting for NTP time sync: ")); time_t nowSecs = time(nullptr); while (nowSecs < 8 * 3600 * 2) { delay(500); Serial.print(F(".")); yield(); nowSecs = time(nullptr); } Serial.println(); // Used to store time info struct tm timeinfo; gmtime_r(&nowSecs, &timeinfo); Serial.print(F("Current time: ")); Serial.print(asctime(&timeinfo)); }