inkplate-6-arduino-library/examples/03. Projects/04-Google_calendar_example/Network.cpp

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));
}