1#include <WiFiClientSecure.h>
8static String owm_url =
"https://api.openweathermap.org/data/2.5/forecast?q={0},{1}&appid={2}&mode=json&cnt=1";
11static const char *cert =
"-----BEGIN CERTIFICATE-----\n" \
12 "MIIF3jCCA8agAwIBAgIQAf1tMPyjylGoG7xkDjUDLTANBgkqhkiG9w0BAQwFADCB\n" \
13 "iDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCk5ldyBKZXJzZXkxFDASBgNVBAcTC0pl\n" \
14 "cnNleSBDaXR5MR4wHAYDVQQKExVUaGUgVVNFUlRSVVNUIE5ldHdvcmsxLjAsBgNV\n" \
15 "BAMTJVVTRVJUcnVzdCBSU0EgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwHhcNMTAw\n" \
16 "MjAxMDAwMDAwWhcNMzgwMTE4MjM1OTU5WjCBiDELMAkGA1UEBhMCVVMxEzARBgNV\n" \
17 "BAgTCk5ldyBKZXJzZXkxFDASBgNVBAcTC0plcnNleSBDaXR5MR4wHAYDVQQKExVU\n" \
18 "aGUgVVNFUlRSVVNUIE5ldHdvcmsxLjAsBgNVBAMTJVVTRVJUcnVzdCBSU0EgQ2Vy\n" \
19 "dGlmaWNhdGlvbiBBdXRob3JpdHkwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIK\n" \
20 "AoICAQCAEmUXNg7D2wiz0KxXDXbtzSfTTK1Qg2HiqiBNCS1kCdzOiZ/MPans9s/B\n" \
21 "3PHTsdZ7NygRK0faOca8Ohm0X6a9fZ2jY0K2dvKpOyuR+OJv0OwWIJAJPuLodMkY\n" \
22 "tJHUYmTbf6MG8YgYapAiPLz+E/CHFHv25B+O1ORRxhFnRghRy4YUVD+8M/5+bJz/\n" \
23 "Fp0YvVGONaanZshyZ9shZrHUm3gDwFA66Mzw3LyeTP6vBZY1H1dat//O+T23LLb2\n" \
24 "VN3I5xI6Ta5MirdcmrS3ID3KfyI0rn47aGYBROcBTkZTmzNg95S+UzeQc0PzMsNT\n" \
25 "79uq/nROacdrjGCT3sTHDN/hMq7MkztReJVni+49Vv4M0GkPGw/zJSZrM233bkf6\n" \
26 "c0Plfg6lZrEpfDKEY1WJxA3Bk1QwGROs0303p+tdOmw1XNtB1xLaqUkL39iAigmT\n" \
27 "Yo61Zs8liM2EuLE/pDkP2QKe6xJMlXzzawWpXhaDzLhn4ugTncxbgtNMs+1b/97l\n" \
28 "c6wjOy0AvzVVdAlJ2ElYGn+SNuZRkg7zJn0cTRe8yexDJtC/QV9AqURE9JnnV4ee\n" \
29 "UB9XVKg+/XRjL7FQZQnmWEIuQxpMtPAlR1n6BB6T1CZGSlCBst6+eLf8ZxXhyVeE\n" \
30 "Hg9j1uliutZfVS7qXMYoCAQlObgOK6nyTJccBz8NUvXt7y+CDwIDAQABo0IwQDAd\n" \
31 "BgNVHQ4EFgQUU3m/WqorSs9UgOHYm8Cd8rIDZsswDgYDVR0PAQH/BAQDAgEGMA8G\n" \
32 "A1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcNAQEMBQADggIBAFzUfA3P9wF9QZllDHPF\n" \
33 "Up/L+M+ZBn8b2kMVn54CVVeWFPFSPCeHlCjtHzoBN6J2/FNQwISbxmtOuowhT6KO\n" \
34 "VWKR82kV2LyI48SqC/3vqOlLVSoGIG1VeCkZ7l8wXEskEVX/JJpuXior7gtNn3/3\n" \
35 "ATiUFJVDBwn7YKnuHKsSjKCaXqeYalltiz8I+8jRRa8YFWSQEg9zKC7F4iRO/Fjs\n" \
36 "8PRF/iKz6y+O0tlFYQXBl2+odnKPi4w2r78NBc5xjeambx9spnFixdjQg3IM8WcR\n" \
37 "iQycE0xyNN+81XHfqnHd4blsjDwSXWXavVcStkNr/+XeTWYRUc+ZruwXtuhxkYze\n" \
38 "Sf7dNXGiFSeUHM9h4ya7b6NnJSFd5t0dCy5oGzuCr+yDZ4XUmFF0sbmZgIn/f3gZ\n" \
39 "XHlKYC6SQK5MNyosycdiyA5d9zZbyuAlJQG03RoHnHcAP9Dc1ew91Pq7P8yF1m9/\n" \
40 "qS3fuQL39ZeatTXaw2ewh0qpKJ4jjv9cJ2vhsE/zB+4ALtRZh8tSQZXq9EfX7mRB\n" \
41 "VXyNWQKV3WKdwrnuWih0hKWbt5DHDAff9Yk2dDLWKMGwsAvgnEzDHNb842m1R0aB\n" \
42 "L6KCq9NjRHDEjf8tM7qtj3u1cIiuPhnPQCjY/MiQu12ZIvVS5ljFH4gxQ+6IHdfG\n" \
43 "jjxDah2nGN59PRbxYvnKkKj9\n" \
44 "-----END CERTIFICATE-----\n";
48 int httpCode, ret = 0;
50 WiFiClientSecure *client =
new WiFiClientSecure;
51 client->setCACert(cert);
56 owm_url.replace(
"{0}",
city);
57 owm_url.replace(
"{1}",
country);
58 owm_url.replace(
"{2}", owm_api_id);
61 owm_url +=
"&units=metric";
63 owm_url +=
"&units=imperial";
65 DEBUG.printf(
"OWM URL: %s\r\n", owm_url.c_str());
69 https.begin(*client, owm_url.c_str());
70 https.addHeader(
"Content-Type",
"application/json", 0, 0);
72 httpCode = https.GET();
74 if (httpCode == HTTP_CODE_OK) {
76 DEBUG.printf(
"[HTTP] GET SUCCESS\r\n");
77 DynamicJsonDocument json(35 * 1024);
83 DeserializationError error = deserializeJson(json, https.getStream());
86 Serial.print(F(
"deserializeJson() failed: "));
87 Serial.println(error.c_str());
91 JsonObject root = json.as<JsonObject>();
108 DEBUG.printf(
"[HTTP] Failed, error: %s\r\n", https.errorToString(httpCode).c_str());
115 DEBUG.printf(
"[HTTP] COMPLETED \r\n");
126 display.setFont(
font);
129 display.setCursor(x + ((w - wt) / 2), y + ht);
136 uint16_t wt, ht, prev_width = x, prev_height = y;
138 display.setFont(
font);
145 display.getTextBounds(
"77", 0, 0, &xt, &yt, &wt, &ht);
146 display.setCursor(prev_width + 10, prev_height + ht + 2);
157 display.setCursor(prev_width + 10, prev_height + 10 + ht + 2);
167 display.setCursor(prev_width + 10, prev_height + 10 + ht + 2);
173 const uint8_t *bitmap;
#define alert_xlrg_height
const unsigned char alert_xlrg[288]
int8_t fetch_data(const char *city, const char *country, const char *owm_api_id, const char *units="M")
void display_weather_style1(GxEPD2_GFX &display, uint16_t x, uint16_t y)
void display_weather_text_center(GxEPD2_GFX &display, uint16_t x, uint16_t y, uint16_t w)
void display_weather_style2_center(GxEPD2_GFX &display, uint16_t x, uint16_t y, uint16_t w)
const unsigned char cloud_xlrg[288]
const unsigned char drizzle_xlrg[288]
const unsigned char lightning_xlrg[288]
const unsigned char rain_xlrg[288]
const unsigned char snow_xlrg[288]
const unsigned char snowflake_sml[72]
#define snowflake_sml_height
#define snowflake_sml_width
const unsigned char sun_xlrg[288]
#define thermometer_sml_height
const unsigned char thermometer_sml[72]
#define thermometer_sml_width
#define umbrella_sml_width
#define umbrella_sml_height
const unsigned char umbrella_sml[72]
WeatherJsonListener weather_listener
PaperdinkUIWeatherClass Paperdink_Weather
PaperdinkUIWeatherClass Paperdink_Weather