Use newline geolocation api. make geolocation optional.
All checks were successful
Compile / Compile (push) Successful in 1m26s
All checks were successful
Compile / Compile (push) Successful in 1m26s
This commit is contained in:
parent
5dea52ebe4
commit
33dc87dfd0
5 changed files with 208 additions and 35 deletions
|
@ -17,7 +17,6 @@ lib_deps =
|
||||||
GxEPD2
|
GxEPD2
|
||||||
Time
|
Time
|
||||||
NTPClient
|
NTPClient
|
||||||
ArduinoJson
|
|
||||||
|
|
||||||
lib_ldf_mode = deep+
|
lib_ldf_mode = deep+
|
||||||
board_build.partitions = min_spiffs.csv
|
board_build.partitions = min_spiffs.csv
|
||||||
|
|
126
src/Icons.h
126
src/Icons.h
|
@ -20,4 +20,130 @@ namespace Icons
|
||||||
0x06, 0x07, 0xfe, 0x38, 0x06, 0x07, 0xfe, 0x38, 0x06, 0x07, 0xfe, 0x38, 0x06, 0x07, 0xff, 0xf8,
|
0x06, 0x07, 0xfe, 0x38, 0x06, 0x07, 0xfe, 0x38, 0x06, 0x07, 0xfe, 0x38, 0x06, 0x07, 0xff, 0xf8,
|
||||||
0x06, 0x07, 0xff, 0xf8, 0x06, 0x07, 0xff, 0xf8, 0x06, 0x07, 0xff, 0xf8
|
0x06, 0x07, 0xff, 0xf8, 0x06, 0x07, 0xff, 0xf8, 0x06, 0x07, 0xff, 0xf8
|
||||||
};
|
};
|
||||||
|
|
||||||
|
namespace Weather
|
||||||
|
{
|
||||||
|
const unsigned char wind[] PROGMEM = {
|
||||||
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||||
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||||
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0xc0, 0x00, 0x00, 0x03, 0xe0, 0x00, 0x00, 0x00, 0x60,
|
||||||
|
0x00, 0x00, 0x00, 0xe0, 0x1f, 0xff, 0xff, 0xc0, 0x0f, 0xff, 0xff, 0x80, 0x00, 0x00, 0x00, 0x00,
|
||||||
|
0x1f, 0xff, 0xf0, 0x00, 0x1f, 0xff, 0xf8, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, 0x5c, 0x00,
|
||||||
|
0x00, 0x00, 0xf8, 0x00, 0x00, 0x00, 0x70, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||||
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||||
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
|
||||||
|
};
|
||||||
|
|
||||||
|
const unsigned char humidity[] PROGMEM = {
|
||||||
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||||
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x07, 0x80, 0x00,
|
||||||
|
0x00, 0x0f, 0xc0, 0x00, 0x00, 0x1f, 0xe0, 0x00, 0x00, 0x3f, 0xf0, 0x00, 0x00, 0x3f, 0xb0, 0x00,
|
||||||
|
0x00, 0x47, 0xb8, 0x00, 0x00, 0xdb, 0x78, 0x00, 0x00, 0xdb, 0x7c, 0x00, 0x00, 0xc2, 0xfc, 0x00,
|
||||||
|
0x00, 0xe6, 0xdc, 0x00, 0x01, 0xfd, 0x8c, 0x00, 0x00, 0xfd, 0x2c, 0x00, 0x00, 0xfb, 0x2c, 0x00,
|
||||||
|
0x00, 0xfb, 0x8c, 0x00, 0x00, 0x77, 0xd8, 0x00, 0x00, 0x3f, 0xf0, 0x00, 0x00, 0x1f, 0xe0, 0x00,
|
||||||
|
0x00, 0x07, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||||
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
|
||||||
|
};
|
||||||
|
|
||||||
|
// 50x50
|
||||||
|
const unsigned char day_clear[] PROGMEM = {
|
||||||
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||||
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||||
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||||
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||||
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||||
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||||
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||||
|
0x00, 0x00, 0x0e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x00,
|
||||||
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||||
|
0x0e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||||
|
0x00, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x0e, 0x00,
|
||||||
|
0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x0e, 0x00, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||||
|
0x3e, 0x00, 0x00, 0x00, 0x0f, 0x80, 0x00, 0x00, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x00, 0x1f, 0x00,
|
||||||
|
0x00, 0x00, 0x00, 0x00, 0x0f, 0x80, 0x00, 0x00, 0x3e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0xc0,
|
||||||
|
0x00, 0x00, 0x3c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x80, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00,
|
||||||
|
0x00, 0x00, 0x01, 0x80, 0x7f, 0x80, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xff, 0xf0,
|
||||||
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0xff, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||||
|
0x00, 0x0f, 0xff, 0xfc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0xc0, 0x3e, 0x00, 0x00,
|
||||||
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, 0x00, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3e,
|
||||||
|
0x00, 0x0f, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x07, 0x80, 0x00, 0x00, 0x00,
|
||||||
|
0x00, 0x00, 0x00, 0x78, 0x00, 0x03, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x78, 0x00, 0x03,
|
||||||
|
0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x78, 0x00, 0x03, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x0f,
|
||||||
|
0xf0, 0x78, 0x00, 0x01, 0xc1, 0xfe, 0x00, 0x00, 0x00, 0x1f, 0xf0, 0x70, 0x00, 0x01, 0xc1, 0xff,
|
||||||
|
0x00, 0x00, 0x00, 0x1f, 0xf0, 0x78, 0x00, 0x01, 0xc1, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x78,
|
||||||
|
0x00, 0x03, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x78, 0x00, 0x03, 0xc0, 0x00, 0x00, 0x00,
|
||||||
|
0x00, 0x00, 0x00, 0x78, 0x00, 0x03, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x07,
|
||||||
|
0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3e, 0x00, 0x0f, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||||
|
0x00, 0x1f, 0x00, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, 0x80, 0x3e, 0x00, 0x00,
|
||||||
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0xf1, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07,
|
||||||
|
0xff, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xff, 0xf0, 0x00, 0x00, 0x00, 0x00,
|
||||||
|
0x00, 0x00, 0x00, 0x00, 0x7f, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x80, 0x00, 0x00,
|
||||||
|
0x38, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0xc0, 0x00, 0x00, 0x7c, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||||
|
0x0f, 0x80, 0x00, 0x00, 0x3e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x00, 0x1f, 0x00,
|
||||||
|
0x00, 0x00, 0x00, 0x00, 0x3e, 0x00, 0x00, 0x00, 0x0f, 0x80, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00,
|
||||||
|
0x0e, 0x00, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x0e, 0x00, 0x02, 0x00, 0x00, 0x00,
|
||||||
|
0x00, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0e, 0x00,
|
||||||
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||||
|
0x00, 0x00, 0x0e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x00,
|
||||||
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||||
|
0x0e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||||
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||||
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||||
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||||
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||||
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||||
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||||
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
|
||||||
|
};
|
||||||
|
|
||||||
|
const unsigned char night_clear [] PROGMEM = {
|
||||||
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||||
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||||
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||||
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||||
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||||
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||||
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||||
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||||
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||||
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||||
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||||
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||||
|
0x00, 0x00, 0xff, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0xff, 0x80, 0x00, 0x00,
|
||||||
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0xff, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1f,
|
||||||
|
0xe7, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7f, 0x03, 0x80, 0x00, 0x00, 0x00, 0x00,
|
||||||
|
0x00, 0x00, 0x00, 0x7c, 0x03, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf8, 0x03, 0xc0,
|
||||||
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xf0, 0x03, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||||
|
0x03, 0xe0, 0x01, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0xc0, 0x01, 0xe0, 0x00, 0x00,
|
||||||
|
0x00, 0x00, 0x00, 0x00, 0x07, 0xc0, 0x00, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x80,
|
||||||
|
0x00, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x80, 0x00, 0x7e, 0x00, 0x00, 0x00, 0x00,
|
||||||
|
0x00, 0x00, 0x0f, 0x80, 0x00, 0x3f, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x1f,
|
||||||
|
0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x07, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||||
|
0x0f, 0x00, 0x00, 0x01, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x3e, 0x00,
|
||||||
|
0x00, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0x00,
|
||||||
|
0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0x80, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00,
|
||||||
|
0x00, 0x00, 0x07, 0x80, 0x00, 0x00, 0x3c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x80, 0x00, 0x00,
|
||||||
|
0x3c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0xc0, 0x00, 0x00, 0x3c, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||||
|
0x03, 0xc0, 0x00, 0x00, 0x78, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0xe0, 0x00, 0x00, 0xf8, 0x00,
|
||||||
|
0x00, 0x00, 0x00, 0x00, 0x01, 0xf0, 0x00, 0x01, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xf8,
|
||||||
|
0x00, 0x03, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfc, 0x00, 0x07, 0xe0, 0x00, 0x00, 0x00,
|
||||||
|
0x00, 0x00, 0x00, 0x7f, 0x00, 0x1f, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3f, 0xe0, 0xff,
|
||||||
|
0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||||
|
0x00, 0x07, 0xff, 0xfc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xff, 0xf0, 0x00, 0x00,
|
||||||
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||||
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||||
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||||
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||||
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||||
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||||
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||||
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||||
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||||
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||||
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||||
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||||
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||||
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
|
||||||
|
};
|
||||||
|
}
|
||||||
}
|
}
|
|
@ -18,11 +18,11 @@ void WatchFace::InitBoot()
|
||||||
m_features.wifi.Disconnect();
|
m_features.wifi.Disconnect();
|
||||||
}
|
}
|
||||||
|
|
||||||
static_cast<WatchFacePages::Weather *>(m_pages[1].get())->Resync();
|
|
||||||
|
|
||||||
for (auto & page : m_pages) {
|
for (auto & page : m_pages) {
|
||||||
page->InitBoot();
|
page->InitBoot();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static_cast<WatchFacePages::Weather *>(m_pages[1].get())->Resync();
|
||||||
}
|
}
|
||||||
|
|
||||||
void WatchFace::InitWake()
|
void WatchFace::InitWake()
|
||||||
|
|
|
@ -4,13 +4,13 @@
|
||||||
#include <Fonts/FreeSans9pt7b.h>
|
#include <Fonts/FreeSans9pt7b.h>
|
||||||
#include <Fonts/FreeSansBold9pt7b.h>
|
#include <Fonts/FreeSansBold9pt7b.h>
|
||||||
#include <Fonts/FreeSans12pt7b.h>
|
#include <Fonts/FreeSans12pt7b.h>
|
||||||
|
#include <Fonts/FreeSans18pt7b.h>
|
||||||
#include <HTTPClient.h>
|
#include <HTTPClient.h>
|
||||||
#include <ArduinoJson.h>
|
|
||||||
|
|
||||||
RTC_DATA_ATTR uint64_t WatchFacePages::Weather::m_lastSyncTime = 0;
|
RTC_DATA_ATTR uint64_t WatchFacePages::Weather::m_lastSyncTime = 0;
|
||||||
RTC_DATA_ATTR int WatchFacePages::Weather::m_lastCalculatedDay = 0XFFFFFFFF;
|
RTC_DATA_ATTR int WatchFacePages::Weather::m_lastCalculatedDay = 0XFFFFFFFF;
|
||||||
RTC_DATA_ATTR float WatchFacePages::Weather::m_locationLat = 0.0f;
|
RTC_DATA_ATTR float WatchFacePages::Weather::m_locationLat = DEFAULT_LATITUDE;
|
||||||
RTC_DATA_ATTR float WatchFacePages::Weather::m_locationLon = 0.0f;
|
RTC_DATA_ATTR float WatchFacePages::Weather::m_locationLon = DEFAULT_LONGITUDE;
|
||||||
RTC_DATA_ATTR char WatchFacePages::Weather::m_locationCity[128];
|
RTC_DATA_ATTR char WatchFacePages::Weather::m_locationCity[128];
|
||||||
|
|
||||||
WatchFacePages::Weather::Weather(WatchyDisplay & display, WatchFeatures::WatchFeatures & features)
|
WatchFacePages::Weather::Weather(WatchyDisplay & display, WatchFeatures::WatchFeatures & features)
|
||||||
|
@ -20,6 +20,7 @@ WatchFacePages::Weather::Weather(WatchyDisplay & display, WatchFeatures::WatchFe
|
||||||
|
|
||||||
void WatchFacePages::Weather::InitBoot()
|
void WatchFacePages::Weather::InitBoot()
|
||||||
{
|
{
|
||||||
|
memcpy(m_locationCity, DEFAULT_CITY_NAME, sizeof(DEFAULT_CITY_NAME));
|
||||||
}
|
}
|
||||||
|
|
||||||
void WatchFacePages::Weather::InitWake()
|
void WatchFacePages::Weather::InitWake()
|
||||||
|
@ -28,7 +29,6 @@ void WatchFacePages::Weather::InitWake()
|
||||||
|
|
||||||
void WatchFacePages::Weather::DrawPage(bool partialRefresh)
|
void WatchFacePages::Weather::DrawPage(bool partialRefresh)
|
||||||
{
|
{
|
||||||
Serial.println("Weather:DrawPage");
|
|
||||||
if (m_lastSyncTime == 0) {
|
if (m_lastSyncTime == 0) {
|
||||||
Resync();
|
Resync();
|
||||||
}
|
}
|
||||||
|
@ -54,14 +54,49 @@ void WatchFacePages::Weather::DrawPage(bool partialRefresh)
|
||||||
weatherOutdated = true;
|
weatherOutdated = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
m_display.setFont(&FreeSansBold9pt7b);
|
// City name and icon
|
||||||
|
m_display.setFont(&FreeSans9pt7b);
|
||||||
int16_t x, y;
|
int16_t x, y;
|
||||||
uint16_t w, h;
|
uint16_t w, h;
|
||||||
|
|
||||||
m_display.drawBitmap(5, 5, Icons::city, 29, 23, GxEPD_BLACK);
|
m_display.drawBitmap(5, 5, Icons::city, 29, 23, GxEPD_BLACK);
|
||||||
|
|
||||||
m_display.setCursor(39, 21);
|
m_display.setCursor(39, 22);
|
||||||
m_display.print(m_locationCity);
|
m_display.print(m_locationCity);
|
||||||
|
// Separator
|
||||||
|
m_display.fillRect(10, 35, DISPLAY_WIDTH - 20, 2, GxEPD_BLACK);
|
||||||
|
|
||||||
|
// Temperature and weather icon
|
||||||
|
// Separator
|
||||||
|
m_display.fillRect(10, 118, DISPLAY_WIDTH - 20, 2, GxEPD_BLACK);
|
||||||
|
|
||||||
|
m_display.drawBitmap(0, 120, Icons::Weather::day_clear, 75, 75, GxEPD_BLACK);
|
||||||
|
m_display.setFont(&FreeSans12pt7b);
|
||||||
|
|
||||||
|
std::string temperature = "-20.5 C";
|
||||||
|
|
||||||
|
m_display.getTextBounds(temperature.c_str(), 0, 0, &x, &y, &w, &h);
|
||||||
|
m_display.setCursor(190 - w, 142);
|
||||||
|
m_display.print(temperature.c_str());
|
||||||
|
// Hacky degree symbol
|
||||||
|
m_display.fillCircle(190 - 23, 129, 3, GxEPD_BLACK);
|
||||||
|
m_display.fillCircle(190 - 23, 129, 1, GxEPD_WHITE);
|
||||||
|
|
||||||
|
// Wind speed
|
||||||
|
m_display.drawBitmap(165, 145, Icons::Weather::wind, 30, 30, GxEPD_BLACK);
|
||||||
|
std::string windSpeed = "99 m/s";
|
||||||
|
m_display.setFont(&FreeSans9pt7b);
|
||||||
|
m_display.getTextBounds(windSpeed.c_str(), 0, 0, &x, &y, &w, &h);
|
||||||
|
m_display.setCursor(160 - w, 165);
|
||||||
|
m_display.print(windSpeed.c_str());
|
||||||
|
|
||||||
|
// Humidity
|
||||||
|
m_display.drawBitmap(165, 170, Icons::Weather::humidity, 30, 30, GxEPD_BLACK);
|
||||||
|
std::string humidity = "100";
|
||||||
|
m_display.getTextBounds(humidity.c_str(), 0, 0, &x, &y, &w, &h);
|
||||||
|
m_display.setCursor(160 - w, 190);
|
||||||
|
m_display.print(humidity.c_str());
|
||||||
|
|
||||||
m_display.display(partialRefresh);
|
m_display.display(partialRefresh);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -77,10 +112,11 @@ void WatchFacePages::Weather::Resync()
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (DO_GEOLOCATION) {
|
||||||
HTTPClient client;
|
HTTPClient client;
|
||||||
client.setConnectTimeout(3000); // 3 second max timeout
|
client.setConnectTimeout(3000); // 3 second max timeout
|
||||||
|
|
||||||
client.begin("http://ip-api.com/json/");
|
client.begin("http://ip-api.com/line/");
|
||||||
int httpCode = client.GET();
|
int httpCode = client.GET();
|
||||||
if (httpCode != 200) {
|
if (httpCode != 200) {
|
||||||
m_features.wifi.Disconnect();
|
m_features.wifi.Disconnect();
|
||||||
|
@ -89,25 +125,32 @@ void WatchFacePages::Weather::Resync()
|
||||||
|
|
||||||
String payload = client.getString();
|
String payload = client.getString();
|
||||||
client.end();
|
client.end();
|
||||||
|
std::string reponse(payload.c_str());
|
||||||
|
|
||||||
DynamicJsonDocument json(1024);
|
// Split into lines
|
||||||
DeserializationError error = deserializeJson(json, payload);
|
std::vector<std::string> lines;
|
||||||
if (error) {
|
std::string::size_type pos = 0;
|
||||||
|
std::string::size_type prev = 0;
|
||||||
|
char delimiter = '\n';
|
||||||
|
while ((pos = reponse.find(delimiter, prev)) != std::string::npos) {
|
||||||
|
lines.push_back(reponse.substr(prev, pos - prev));
|
||||||
|
prev = pos + 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Check if we got enough lines
|
||||||
|
if (lines.size() < 14) {
|
||||||
m_features.wifi.Disconnect();
|
m_features.wifi.Disconnect();
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!json.containsKey("lat") || !json.containsKey("lon")) {
|
std::string location = lines[5];
|
||||||
m_features.wifi.Disconnect();
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
std::string location = json["city"].as<std::string>();
|
|
||||||
location = location.substr(0, 127);
|
location = location.substr(0, 127);
|
||||||
memcpy(m_locationCity, location.c_str(), location.length());
|
|
||||||
m_locationCity[location.length()] = '\0';
|
m_locationCity[location.length()] = '\0';
|
||||||
m_locationLat = json["lat"];
|
memcpy(m_locationCity, location.c_str(), location.length());
|
||||||
m_locationLon = json["lon"];
|
m_locationLat = std::stof(lines[7]);
|
||||||
|
m_locationLon = std::stof(lines[8]);
|
||||||
|
}
|
||||||
|
|
||||||
m_features.wifi.Disconnect();
|
m_features.wifi.Disconnect();
|
||||||
|
|
||||||
m_lastSyncTime = currentTime;
|
m_lastSyncTime = currentTime;
|
||||||
|
|
|
@ -42,6 +42,11 @@
|
||||||
#define WAKE_ON_ACCEL_EVENTS false // useful if saving battery by not updating every minute
|
#define WAKE_ON_ACCEL_EVENTS false // useful if saving battery by not updating every minute
|
||||||
|
|
||||||
#define WEATHER_UPDATE_INTERVAL 3600 // seconds
|
#define WEATHER_UPDATE_INTERVAL 3600 // seconds
|
||||||
|
#define DO_GEOLOCATION true // if false then use defaults below
|
||||||
|
|
||||||
|
#define DEFAULT_LATITUDE 60.170833
|
||||||
|
#define DEFAULT_LONGITUDE 24.9375
|
||||||
|
#define DEFAULT_CITY_NAME "Helsinki"
|
||||||
|
|
||||||
#include "secrets.h"
|
#include "secrets.h"
|
||||||
#if !defined(WIFI_SSID) || !defined(WIFI_PASS)
|
#if !defined(WIFI_SSID) || !defined(WIFI_PASS)
|
||||||
|
|
Loading…
Reference in a new issue