summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--include/weather-icons.h517
-rw-r--r--include/weather.h7
-rw-r--r--platformio.ini2
-rw-r--r--src/main.cpp7
-rw-r--r--src/weather.cpp226
5 files changed, 756 insertions, 3 deletions
diff --git a/include/weather-icons.h b/include/weather-icons.h
new file mode 100644
index 0000000..68d19ff
--- /dev/null
+++ b/include/weather-icons.h
@@ -0,0 +1,517 @@
+/*
+ icons from https://github.com/erikflowers/weather-icons
+ Copyright: Lukas Bischoff, Erik Flowers
+ License: SIL OFL 1.1
+
+ first attempt of conversion with imagemagick:
+ $ convert input.svg -resize 80x80 +dither -monochrome output.xbm
+ results were not very good; lines were too thick
+
+ images were then converted with gimp.
+*/
+
+#define cloudy_width 80
+#define cloudy_height 80
+static unsigned char cloudy_bits[] = {
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0xfc, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff,
+ 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xff, 0x7f, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x3f, 0xfe, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x80, 0x07, 0xf8, 0x01, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0xc0, 0x07, 0x02, 0xe0, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf8,
+ 0x3f, 0x00, 0xc0, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfe, 0xff, 0x00,
+ 0xc0, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x01, 0x80, 0x07,
+ 0x00, 0x00, 0x00, 0x00, 0x80, 0x3f, 0xf8, 0x03, 0x80, 0xff, 0x00, 0x00,
+ 0x00, 0x00, 0xc0, 0x07, 0xc0, 0x07, 0x80, 0xff, 0x01, 0x00, 0x00, 0x00,
+ 0xe0, 0x03, 0x80, 0x0f, 0x80, 0xff, 0x03, 0x00, 0x00, 0x00, 0xf0, 0x01,
+ 0x00, 0x1f, 0x00, 0xff, 0x07, 0x00, 0x00, 0x00, 0xf0, 0x00, 0x00, 0x1e,
+ 0x00, 0x80, 0x0f, 0x00, 0x00, 0x00, 0xf0, 0x00, 0x00, 0x1e, 0x00, 0x00,
+ 0x1f, 0x00, 0x00, 0x00, 0x78, 0x00, 0x00, 0x3c, 0x00, 0x00, 0x1e, 0x00,
+ 0x00, 0x00, 0x7e, 0x00, 0x00, 0xfc, 0x07, 0x00, 0x1e, 0x00, 0x00, 0x80,
+ 0x7f, 0x00, 0x00, 0xfc, 0x1f, 0x00, 0x1c, 0x00, 0x00, 0xc0, 0x7f, 0x00,
+ 0x00, 0xfc, 0x3f, 0x00, 0x3c, 0x00, 0x00, 0xe0, 0x1f, 0x00, 0x00, 0xf8,
+ 0x7f, 0x00, 0x3c, 0x00, 0x00, 0xf0, 0x03, 0x00, 0x00, 0x00, 0xfc, 0x00,
+ 0x1c, 0x00, 0x00, 0xf0, 0x01, 0x00, 0x00, 0x00, 0xf0, 0x00, 0x1e, 0x00,
+ 0x00, 0xf8, 0x00, 0x00, 0x00, 0x00, 0xf0, 0x01, 0x1f, 0x00, 0x00, 0x78,
+ 0x00, 0x00, 0x00, 0x00, 0xe0, 0x01, 0x0f, 0x00, 0x00, 0x78, 0x00, 0x00,
+ 0x00, 0x00, 0xc0, 0xc3, 0x0f, 0x00, 0x00, 0x3c, 0x00, 0x00, 0x00, 0x00,
+ 0xc0, 0xf3, 0x07, 0x00, 0x00, 0x3c, 0x00, 0x00, 0x00, 0x00, 0xc0, 0xf3,
+ 0x03, 0x00, 0x00, 0x3c, 0x00, 0x00, 0x00, 0x00, 0xc0, 0xf3, 0x01, 0x00,
+ 0x00, 0x38, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x33, 0x00, 0x00, 0x00, 0x78,
+ 0x00, 0x00, 0x00, 0x00, 0xc0, 0x03, 0x00, 0x00, 0x00, 0x78, 0x00, 0x00,
+ 0x00, 0x00, 0xe0, 0x01, 0x00, 0x00, 0x00, 0xf8, 0x00, 0x00, 0x00, 0x00,
+ 0xf0, 0x01, 0x00, 0x00, 0x00, 0xf0, 0x01, 0x00, 0x00, 0x00, 0xf8, 0x00,
+ 0x00, 0x00, 0x00, 0xe0, 0x03, 0x00, 0x00, 0x00, 0xfc, 0x00, 0x00, 0x00,
+ 0x00, 0xe0, 0xff, 0xff, 0xff, 0xff, 0x7f, 0x00, 0x00, 0x00, 0x00, 0xc0,
+ 0xff, 0xff, 0xff, 0xff, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff,
+ 0xff, 0xff, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfc, 0xff, 0xff, 0xff,
+ 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };
+
+
+#define rain_width 80
+#define rain_height 80
+static unsigned char rain_bits[] = {
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0xfc, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xff, 0x1f,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, 0xff, 0x7f, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0xf0, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0xf8, 0x0f, 0xff, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0xfc, 0x01, 0xf8, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfe,
+ 0x00, 0xe0, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3f, 0x00, 0xc0,
+ 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, 0x00, 0x80, 0x0f, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x80, 0x1f, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x80, 0x0f, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x80, 0x0f, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x07,
+ 0x00, 0x00, 0xfe, 0x03, 0x00, 0x00, 0x00, 0x00, 0xf8, 0x07, 0x00, 0x00,
+ 0xfe, 0x1f, 0x00, 0x00, 0x00, 0x00, 0xfc, 0x07, 0x00, 0x00, 0xfe, 0x3f,
+ 0x00, 0x00, 0x00, 0x00, 0xfe, 0x07, 0x00, 0x00, 0xfc, 0x7f, 0x00, 0x00,
+ 0x00, 0x00, 0xff, 0x01, 0x00, 0x00, 0x80, 0xff, 0x00, 0x00, 0x00, 0x80,
+ 0x3f, 0x00, 0x00, 0x00, 0x00, 0xfc, 0x01, 0x00, 0x00, 0xc0, 0x0f, 0x00,
+ 0x00, 0x00, 0x00, 0xf0, 0x03, 0x00, 0x00, 0xc0, 0x07, 0x00, 0x00, 0x00,
+ 0x00, 0xe0, 0x03, 0x00, 0x00, 0xe0, 0x03, 0x00, 0x00, 0x00, 0x00, 0xc0,
+ 0x07, 0x00, 0x00, 0xe0, 0x03, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x07, 0x00,
+ 0x00, 0xe0, 0x01, 0x00, 0x00, 0x00, 0x00, 0x80, 0x07, 0x00, 0x00, 0xf0,
+ 0x01, 0x00, 0x00, 0x00, 0x00, 0x80, 0x0f, 0x00, 0x00, 0xf0, 0x01, 0x00,
+ 0x00, 0x00, 0x00, 0x80, 0x0f, 0x00, 0x00, 0xf0, 0x01, 0x00, 0x02, 0x04,
+ 0x08, 0x80, 0x0f, 0x00, 0x00, 0xf0, 0x01, 0x80, 0x07, 0x0f, 0x1e, 0x80,
+ 0x0f, 0x00, 0x00, 0xe0, 0x01, 0x80, 0x0f, 0x0f, 0x1e, 0x80, 0x07, 0x00,
+ 0x00, 0xe0, 0x03, 0x80, 0x07, 0x0f, 0x1e, 0xc0, 0x07, 0x00, 0x00, 0xe0,
+ 0x03, 0xc0, 0x87, 0x0f, 0x1f, 0xc0, 0x07, 0x00, 0x00, 0xc0, 0x07, 0xc0,
+ 0x87, 0x0f, 0x1f, 0xe0, 0x03, 0x00, 0x00, 0xc0, 0x0f, 0xc0, 0x87, 0x0f,
+ 0x0f, 0xf0, 0x03, 0x00, 0x00, 0x80, 0x1f, 0xc0, 0x83, 0x07, 0x0f, 0xf8,
+ 0x01, 0x00, 0x00, 0x80, 0x7f, 0xe0, 0xc3, 0x87, 0x0f, 0xfe, 0x01, 0x00,
+ 0x00, 0x00, 0xff, 0xe3, 0xc3, 0x87, 0xcf, 0xff, 0x00, 0x00, 0x00, 0x00,
+ 0xfe, 0xe3, 0xc1, 0x83, 0xc7, 0x7f, 0x00, 0x00, 0x00, 0x00, 0xf8, 0xf3,
+ 0xc1, 0xc3, 0xc7, 0x1f, 0x00, 0x00, 0x00, 0x00, 0xe0, 0xf3, 0xe1, 0xc3,
+ 0xc7, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf0, 0xe1, 0xc3, 0x03, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0xf0, 0xe0, 0xc1, 0x03, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0xf8, 0xf0, 0xe1, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0xf8, 0xf0, 0xe1, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x78,
+ 0xf0, 0xe1, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x78, 0xf0, 0xe0,
+ 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x78, 0xf8, 0xe0, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x78, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x7c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x7c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7c, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };
+
+
+#define snow_width 80
+#define snow_height 80
+static unsigned char snow_bits[] = {
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0xfc, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xff, 0x1f,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, 0xff, 0x7f, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0xf0, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0xf8, 0x0f, 0xff, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0xfc, 0x01, 0xf8, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7e,
+ 0x00, 0xe0, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3f, 0x00, 0xc0,
+ 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, 0x00, 0x80, 0x0f, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x80, 0x1f, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x80, 0x0f, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x80, 0x07, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x07,
+ 0x00, 0x00, 0xfe, 0x03, 0x00, 0x00, 0x00, 0x00, 0xf8, 0x07, 0x00, 0x00,
+ 0xfe, 0x0f, 0x00, 0x00, 0x00, 0x00, 0xfc, 0x07, 0x00, 0x00, 0xfe, 0x3f,
+ 0x00, 0x00, 0x00, 0x00, 0xfe, 0x07, 0x00, 0x00, 0xfe, 0x7f, 0x00, 0x00,
+ 0x00, 0x00, 0xff, 0x01, 0x00, 0x00, 0x80, 0xff, 0x00, 0x00, 0x00, 0x80,
+ 0x1f, 0x00, 0x00, 0x00, 0x00, 0xfc, 0x01, 0x00, 0x00, 0xc0, 0x0f, 0x00,
+ 0x00, 0x00, 0x00, 0xf0, 0x03, 0x00, 0x00, 0xc0, 0x07, 0x00, 0x00, 0x00,
+ 0x00, 0xe0, 0x03, 0x00, 0x00, 0xe0, 0x03, 0x00, 0x00, 0x00, 0x00, 0xc0,
+ 0x07, 0x00, 0x00, 0xe0, 0x03, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x07, 0x00,
+ 0x00, 0xe0, 0x01, 0x00, 0x00, 0x00, 0x00, 0x80, 0x07, 0x00, 0x00, 0xe0,
+ 0x01, 0x00, 0x00, 0x00, 0x00, 0x80, 0x07, 0x00, 0x00, 0xf0, 0x01, 0x00,
+ 0x00, 0x00, 0x00, 0x80, 0x0f, 0x00, 0x00, 0xf0, 0x01, 0x00, 0x00, 0x00,
+ 0x00, 0x80, 0x0f, 0x00, 0x00, 0xf0, 0x01, 0x00, 0x00, 0x00, 0x00, 0x80,
+ 0x07, 0x00, 0x00, 0xe0, 0x01, 0x00, 0x00, 0x00, 0x00, 0x80, 0x07, 0x00,
+ 0x00, 0xe0, 0x01, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x07, 0x00, 0x00, 0xe0,
+ 0x03, 0x00, 0x80, 0x01, 0x00, 0xc0, 0x07, 0x00, 0x00, 0xe0, 0x07, 0x00,
+ 0xc0, 0x03, 0x00, 0xe0, 0x03, 0x00, 0x00, 0xc0, 0x0f, 0x00, 0xc0, 0x03,
+ 0x00, 0xf0, 0x03, 0x00, 0x00, 0x80, 0x1f, 0x00, 0xc0, 0x03, 0x00, 0xf8,
+ 0x01, 0x00, 0x00, 0x80, 0x7f, 0x00, 0x80, 0x01, 0x00, 0xfe, 0x01, 0x00,
+ 0x00, 0x00, 0xff, 0xc1, 0x01, 0x80, 0xc3, 0xff, 0x00, 0x00, 0x00, 0x00,
+ 0xfe, 0xe1, 0x03, 0x80, 0xc7, 0x7f, 0x00, 0x00, 0x00, 0x00, 0xf8, 0xe1,
+ 0x03, 0x80, 0xc7, 0x1f, 0x00, 0x00, 0x00, 0x00, 0xe0, 0xc1, 0x01, 0x80,
+ 0xc3, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x01, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0xc0, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0xc0, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0xc0, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x01, 0x80, 0x03, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, 0x03, 0xc0, 0x07, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0xc0, 0x03, 0x80, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0xc0, 0x01, 0x80, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x03,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x03, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x03, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x80, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };
+
+
+#define thunderstorm_width 80
+#define thunderstorm_height 80
+static const unsigned char thunderstorm_bits[] = {
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0xfe, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xff, 0x1f,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, 0xff, 0x7f, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0xf0, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0xf8, 0x0f, 0xfe, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0xfc, 0x01, 0xf8, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7e,
+ 0x00, 0xe0, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3f, 0x00, 0xc0,
+ 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, 0x00, 0x80, 0x0f, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x80, 0x1f, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x80, 0x0f, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x80, 0x0f, 0x00, 0x00, 0x3e, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x07,
+ 0x00, 0x00, 0xfe, 0x07, 0x00, 0x00, 0x00, 0x00, 0xf8, 0x07, 0x00, 0x00,
+ 0xfe, 0x1f, 0x00, 0x00, 0x00, 0x00, 0xfc, 0x07, 0x00, 0x00, 0xfe, 0x3f,
+ 0x00, 0x00, 0x00, 0x00, 0xff, 0x07, 0x00, 0x00, 0xfc, 0xff, 0x00, 0x00,
+ 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0x00, 0xff, 0x01, 0x00, 0x00, 0x80,
+ 0x1f, 0x00, 0x00, 0x00, 0x00, 0xf8, 0x01, 0x00, 0x00, 0xc0, 0x0f, 0x00,
+ 0x00, 0x00, 0x00, 0xf0, 0x03, 0x00, 0x00, 0xc0, 0x07, 0x00, 0x00, 0x00,
+ 0x00, 0xe0, 0x03, 0x00, 0x00, 0xe0, 0x03, 0x00, 0x00, 0x00, 0x00, 0xc0,
+ 0x07, 0x00, 0x00, 0xe0, 0x03, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x07, 0x00,
+ 0x00, 0xe0, 0x01, 0x00, 0x00, 0x00, 0x00, 0x80, 0x07, 0x00, 0x00, 0xf0,
+ 0x01, 0x00, 0x00, 0x00, 0x00, 0x80, 0x0f, 0x00, 0x00, 0xf0, 0x01, 0x00,
+ 0x00, 0x00, 0x00, 0x80, 0x0f, 0x00, 0x00, 0xf0, 0x01, 0xf8, 0x07, 0x04,
+ 0x08, 0x80, 0x0f, 0x00, 0x00, 0xf0, 0x01, 0xfc, 0x07, 0x0f, 0x1e, 0x80,
+ 0x0f, 0x00, 0x00, 0xe0, 0x01, 0xfc, 0x03, 0x0f, 0x1e, 0x80, 0x07, 0x00,
+ 0x00, 0xe0, 0x03, 0xfe, 0x03, 0x0f, 0x1e, 0xc0, 0x07, 0x00, 0x00, 0xe0,
+ 0x03, 0xfe, 0x81, 0x0f, 0x1f, 0xc0, 0x07, 0x00, 0x00, 0xc0, 0x07, 0xfe,
+ 0x81, 0x0f, 0x1f, 0xe0, 0x07, 0x00, 0x00, 0xc0, 0x0f, 0xff, 0x80, 0x0f,
+ 0x1f, 0xf0, 0x03, 0x00, 0x00, 0x80, 0x1f, 0xff, 0x80, 0x07, 0x0f, 0xf8,
+ 0x01, 0x00, 0x00, 0x80, 0xff, 0x7f, 0xc0, 0x87, 0x0f, 0xff, 0x01, 0x00,
+ 0x00, 0x00, 0xff, 0x7f, 0xc0, 0x87, 0xcf, 0xff, 0x00, 0x00, 0x00, 0x00,
+ 0xfe, 0x3f, 0xc0, 0x87, 0xcf, 0x7f, 0x00, 0x00, 0x00, 0x00, 0xf8, 0x3f,
+ 0xc0, 0x83, 0xc7, 0x1f, 0x00, 0x00, 0x00, 0x00, 0xe0, 0x1f, 0xe0, 0xc3,
+ 0xc7, 0x07, 0x00, 0x00, 0x00, 0x00, 0xc0, 0xff, 0xe3, 0xc3, 0x07, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0xe0, 0xff, 0xe3, 0xc3, 0x07, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0xe0, 0xff, 0xe3, 0xc1, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0xf0, 0xff, 0xf1, 0xe1, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf0, 0xff,
+ 0xf0, 0xe1, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfc, 0xf0, 0xe0,
+ 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7c, 0xf0, 0xc0, 0x01, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x3e, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x1e, 0x78, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0e,
+ 0x78, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0e, 0x7c, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x7c, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x3c, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x03, 0x38, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };
+
+
+#define sunny_width 80
+#define sunny_height 80
+static unsigned char sunny_bits[] = {
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x03, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0xc0, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0xc0, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0xc0, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x03,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x03, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x03, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x20, 0x00, 0xc0, 0x03, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00,
+ 0xf0, 0x00, 0xc0, 0x03, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x00, 0xf8, 0x01,
+ 0x00, 0x00, 0x80, 0x1f, 0x00, 0x00, 0x00, 0x00, 0xf0, 0x03, 0x00, 0x00,
+ 0xc0, 0x0f, 0x00, 0x00, 0x00, 0x00, 0xf0, 0x07, 0x00, 0x00, 0xe0, 0x0f,
+ 0x00, 0x00, 0x00, 0x00, 0xe0, 0x07, 0x00, 0x00, 0xe0, 0x07, 0x00, 0x00,
+ 0x00, 0x00, 0xc0, 0x0f, 0x00, 0x00, 0xf0, 0x03, 0x00, 0x00, 0x00, 0x00,
+ 0x80, 0x07, 0xe0, 0x07, 0xe0, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02,
+ 0xfc, 0x3f, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xff, 0xff, 0x01, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0xff, 0xff, 0x03, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0xe0, 0x0f, 0xf0, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0xf0, 0x03, 0xc0, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf0,
+ 0x01, 0x80, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf8, 0x00, 0x00,
+ 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf8, 0x00, 0x00, 0x1f, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x78, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x7c, 0x00, 0x00, 0x3e, 0x00, 0x00, 0x00, 0x00, 0xf0,
+ 0x1f, 0x7c, 0x00, 0x00, 0x3e, 0xf8, 0x0f, 0x00, 0x00, 0xf0, 0x1f, 0x7c,
+ 0x00, 0x00, 0x3e, 0xf8, 0x0f, 0x00, 0x00, 0xf0, 0x1f, 0x7c, 0x00, 0x00,
+ 0x3e, 0xf8, 0x0f, 0x00, 0x00, 0xf0, 0x1f, 0x7c, 0x00, 0x00, 0x3e, 0xf8,
+ 0x0f, 0x00, 0x00, 0x00, 0x00, 0x7c, 0x00, 0x00, 0x3e, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x78, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0xf8, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf8,
+ 0x00, 0x00, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf0, 0x01, 0x80,
+ 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf0, 0x03, 0xc0, 0x0f, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, 0x0f, 0xf0, 0x07, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0xc0, 0xff, 0xff, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x80, 0xff, 0xff, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xfc, 0x3f,
+ 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x07, 0xe0, 0x07, 0xe0, 0x01,
+ 0x00, 0x00, 0x00, 0x00, 0xc0, 0x0f, 0x00, 0x00, 0xf0, 0x03, 0x00, 0x00,
+ 0x00, 0x00, 0xe0, 0x07, 0x00, 0x00, 0xe0, 0x07, 0x00, 0x00, 0x00, 0x00,
+ 0xf0, 0x07, 0x00, 0x00, 0xe0, 0x0f, 0x00, 0x00, 0x00, 0x00, 0xf0, 0x03,
+ 0x00, 0x00, 0xc0, 0x0f, 0x00, 0x00, 0x00, 0x00, 0xf8, 0x01, 0x00, 0x00,
+ 0x80, 0x1f, 0x00, 0x00, 0x00, 0x00, 0xf0, 0x00, 0xc0, 0x03, 0x00, 0x0f,
+ 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0xc0, 0x03, 0x00, 0x04, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0xc0, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0xc0, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0xc0, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x03,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x03, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x03, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0xc0, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };
+
+
+#define fog_width 80
+#define fog_height 80
+static unsigned char fog_bits[] = {
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0xf8, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x7f,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xff, 0xff, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, 0xff, 0xff, 0x01, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0xf0, 0x3f, 0xfe, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0xf8, 0x03, 0xf0, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfc,
+ 0x01, 0xc0, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfc, 0x00, 0x80,
+ 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7e, 0x00, 0x00, 0x1f, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x3e, 0x00, 0x00, 0x3e, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x3e, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x1f, 0x00, 0x00, 0x7c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x1f,
+ 0x00, 0x00, 0xfc, 0x0f, 0x00, 0x00, 0x00, 0x00, 0xe0, 0x0f, 0x00, 0x00,
+ 0xfc, 0x3f, 0x00, 0x00, 0x00, 0x00, 0xf8, 0x0f, 0x00, 0x00, 0xf8, 0xff,
+ 0x00, 0x00, 0x00, 0x00, 0xfc, 0x0f, 0x00, 0x00, 0xf8, 0xff, 0x01, 0x00,
+ 0x00, 0x00, 0xfe, 0x01, 0x00, 0x00, 0x00, 0xfe, 0x03, 0x00, 0x00, 0x00,
+ 0x7f, 0x00, 0x00, 0x00, 0x00, 0xf0, 0x03, 0x00, 0x00, 0x00, 0x1f, 0x00,
+ 0x00, 0x00, 0x00, 0xe0, 0x07, 0x00, 0x00, 0x80, 0x0f, 0x00, 0x00, 0x00,
+ 0x00, 0xc0, 0x0f, 0x00, 0x00, 0x80, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x80,
+ 0x0f, 0x00, 0x00, 0x80, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0x0f, 0x00, 0x00, 0xc0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x0f, 0x00,
+ 0x00, 0xc0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x0f, 0x00, 0x00, 0x80,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 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, 0xff, 0xff, 0xff, 0xff, 0xff, 0x1f, 0x00, 0x00, 0x80, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0x1f, 0x00, 0x00, 0x80, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0x1f, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 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, 0xf0, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0xf8, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0x01, 0x00, 0x00, 0xf8, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0x01, 0x00, 0x00, 0xf8, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x01,
+ 0x00, 0x00, 0xe0, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };
+
+
+#define humidity_width 30
+#define humidity_height 30
+static unsigned char humidity_bits[] = {
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0xc0, 0x00, 0x00, 0x00, 0xe0, 0x01, 0x00, 0x00, 0xf0, 0x03, 0x00,
+ 0x00, 0xf8, 0x07, 0x00, 0x00, 0xfc, 0x07, 0x00, 0x00, 0xfc, 0x0d, 0x00,
+ 0x00, 0xc2, 0x1c, 0x00, 0x00, 0xca, 0x1e, 0x00, 0x00, 0x4b, 0x3e, 0x00,
+ 0x00, 0x43, 0x3f, 0x00, 0x00, 0x67, 0x3b, 0x00, 0x00, 0xbf, 0x31, 0x00,
+ 0x00, 0xbf, 0x34, 0x00, 0x00, 0xdf, 0x34, 0x00, 0x00, 0xdf, 0x31, 0x00,
+ 0x00, 0xce, 0x19, 0x00, 0x00, 0xfc, 0x0f, 0x00, 0x00, 0xf8, 0x07, 0x00,
+ 0x00, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };
+
+
+#define thermometer_width 30
+#define thermometer_height 30
+static unsigned char thermometer_bits[] = {
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0xe0, 0x01, 0x00, 0x00, 0x30, 0x03, 0x00, 0x00, 0x30, 0x03, 0x00,
+ 0x00, 0x30, 0x03, 0x00, 0x00, 0x30, 0x03, 0x00, 0x00, 0x30, 0x03, 0x00,
+ 0x00, 0x30, 0x03, 0x00, 0x00, 0x30, 0x03, 0x00, 0x00, 0x30, 0x03, 0x00,
+ 0x00, 0x30, 0x03, 0x00, 0x00, 0x30, 0x03, 0x00, 0x00, 0x30, 0x03, 0x00,
+ 0x00, 0x30, 0x03, 0x00, 0x00, 0x18, 0x06, 0x00, 0x00, 0xcc, 0x0c, 0x00,
+ 0x00, 0xec, 0x0d, 0x00, 0x00, 0xfc, 0x0d, 0x00, 0x00, 0xec, 0x0d, 0x00,
+ 0x00, 0xec, 0x0d, 0x00, 0x00, 0x18, 0x06, 0x00, 0x00, 0xf0, 0x03, 0x00,
+ 0x00, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };
+
+
+#define barometer_width 30
+#define barometer_height 30
+static unsigned char barometer_bits[] = {
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0xf0, 0x03, 0x00, 0x00, 0xfc, 0x0f, 0x00, 0x00, 0x0e, 0x1c, 0x00,
+ 0x00, 0x86, 0x1a, 0x00, 0x00, 0x0b, 0x32, 0x00, 0x00, 0x03, 0x31, 0x00,
+ 0x00, 0x01, 0x21, 0x00, 0x00, 0x8d, 0x25, 0x00, 0x00, 0xc1, 0x21, 0x00,
+ 0x00, 0xc3, 0x30, 0x00, 0x00, 0x03, 0x30, 0x00, 0x00, 0x06, 0x18, 0x00,
+ 0x00, 0x1c, 0x0e, 0x00, 0x00, 0xf8, 0x07, 0x00, 0x00, 0xe0, 0x01, 0x00,
+ 0x00, 0xe0, 0x01, 0x00, 0x00, 0xe0, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };
+
+
+#define cloud_width 30
+#define cloud_height 30
+static unsigned char cloud_bits[] = {
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, 0xf8, 0x03, 0x00,
+ 0x00, 0x1c, 0x07, 0x00, 0x00, 0x06, 0x0e, 0x00, 0x00, 0x06, 0x0c, 0x00,
+ 0x80, 0x03, 0x7c, 0x00, 0xc0, 0x03, 0xf8, 0x00, 0x60, 0x00, 0x80, 0x01,
+ 0x60, 0x00, 0x80, 0x01, 0x20, 0x00, 0x00, 0x01, 0x20, 0x00, 0x00, 0x01,
+ 0x60, 0x00, 0x80, 0x01, 0xe0, 0x00, 0xc0, 0x01, 0xc0, 0xff, 0xff, 0x00,
+ 0x00, 0xff, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };
+
+#define raindrops_width 30
+#define raindrops_height 30
+static unsigned char raindrops_bits[] = {
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00,
+ 0x00, 0x00, 0x03, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00,
+ 0x00, 0x38, 0x00, 0x00, 0x00, 0x10, 0x01, 0x00, 0x00, 0x80, 0x03, 0x00,
+ 0x00, 0xc0, 0x07, 0x00, 0x00, 0xc0, 0x07, 0x00, 0x00, 0xc0, 0x07, 0x00,
+ 0x00, 0x80, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };
+
diff --git a/include/weather.h b/include/weather.h
new file mode 100644
index 0000000..3dad81d
--- /dev/null
+++ b/include/weather.h
@@ -0,0 +1,7 @@
+#ifndef WEATHER_H
+#define WEATHER_H
+
+void fetch_weather();
+void draw_weather(int16_t x, int16_t y);
+
+#endif
diff --git a/platformio.ini b/platformio.ini
index 12347c3..fefab06 100644
--- a/platformio.ini
+++ b/platformio.ini
@@ -13,4 +13,4 @@ platform = espressif32
board = esp32dev
framework = arduino
upload_speed = 921600
-lib_deps = GxEPD2, Wire, QRCode, U8g2_for_Adafruit_GFX
+lib_deps = GxEPD2, Wire, QRCode, U8g2_for_Adafruit_GFX, ArduinoJson
diff --git a/src/main.cpp b/src/main.cpp
index ee7435a..c987f92 100644
--- a/src/main.cpp
+++ b/src/main.cpp
@@ -4,6 +4,7 @@
#include "calendar.h"
#include "draw_qrcode.h"
+#include "weather.h"
#include "secrets.h"
/*
@@ -48,8 +49,9 @@ void draw() {
do {
display.fillScreen(GxEPD_WHITE);
- draw_calendar(30, 30);
- draw_qrcode_wlan(30, 200, wifi_ssid, wifi_psk);
+ draw_calendar(30, 10);
+ draw_weather(10, 180);
+ //draw_qrcode_wlan(30, 200, wifi_ssid, wifi_psk);
} while(display.nextPage());
}
@@ -76,6 +78,7 @@ void setup() {
wifi_connect();
update_time();
+ fetch_weather();
wifi_disconnect();
display_setup();
diff --git a/src/weather.cpp b/src/weather.cpp
new file mode 100644
index 0000000..e38e44f
--- /dev/null
+++ b/src/weather.cpp
@@ -0,0 +1,226 @@
+#include <GxEPD2_BW.h>
+#include <U8g2_for_Adafruit_GFX.h>
+#include <HTTPClient.h>
+#include <ArduinoJson.h>
+
+#include "weather-icons.h"
+#include "secrets.h"
+
+/* Position for Durlach */
+#define lat 48.999
+#define lon 8.474
+
+#define FONTSIZE 10
+#define SPACING 5
+
+#define DIM(w, h) (((w) << 16) | (h))
+#define GETW(dim) ((dim) >> 16)
+#define GETH(dim) ((dim) & 0xffff)
+
+extern GxEPD2_GFX_BASE_CLASS &get_display();
+extern U8G2_FOR_ADAFRUIT_GFX u8g2Fonts;
+
+static StaticJsonDocument<16000> weather_json;
+static DeserializationError json_state = DeserializationError::IncompleteInput;
+
+void fetch_weather() {
+ /* use HTTP intentionally for simplicity
+ don't use on insecure networks */
+ String url = "http://api.openweathermap.org/data/2.5/onecall?units=metric&lang=de&exclude=minutely,hourly";
+ url += "&appid=" + String(openweathermap_apikey);
+ url += "&lat=" + String(lat);
+ url += "&lon=" + String(lon);
+
+ HTTPClient http;
+ http.begin(url);
+ int status = http.GET();
+
+ String weather_info = "";
+ if (status == HTTP_CODE_OK) {
+ weather_info = http.getString();
+ } else {
+ Serial.println("http error\r\n");
+ }
+ http.end();
+ json_state = deserializeJson(weather_json, weather_info);
+ if (json_state != DeserializationError::Ok) {
+ Serial.println("json deserialization error\r\n");
+ }
+}
+
+static uint32_t draw_icon(int16_t x, int16_t y, const unsigned char *image, uint16_t width, uint16_t height) {
+ get_display().drawXBitmap(x, y, image, width, height, GxEPD_BLACK);
+ return DIM(width, height);
+}
+
+static uint32_t draw_weather_icon(int16_t x, int16_t y, int code) {
+ const unsigned char *image = NULL;
+ uint16_t width = 0, height = 0;
+
+ int icon_group = code / 100;
+ switch (icon_group) {
+ case 2:
+ image = thunderstorm_bits;
+ width = thunderstorm_width;
+ height = thunderstorm_height;
+ break;
+ case 3:
+ case 5:
+ image = rain_bits;
+ width = rain_width;
+ height = rain_height;
+ break;
+ case 6:
+ image = snow_bits;
+ width = snow_width;
+ height = snow_height;
+ break;
+ case 7:
+ image = fog_bits;
+ width = fog_width;
+ height = fog_height;
+ break;
+ case 8:
+ image = cloudy_bits;
+ width = cloudy_width;
+ height = cloudy_height;
+ break;
+ }
+ if (code == 800 || !image) {
+ /* special case, clear sky / no clouds */
+ image = sunny_bits;
+ width = sunny_width;
+ height = sunny_height;
+ }
+
+ return draw_icon(x, y, image, width, height);
+}
+
+static uint32_t draw_temperature(int16_t x, int16_t y, float temp, float temp_max = 0.0) {
+ uint16_t w = thermometer_width, h = thermometer_height;
+ int text_width = 0;
+ draw_icon(x, y, thermometer_bits, w, h);
+ u8g2Fonts.setCursor(x + w + SPACING, y + h/2 + FONTSIZE/2);
+ if (temp_max > 0) {
+ u8g2Fonts.printf("%.1f - %.1f °C", temp, temp_max);
+ text_width = u8g2Fonts.getUTF8Width("88.8 - 88.8 °C");
+ } else {
+ u8g2Fonts.printf("%.1f °C", temp);
+ text_width = u8g2Fonts.getUTF8Width("88.8 °C");
+ }
+
+ return DIM(w + SPACING + text_width, h);
+}
+
+static uint32_t draw_humidity(int16_t x, int16_t y, int humidity) {
+ uint16_t w = humidity_width, h = humidity_height;
+ draw_icon(x, y, humidity_bits, w, h);
+ u8g2Fonts.setCursor(x + w + SPACING, y + h/2 + FONTSIZE/2);
+ u8g2Fonts.printf("%d %%", humidity);
+
+ return DIM(w, h);
+}
+
+static uint32_t draw_rain_prob(int16_t x, int16_t y, uint8_t rain) {
+ uint16_t w = raindrops_width, h = raindrops_width;
+ draw_icon(x, y, raindrops_bits, w, h);
+ u8g2Fonts.setCursor(x + w + SPACING, y + h/2 + FONTSIZE/2);
+ u8g2Fonts.printf("%d %%", rain);
+ int text_width = u8g2Fonts.getUTF8Width("88 %");
+
+ return DIM(w + SPACING + text_width, h);
+}
+
+static uint32_t draw_pressure(int16_t x, int16_t y, int pressure) {
+ uint16_t w = barometer_width, h = barometer_height;
+ draw_icon(x, y, barometer_bits, w, h);
+ u8g2Fonts.setCursor(x + w + SPACING, y + h/2 + FONTSIZE/2);
+ u8g2Fonts.printf("%d hPa", pressure);
+
+ return DIM(w, h);
+}
+
+static uint32_t draw_clouds(int16_t x, int16_t y, int clouds) {
+ uint16_t w = cloud_width, h = cloud_height;
+ draw_icon(x, y, cloud_bits, w, h);
+ u8g2Fonts.setCursor(x + w + SPACING, y + h/2 + FONTSIZE/2);
+ u8g2Fonts.printf("%d %%", clouds);
+ int text_width = u8g2Fonts.getUTF8Width("88 %");
+
+ return DIM(w + SPACING + text_width, h);
+}
+
+static int draw_weather_forecast(int16_t x, int16_t y, const char *title, const JsonObject &json) {
+ auto temp_min = json["temp"]["min"].as<float>();
+ auto temp_max = json["temp"]["max"].as<float>();
+ auto pop = (uint8_t) (100 * json["pop"].as<float>());
+ auto cloudiness = json["clouds"].as<int>();
+ auto description = json["weather"][0]["description"].as<char *>();
+
+ /* line 1 */
+ u8g2Fonts.setFont(u8g2_font_helvB10_tf);
+ u8g2Fonts.setCursor(x, y);
+ u8g2Fonts.print(title);
+ u8g2Fonts.setFont(u8g2_font_helvR10_tf);
+ u8g2Fonts.print(" ");
+ u8g2Fonts.print(description);
+
+ /* line 2 */
+ uint32_t dim = 0;
+ y += SPACING;
+ dim = draw_temperature(x, y, temp_min, temp_max);
+ x += GETW(dim) + SPACING;
+ dim = draw_clouds(x, y, cloudiness);
+ x += GETW(dim) + SPACING;
+ dim = draw_rain_prob(x, y, pop);
+
+ return DIM(0, FONTSIZE + GETH(dim) + 2 * SPACING);
+}
+
+void draw_weather(int16_t x0, int16_t y0) {
+ if (json_state != DeserializationError::Ok)
+ return;
+
+ /* current weather */
+ auto current_temp = weather_json["current"]["temp"].as<float>();
+ auto current_weather_id = weather_json["current"]["weather"][0]["id"].as<int>();
+ auto current_weather_desc = weather_json["current"]["weather"][0]["description"].as<char *>();
+ auto current_clouds = weather_json["current"]["clouds"].as<int>();
+ auto current_humidity = weather_json["current"]["humidity"].as<int>();
+ auto current_pressure = weather_json["current"]["pressure"].as<int>();
+
+ if (!current_weather_desc)
+ current_weather_desc = "N/A";
+
+ u8g2Fonts.setFont(u8g2_font_helvR10_tf);
+
+ uint32_t dim = 0;
+ int16_t x1 = x0, y1 = y0;
+ dim = draw_weather_icon(x0, y0, current_weather_id);
+ x1 += GETW(dim) + SPACING;
+ y1 += GETH(dim) + SPACING;
+
+ /* line 1 */
+ int16_t x = x1, y = y0 + 2 * SPACING;
+ uint32_t temp_dim = draw_temperature(x, y, current_temp);
+ x += GETW(temp_dim) + 2 * SPACING;
+ dim = draw_clouds(x, y, current_clouds);
+ y += GETH(dim);
+
+ /* line 2 */
+ x = x1;
+ dim = draw_humidity(x, y, current_humidity);
+ x += GETW(temp_dim) + 2 * SPACING;
+ dim = draw_pressure(x, y, current_pressure);
+ y += GETH(dim);
+
+ /* forecasts */
+ x = x0;
+ y = y1;
+ dim = draw_weather_forecast(x, y, "Heute:", weather_json["daily"][0]);
+ y += GETH(dim);
+ dim = draw_weather_forecast(x, y, "Morgen:", weather_json["daily"][1]);
+ y += GETH(dim);
+ dim = draw_weather_forecast(x, y, "Übermorgen:", weather_json["daily"][2]);
+ y += GETH(dim);
+}