142 lines
2.9 KiB
C++
142 lines
2.9 KiB
C++
|
#include "Network.h"
|
||
|
|
||
|
#include <WiFi.h>
|
||
|
#include <HTTPClient.h>
|
||
|
#include <WiFiClientSecure.h>
|
||
|
|
||
|
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));
|
||
|
}
|