Jeremy Ngai
Published © CC BY-NC-SA

WeatherPaper

Minimalist E-Paper Weather Display That Lasts Months

BeginnerFull instructions provided115
WeatherPaper

Things used in this project

Hardware components

Espressif ESP32-C3 Supermini Development Board
×1
WeAct 2.9" Black-White E-Paper Display Module
×1
TP4056 Charging Module with booster
×1
102025 3.7v Li-Po Battery
×1
40x60mm Perfboard
×1
Single core wire
×1

Hand tools and fabrication machines

Soldering iron

Story

Read more

Custom parts and enclosures

3D File: Body

Sketchfab still processing.

3D FIle: Lid

Sketchfab still processing.

Schematics

Circuit Diagram

Code

Firmware

C/C++
#define ENABLE_GxEPD2_GFX 0

const unsigned char epd_bitmap_broken_clouds [] 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, 0x3f, 0xc0, 0x00, 0x00, 
	0x00, 0x00, 0x00, 0x01, 0xff, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0xff, 0xfc, 0x00, 0x00, 
	0x00, 0x00, 0x00, 0x0f, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, 0xc0, 0x3f, 0x80, 0x00, 
	0x00, 0x00, 0x00, 0x3f, 0x00, 0x0f, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x7c, 0x00, 0x03, 0xe0, 0x00, 
	0x00, 0x00, 0x00, 0xfc, 0x00, 0x01, 0xe0, 0x00, 0x00, 0x00, 0x0f, 0xff, 0x00, 0x01, 0xf0, 0x00, 
	0x00, 0x00, 0x3f, 0xff, 0xc0, 0x00, 0xff, 0x80, 0x00, 0x00, 0x7f, 0xff, 0xe0, 0x00, 0x7f, 0xe0, 
	0x00, 0x00, 0xfe, 0x07, 0xf0, 0x00, 0x7f, 0xf0, 0x00, 0x01, 0xf8, 0x01, 0xf8, 0x00, 0x3f, 0xf8, 
	0x00, 0x03, 0xe0, 0x00, 0x7c, 0x00, 0x00, 0x7c, 0x00, 0x07, 0xc0, 0x00, 0x3e, 0x00, 0x00, 0x3e, 
	0x00, 0x07, 0x80, 0x00, 0x1f, 0x00, 0x00, 0x1e, 0x00, 0x7f, 0x00, 0x00, 0x0f, 0xe0, 0x00, 0x1e, 
	0x03, 0xff, 0x00, 0x00, 0x0f, 0xfc, 0x00, 0x0f, 0x0f, 0xfe, 0x00, 0x00, 0x07, 0xff, 0x00, 0x0f, 
	0x1f, 0xfe, 0x00, 0x00, 0x07, 0xff, 0x80, 0x0f, 0x3f, 0x80, 0x00, 0x00, 0x00, 0x0f, 0xc0, 0x0f, 
	0x3e, 0x00, 0x00, 0x00, 0x00, 0x07, 0xc0, 0x0f, 0x7c, 0x00, 0x00, 0x00, 0x00, 0x03, 0xe0, 0x0f, 
	0x78, 0x00, 0x00, 0x00, 0x00, 0x01, 0xe0, 0x1e, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf0, 0x3e, 
	0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf0, 0x7c, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf1, 0xfc, 
	0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xf8, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xe0, 
	0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xc0, 0x78, 0x00, 0x00, 0x00, 0x00, 0x01, 0xfc, 0x00, 
	0x78, 0x00, 0x00, 0x00, 0x00, 0x01, 0xe0, 0x00, 0x7c, 0x00, 0x00, 0x00, 0x00, 0x03, 0xe0, 0x00, 
	0x3f, 0x00, 0x00, 0x00, 0x00, 0x0f, 0xc0, 0x00, 0x1f, 0xff, 0xff, 0xff, 0xff, 0xff, 0x80, 0x00, 
	0x0f, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x07, 0xff, 0xff, 0xff, 0xff, 0xfe, 0x00, 0x00, 
	0x00, 0xff, 0xff, 0xff, 0xff, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 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 epd_bitmap_clear_sky [] PROGMEM = {
	0x00, 0x00, 0x00, 0x01, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0xc0, 0x00, 0x00, 0x00, 
	0x00, 0x00, 0x00, 0x03, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0xc0, 0x00, 0x00, 0x00, 
	0x00, 0x00, 0x00, 0x03, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0xc0, 0x00, 0x00, 0x00, 
	0x00, 0x00, 0x00, 0x03, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0xc0, 0x00, 0x00, 0x00, 
	0x00, 0x00, 0x00, 0x03, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x78, 0x00, 0x03, 0xc0, 0x00, 0x1e, 0x00, 
	0x00, 0x7c, 0x00, 0x00, 0x00, 0x00, 0x3e, 0x00, 0x00, 0x7e, 0x00, 0x00, 0x00, 0x00, 0x7e, 0x00, 
	0x00, 0x7f, 0x00, 0x00, 0x00, 0x00, 0xfe, 0x00, 0x00, 0x3f, 0x80, 0x00, 0x00, 0x01, 0xfc, 0x00, 
	0x00, 0x1f, 0x80, 0x00, 0x00, 0x01, 0xf8, 0x00, 0x00, 0x0f, 0x80, 0x0f, 0xf0, 0x01, 0xf0, 0x00, 
	0x00, 0x07, 0x80, 0x7f, 0xfe, 0x01, 0xe0, 0x00, 0x00, 0x00, 0x01, 0xff, 0xff, 0x80, 0x00, 0x00, 
	0x00, 0x00, 0x03, 0xff, 0xff, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x07, 0xfe, 0x7f, 0xe0, 0x00, 0x00, 
	0x00, 0x00, 0x0f, 0xe0, 0x07, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x1f, 0x80, 0x01, 0xf8, 0x00, 0x00, 
	0x00, 0x00, 0x3f, 0x00, 0x00, 0xfc, 0x00, 0x00, 0x00, 0x00, 0x7e, 0x00, 0x00, 0x7e, 0x00, 0x00, 
	0x00, 0x00, 0x7c, 0x00, 0x00, 0x3e, 0x00, 0x00, 0x00, 0x00, 0xf8, 0x00, 0x00, 0x1f, 0x00, 0x00, 
	0x00, 0x00, 0xf8, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x00, 0x00, 0xf0, 0x00, 0x00, 0x0f, 0x00, 0x00, 
	0x00, 0x01, 0xf0, 0x00, 0x00, 0x0f, 0x80, 0x00, 0x00, 0x01, 0xf0, 0x00, 0x00, 0x0f, 0x80, 0x00, 
	0x7f, 0xc1, 0xf0, 0x00, 0x00, 0x0f, 0x83, 0xfe, 0xff, 0xc1, 0xe0, 0x00, 0x00, 0x07, 0x83, 0xff, 
	0xff, 0xc1, 0xe0, 0x00, 0x00, 0x07, 0x83, 0xff, 0x7f, 0xc1, 0xf0, 0x00, 0x00, 0x0f, 0x83, 0xfe, 
	0x00, 0x01, 0xf0, 0x00, 0x00, 0x0f, 0x80, 0x00, 0x00, 0x01, 0xf0, 0x00, 0x00, 0x0f, 0x80, 0x00, 
	0x00, 0x00, 0xf0, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x00, 0xf8, 0x00, 0x00, 0x1f, 0x00, 0x00, 
	0x00, 0x00, 0xf8, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x7c, 0x00, 0x00, 0x3e, 0x00, 0x00, 
	0x00, 0x00, 0x7e, 0x00, 0x00, 0x7e, 0x00, 0x00, 0x00, 0x00, 0x3f, 0x00, 0x00, 0xfc, 0x00, 0x00, 
	0x00, 0x00, 0x1f, 0x80, 0x01, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x0f, 0xe0, 0x07, 0xf0, 0x00, 0x00, 
	0x00, 0x00, 0x07, 0xfe, 0x7f, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x03, 0xff, 0xff, 0xc0, 0x00, 0x00, 
	0x00, 0x00, 0x01, 0xff, 0xff, 0x80, 0x00, 0x00, 0x00, 0x07, 0x80, 0x7f, 0xfe, 0x01, 0xe0, 0x00, 
	0x00, 0x0f, 0x80, 0x0f, 0xf0, 0x01, 0xf0, 0x00, 0x00, 0x1f, 0x80, 0x00, 0x00, 0x01, 0xf8, 0x00, 
	0x00, 0x3f, 0x80, 0x00, 0x00, 0x01, 0xfc, 0x00, 0x00, 0x7f, 0x00, 0x00, 0x00, 0x00, 0xfe, 0x00, 
	0x00, 0x7e, 0x00, 0x00, 0x00, 0x00, 0x7e, 0x00, 0x00, 0x7c, 0x00, 0x00, 0x00, 0x00, 0x3e, 0x00, 
	0x00, 0x78, 0x00, 0x03, 0xc0, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x00, 0x03, 0xc0, 0x00, 0x00, 0x00, 
	0x00, 0x00, 0x00, 0x03, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0xc0, 0x00, 0x00, 0x00, 
	0x00, 0x00, 0x00, 0x03, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0xc0, 0x00, 0x00, 0x00, 
	0x00, 0x00, 0x00, 0x03, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0xc0, 0x00, 0x00, 0x00, 
	0x00, 0x00, 0x00, 0x03, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x80, 0x00, 0x00, 0x00
};
const unsigned char epd_bitmap_few_clouds [] 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, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x80, 0x00, 0x00, 0x00, 0x00, 
	0x00, 0x00, 0x07, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x80, 0x00, 0x00, 0x00, 0x00, 
	0x00, 0x00, 0x07, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x80, 0x00, 0x00, 0x00, 0x00, 
	0x00, 0x00, 0x07, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 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, 0x1f, 0xf0, 0x00, 0x00, 0x00, 0x00, 0xf0, 0x00, 0xff, 0xfc, 0x00, 0x3c, 0x00, 0x00, 
	0xfc, 0x03, 0xff, 0xff, 0x00, 0x7c, 0x00, 0x00, 0xfe, 0x07, 0xff, 0xff, 0x81, 0xfc, 0x00, 0x00, 
	0x3e, 0x0f, 0xe0, 0x0f, 0xc1, 0xf8, 0x00, 0x00, 0x1e, 0x1f, 0x80, 0x07, 0xe0, 0xe0, 0x00, 0x00, 
	0x00, 0x1f, 0x00, 0x01, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x3e, 0x00, 0x00, 0xf0, 0x00, 0x00, 0x00, 
	0x00, 0x7c, 0x00, 0x00, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x78, 0x00, 0x00, 0xff, 0xc0, 0x00, 0x00, 
	0x00, 0x78, 0x00, 0x03, 0xff, 0xf0, 0x00, 0x00, 0x00, 0xf0, 0x00, 0x0f, 0xff, 0xf8, 0x00, 0x00, 
	0x00, 0xf0, 0x00, 0x1f, 0xf3, 0xfc, 0x00, 0x00, 0x00, 0xf0, 0x00, 0x3f, 0x00, 0x7e, 0x00, 0x00, 
	0x00, 0xf0, 0x00, 0x7e, 0x00, 0x1f, 0x00, 0x00, 0x00, 0xf0, 0x00, 0x78, 0x00, 0x0f, 0x80, 0x00, 
	0x00, 0xf0, 0x00, 0xf8, 0x00, 0x07, 0x80, 0x00, 0x00, 0xf0, 0x00, 0xf0, 0x00, 0x03, 0xf8, 0x00, 
	0x00, 0x78, 0x01, 0xe0, 0x00, 0x03, 0xff, 0x00, 0x00, 0x78, 0x01, 0xe0, 0x00, 0x01, 0xff, 0xc0, 
	0x00, 0x78, 0x01, 0xe0, 0x00, 0x01, 0xff, 0xe0, 0x00, 0x3c, 0x01, 0xe0, 0x00, 0x00, 0x07, 0xf0, 
	0x00, 0x3e, 0x03, 0xe0, 0x00, 0x00, 0x00, 0xf8, 0x0c, 0x1f, 0x1f, 0xe0, 0x00, 0x00, 0x00, 0x7c, 
	0x3e, 0x0f, 0xff, 0xe0, 0x00, 0x00, 0x00, 0x3c, 0x7e, 0x07, 0xff, 0xc0, 0x00, 0x00, 0x00, 0x1e, 
	0xfc, 0x03, 0xfc, 0x00, 0x00, 0x00, 0x00, 0x1e, 0xf8, 0x01, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x0f, 
	0x60, 0x03, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x03, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x0f, 
	0x00, 0x03, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x07, 0x80, 0x00, 0x00, 0x00, 0x00, 0x0f, 
	0x00, 0x07, 0x80, 0x00, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x07, 0x80, 0x00, 0x00, 0x00, 0x00, 0x0f, 
	0x00, 0x07, 0x80, 0x00, 0x00, 0x00, 0x00, 0x1e, 0x00, 0x03, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x1e, 
	0x00, 0x03, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x03, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x7c, 
	0x00, 0x01, 0xf0, 0x00, 0x00, 0x00, 0x00, 0xf8, 0x00, 0x00, 0xfc, 0x00, 0x00, 0x00, 0x07, 0xf0, 
	0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xe0, 0x00, 0x00, 0x3f, 0xff, 0xff, 0xff, 0xff, 0xc0, 
	0x00, 0x00, 0x1f, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x03, 0xff, 0xff, 0xff, 0xf0, 0x00, 
	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 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 epd_bitmap_mist [] 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, 
	0x7f, 0xff, 0xff, 0xff, 0xff, 0xc0, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0, 0x00, 0x00, 
	0xff, 0xff, 0xff, 0xff, 0xff, 0xc0, 0x00, 0x00, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xc0, 0x00, 0x00, 
	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
	0x00, 0x00, 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, 0xfe, 
	0x00, 0x01, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x01, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
	0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
	0x07, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf8, 0x00, 0x07, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf8, 0x00, 
	0x07, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf8, 0x00, 0x07, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf8, 0x00, 
	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf0, 
	0x00, 0x0f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf8, 0x00, 0x0f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf8, 
	0x00, 0x07, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 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, 0xff, 0xff, 0xff, 0xfc, 0x00, 0x00, 0x00, 0x07, 0xff, 0xff, 0xff, 0xfe, 0x00, 0x00, 0x00, 
	0x07, 0xff, 0xff, 0xff, 0xfe, 0x00, 0x00, 0x00, 0x03, 0xff, 0xff, 0xff, 0xfe, 0x00, 0x00, 0x00, 
	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 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 epd_bitmap_rain [] PROGMEM = {
	0x00, 0x00, 0x00, 0x00, 0x03, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x80, 0x00, 0x00, 
	0x00, 0x00, 0x00, 0x00, 0x03, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x80, 0x00, 0x00, 
	0x00, 0x00, 0x00, 0x00, 0x03, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x80, 0x00, 0x00, 
	0x00, 0x00, 0x00, 0x00, 0x03, 0x80, 0x00, 0x00, 0x00, 0x00, 0x03, 0x80, 0x01, 0x00, 0x03, 0x80, 
	0x00, 0x00, 0x03, 0xc0, 0x00, 0x00, 0x07, 0x80, 0x00, 0x00, 0x03, 0xe0, 0x00, 0x00, 0x0f, 0x80, 
	0x00, 0x00, 0x01, 0xf0, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x00, 0x00, 0xf0, 0x03, 0x80, 0x1e, 0x00, 
	0x00, 0x00, 0x00, 0x70, 0x3f, 0xf8, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xfe, 0x00, 0x00, 
	0x00, 0x00, 0x00, 0x01, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0xf8, 0x3f, 0x80, 0x00, 
	0x00, 0x00, 0x00, 0x07, 0xe0, 0x0f, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x0f, 0x80, 0x03, 0xe0, 0x00, 
	0x00, 0x00, 0x00, 0x0f, 0x00, 0x01, 0xe0, 0x00, 0x00, 0x00, 0x01, 0xff, 0x00, 0x01, 0xf0, 0x00, 
	0x00, 0x00, 0x07, 0xff, 0x00, 0x00, 0xf0, 0x00, 0x00, 0x00, 0x1f, 0xff, 0xc0, 0x00, 0xf0, 0x00, 
	0x00, 0x00, 0x3f, 0xff, 0xe0, 0x00, 0x70, 0x00, 0x00, 0x07, 0xfe, 0x03, 0xe0, 0x00, 0x78, 0x7f, 
	0x00, 0x1f, 0xf8, 0x01, 0xf0, 0x00, 0x78, 0xff, 0x00, 0x3f, 0xf8, 0x00, 0xf8, 0x00, 0x78, 0x7f, 
	0x00, 0x7f, 0x20, 0x00, 0x78, 0x00, 0x70, 0x00, 0x00, 0x7c, 0x00, 0x00, 0x78, 0x00, 0xf0, 0x00, 
	0x00, 0xf8, 0x00, 0x00, 0x38, 0x00, 0xf0, 0x00, 0x00, 0xf0, 0x00, 0x00, 0x3c, 0x01, 0xf0, 0x00, 
	0x01, 0xf0, 0x00, 0x00, 0x3c, 0x01, 0xe0, 0x00, 0x07, 0xe0, 0x00, 0x00, 0x3f, 0x83, 0xe0, 0x00, 
	0x1f, 0xe0, 0x00, 0x00, 0x3f, 0xcf, 0xc0, 0x00, 0x3f, 0xe0, 0x00, 0x00, 0x1f, 0xff, 0x80, 0x00, 
	0x7e, 0x00, 0x00, 0x00, 0x03, 0xff, 0x00, 0x00, 0x7c, 0x00, 0x00, 0x00, 0x00, 0xfe, 0x00, 0x00, 
	0x78, 0x00, 0x00, 0x00, 0x00, 0xf8, 0x1c, 0x00, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x78, 0x1e, 0x00, 
	0xf0, 0x00, 0x00, 0x00, 0x00, 0x78, 0x1f, 0x00, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x78, 0x0f, 0x80, 
	0xf0, 0x00, 0x00, 0x00, 0x00, 0x78, 0x07, 0x80, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x78, 0x03, 0x80, 
	0x78, 0x00, 0x00, 0x00, 0x00, 0xf8, 0x00, 0x00, 0x7c, 0x00, 0x00, 0x00, 0x00, 0xf0, 0x00, 0x00, 
	0x3e, 0x00, 0x00, 0x00, 0x03, 0xf0, 0x00, 0x00, 0x3f, 0xff, 0xff, 0xff, 0xff, 0xe0, 0x00, 0x00, 
	0x1f, 0xff, 0xff, 0xff, 0xff, 0xc0, 0x00, 0x00, 0x07, 0xff, 0xff, 0xff, 0xff, 0x80, 0x00, 0x00, 
	0x03, 0xff, 0xff, 0xff, 0xfc, 0x00, 0x00, 0x00, 0x03, 0xc3, 0xc7, 0x87, 0x80, 0x00, 0x00, 0x00, 
	0x03, 0xc7, 0x87, 0x8f, 0x00, 0x00, 0x00, 0x00, 0x03, 0x87, 0x87, 0x0f, 0x00, 0x00, 0x00, 0x00, 
	0x01, 0x01, 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
	0x10, 0x10, 0x20, 0x20, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x38, 0x78, 0x70, 0x00, 0x00, 0x00, 0x00, 
	0x3c, 0x78, 0x78, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x78, 0x78, 0xf0, 0xf0, 0x00, 0x00, 0x00, 0x00, 
	0x78, 0xf0, 0xf1, 0xe0, 0x00, 0x00, 0x00, 0x00, 0xf0, 0xf1, 0xe1, 0xe0, 0x00, 0x00, 0x00, 0x00, 
	0xf0, 0xe1, 0xe1, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x60, 0xe0, 0xc1, 0xc0, 0x00, 0x00, 0x00, 0x00
};
const unsigned char epd_bitmap_scattered_clouds [] 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, 0x03, 0xff, 0xc0, 0x00, 0x00, 
	0x00, 0x00, 0x00, 0x0f, 0xff, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3f, 0xff, 0xfc, 0x00, 0x00, 
	0x00, 0x00, 0x00, 0x7f, 0xc1, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfc, 0x00, 0x3f, 0x00, 0x00, 
	0x00, 0x00, 0x01, 0xf0, 0x00, 0x1f, 0x80, 0x00, 0x00, 0x00, 0x03, 0xe0, 0x00, 0x07, 0xc0, 0x00, 
	0x00, 0x00, 0x07, 0xc0, 0x00, 0x03, 0xe0, 0x00, 0x00, 0x00, 0x0f, 0x80, 0x00, 0x01, 0xe0, 0x00, 
	0x00, 0x00, 0x0f, 0x00, 0x00, 0x01, 0xf0, 0x00, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, 0xf0, 0x00, 
	0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x70, 0x00, 0x00, 0x1f, 0xfe, 0x00, 0x00, 0x00, 0x78, 0x00, 
	0x00, 0xff, 0xfc, 0x00, 0x00, 0x00, 0x78, 0x00, 0x01, 0xff, 0xfc, 0x00, 0x00, 0x00, 0x38, 0x00, 
	0x07, 0xff, 0xf8, 0x00, 0x00, 0x00, 0x38, 0x00, 0x0f, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 
	0x1f, 0x80, 0x00, 0x00, 0x00, 0x00, 0x3f, 0x80, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3f, 0xc0, 
	0x3e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, 0xe0, 0x3c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0xf8, 
	0x78, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf8, 0x78, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7c, 
	0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1e, 
	0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1e, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0e, 
	0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 
	0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 
	0x78, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0x78, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 
	0x7c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1e, 0x3e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1e, 
	0x3e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x1f, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7c, 
	0x0f, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x01, 0xf8, 0x07, 0xfc, 0x00, 0x00, 0x00, 0x00, 0x0f, 0xf0, 
	0x03, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xe0, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x80, 
	0x00, 0x3f, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x01, 0xff, 0xff, 0xff, 0xff, 0xe0, 0x00, 
	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 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 epd_bitmap_shower_rain [] PROGMEM = {
	0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0xff, 0xe0, 0x00, 0x00, 0x00, 
	0x00, 0x00, 0x1f, 0xff, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3f, 0xff, 0xfe, 0x00, 0x00, 0x00, 
	0x00, 0x00, 0xff, 0x00, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x01, 0xf8, 0x00, 0x1f, 0x80, 0x00, 0x00, 
	0x00, 0x03, 0xf0, 0x00, 0x07, 0xc0, 0x00, 0x00, 0x00, 0x03, 0xe0, 0x00, 0x03, 0xe0, 0x00, 0x00, 
	0x00, 0x07, 0xc0, 0x00, 0x01, 0xf0, 0x00, 0x00, 0x00, 0x0f, 0x80, 0x00, 0x00, 0xf0, 0x00, 0x00, 
	0x00, 0x0f, 0x00, 0x00, 0x00, 0xf8, 0x00, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x7f, 0xf0, 0x00, 
	0x00, 0x7e, 0x00, 0x00, 0x00, 0x7f, 0xfe, 0x00, 0x01, 0xfe, 0x00, 0x00, 0x00, 0xff, 0xff, 0x80, 
	0x03, 0xfc, 0x00, 0x00, 0x01, 0xff, 0xff, 0xc0, 0x07, 0xf0, 0x00, 0x00, 0x03, 0xf8, 0x0f, 0xe0, 
	0x0f, 0x80, 0x00, 0x00, 0x03, 0xe0, 0x03, 0xf0, 0x1f, 0x00, 0x00, 0x00, 0x01, 0x80, 0x00, 0xf8, 
	0x3e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7c, 0x3c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 
	0x78, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3e, 0x78, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1e, 
	0x78, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1e, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 
	0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 
	0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 
	0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 
	0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0e, 0x78, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1e, 
	0x78, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1e, 0x3c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 
	0x3e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7c, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf8, 
	0x0f, 0x80, 0x00, 0x00, 0x00, 0x00, 0x01, 0xf0, 0x0f, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x07, 0xf0, 
	0x03, 0xff, 0x00, 0x00, 0x00, 0x00, 0xff, 0xc0, 0x01, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x80, 
	0x00, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xfe, 0x00, 0x00, 0x1f, 0xff, 0xff, 0xff, 0xff, 0xf8, 0x00, 
	0x00, 0x00, 0x03, 0xe0, 0x00, 0x3e, 0x00, 0x00, 0x00, 0x00, 0x03, 0xc0, 0x00, 0x3c, 0x00, 0x00, 
	0x00, 0x00, 0x07, 0xc0, 0x00, 0x3c, 0x00, 0x00, 0x00, 0x00, 0x07, 0x80, 0x00, 0x78, 0x00, 0x00, 
	0x00, 0x1c, 0x0f, 0x81, 0x80, 0xf8, 0x38, 0x00, 0x00, 0x3c, 0x0f, 0x03, 0x80, 0xf0, 0x3c, 0x00, 
	0x00, 0x3c, 0x1f, 0x07, 0x81, 0xf0, 0x7c, 0x00, 0x00, 0x7c, 0x1e, 0x07, 0x81, 0xe0, 0x78, 0x00, 
	0x00, 0x78, 0x1c, 0x0f, 0x01, 0xc0, 0xf0, 0x00, 0x00, 0xf0, 0x00, 0x1f, 0x00, 0x01, 0xf0, 0x00, 
	0x00, 0xf0, 0x00, 0x1e, 0x00, 0x01, 0xe0, 0x00, 0x01, 0xe0, 0x00, 0x3e, 0x00, 0x03, 0xe0, 0x00, 
	0x03, 0xe0, 0x80, 0x3c, 0x0c, 0x03, 0xc0, 0x00, 0x03, 0xc1, 0xe0, 0x78, 0x1e, 0x07, 0xc0, 0x00, 
	0x07, 0xc1, 0xe0, 0x78, 0x1e, 0x07, 0x80, 0x00, 0x07, 0x83, 0xc0, 0xf0, 0x3c, 0x0f, 0x00, 0x00, 
	0x07, 0x07, 0xc0, 0xf0, 0x7c, 0x0f, 0x00, 0x00, 0x02, 0x07, 0x80, 0x60, 0x78, 0x06, 0x00, 0x00, 
	0x00, 0x0f, 0x80, 0x00, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0xf0, 0x00, 0x00, 0x00, 
	0x00, 0x0e, 0x00, 0x00, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x00, 0xe0, 0x00, 0x00, 0x00
};
const unsigned char epd_bitmap_snow [] PROGMEM = {
	0x00, 0x00, 0x00, 0x01, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0xc0, 0x00, 0x00, 0x00, 
	0x00, 0x00, 0x02, 0x03, 0xc0, 0x40, 0x00, 0x00, 0x00, 0x00, 0x07, 0x83, 0xc1, 0xe0, 0x00, 0x00, 
	0x00, 0x00, 0x07, 0xe3, 0xc7, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x07, 0xf3, 0xcf, 0xe0, 0x00, 0x00, 
	0x00, 0x00, 0x01, 0xff, 0xff, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00, 0x00, 
	0x00, 0x0c, 0x00, 0x3f, 0xfc, 0x00, 0x30, 0x00, 0x00, 0x1e, 0x00, 0x0f, 0xf0, 0x00, 0x78, 0x00, 
	0x00, 0x1e, 0x00, 0x07, 0xe0, 0x00, 0x78, 0x00, 0x00, 0x1e, 0x00, 0x03, 0xc0, 0x00, 0x78, 0x00, 
	0x00, 0x1e, 0x00, 0x03, 0xc0, 0x00, 0x78, 0x00, 0x00, 0x1e, 0x00, 0x03, 0xc0, 0x00, 0x78, 0x00, 
	0x00, 0x1e, 0x07, 0x83, 0xc1, 0xe0, 0x78, 0x00, 0x07, 0x1e, 0x07, 0xe3, 0xc3, 0xe0, 0x78, 0xf0, 
	0x0f, 0xde, 0x07, 0xf3, 0xcf, 0xe0, 0x7b, 0xf0, 0x07, 0xfe, 0x07, 0xff, 0xff, 0xe0, 0x7f, 0xf0, 
	0x03, 0xfe, 0x07, 0xff, 0xff, 0xe0, 0x7f, 0xe0, 0x01, 0xfe, 0x07, 0x3f, 0xfc, 0xe0, 0x7f, 0x80, 
	0x00, 0x7f, 0x87, 0x0f, 0xf0, 0xe1, 0xfe, 0x00, 0x00, 0xff, 0xc7, 0x07, 0xe0, 0xe3, 0xff, 0x00, 
	0x03, 0xff, 0xff, 0x03, 0xc0, 0xff, 0xff, 0xc0, 0x07, 0xf3, 0xff, 0x03, 0xc0, 0xff, 0xcf, 0xf0, 
	0x1f, 0xc0, 0xff, 0x03, 0xc0, 0xff, 0x03, 0xf8, 0x3f, 0x80, 0x3f, 0x83, 0xc1, 0xfc, 0x01, 0xfc, 
	0x3e, 0x00, 0x3f, 0xe3, 0xc7, 0xfc, 0x00, 0x7c, 0x38, 0x00, 0x7f, 0xfb, 0xdf, 0xfe, 0x00, 0x1c, 
	0x00, 0x01, 0xff, 0xff, 0xff, 0xff, 0x80, 0x00, 0x00, 0x07, 0xf8, 0x7f, 0xff, 0x1f, 0xe0, 0x00, 
	0x00, 0x0f, 0xe0, 0x3f, 0xfc, 0x07, 0xf0, 0x00, 0x00, 0x1f, 0x80, 0x0f, 0xf0, 0x01, 0xf8, 0x00, 
	0x00, 0x1f, 0xc0, 0x1f, 0xf8, 0x03, 0xf8, 0x00, 0x00, 0x0f, 0xf0, 0x7f, 0xfe, 0x0f, 0xf0, 0x00, 
	0x00, 0x03, 0xf9, 0xff, 0xff, 0x9f, 0xc0, 0x00, 0x18, 0x00, 0xff, 0xfb, 0xdf, 0xff, 0x00, 0x18, 
	0x3c, 0x00, 0x7f, 0xe3, 0xc7, 0xfe, 0x00, 0x3c, 0x3f, 0x00, 0x3f, 0xc3, 0xc3, 0xfc, 0x00, 0xfc, 
	0x1f, 0xc0, 0xff, 0x03, 0xc0, 0xff, 0x03, 0xfc, 0x0f, 0xf1, 0xff, 0x03, 0xc0, 0xff, 0xcf, 0xf0, 
	0x03, 0xff, 0xff, 0x03, 0xc0, 0xff, 0xff, 0xc0, 0x00, 0xff, 0xe7, 0x03, 0xc0, 0xe7, 0xff, 0x00, 
	0x00, 0x7f, 0x87, 0x07, 0xe0, 0xe1, 0xfe, 0x00, 0x00, 0xfe, 0x07, 0x1f, 0xf8, 0xe0, 0x7f, 0x00, 
	0x03, 0xfe, 0x07, 0xff, 0xff, 0xe0, 0x7f, 0xc0, 0x07, 0xfe, 0x07, 0xff, 0xff, 0xe0, 0x7f, 0xf0, 
	0x0f, 0xde, 0x07, 0xfb, 0xdf, 0xe0, 0x7b, 0xf0, 0x07, 0x1e, 0x07, 0xf3, 0xcf, 0xe0, 0x78, 0xf0, 
	0x00, 0x1e, 0x07, 0xc3, 0xc3, 0xe0, 0x78, 0x20, 0x00, 0x1e, 0x07, 0x03, 0xc0, 0xe0, 0x78, 0x00, 
	0x00, 0x1e, 0x00, 0x03, 0xc0, 0x00, 0x78, 0x00, 0x00, 0x1e, 0x00, 0x03, 0xc0, 0x00, 0x78, 0x00, 
	0x00, 0x1e, 0x00, 0x03, 0xc0, 0x00, 0x78, 0x00, 0x00, 0x1e, 0x00, 0x0f, 0xf0, 0x00, 0x78, 0x00, 
	0x00, 0x0e, 0x00, 0x3f, 0xfc, 0x00, 0x70, 0x00, 0x00, 0x00, 0x00, 0x7f, 0xfe, 0x00, 0x00, 0x00, 
	0x00, 0x00, 0x01, 0xff, 0xff, 0x80, 0x00, 0x00, 0x00, 0x00, 0x07, 0xfb, 0xdf, 0xe0, 0x00, 0x00, 
	0x00, 0x00, 0x07, 0xe3, 0xc7, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x07, 0x83, 0xc1, 0xe0, 0x00, 0x00, 
	0x00, 0x00, 0x03, 0x03, 0xc0, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0xc0, 0x00, 0x00, 0x00, 
	0x00, 0x00, 0x00, 0x03, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x80, 0x00, 0x00, 0x00
};
const unsigned char epd_bitmap_thunderstorm [] PROGMEM = {
	0x00, 0x00, 0x00, 0x07, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3f, 0xfc, 0x00, 0x00, 0x00, 
	0x00, 0x00, 0x00, 0x7f, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xff, 0xff, 0x00, 0x00, 0x00, 
	0x00, 0x07, 0xf9, 0xf8, 0x1f, 0x80, 0x00, 0x00, 0x00, 0x1f, 0xff, 0xe0, 0x07, 0xc0, 0x00, 0x00, 
	0x00, 0x3f, 0xff, 0xc0, 0x03, 0xc0, 0x00, 0x00, 0x00, 0x7f, 0xff, 0x80, 0x01, 0xe0, 0x00, 0x00, 
	0x00, 0xf8, 0x0f, 0x00, 0x01, 0xff, 0x80, 0x00, 0x01, 0xf0, 0x03, 0x00, 0x03, 0xff, 0xe0, 0x00, 
	0x01, 0xe0, 0x00, 0x00, 0x07, 0xff, 0xf0, 0x00, 0x01, 0xe0, 0x00, 0x1f, 0x0f, 0xe1, 0xf8, 0x00, 
	0x03, 0xc0, 0x00, 0x7f, 0xff, 0x00, 0x7c, 0x00, 0x03, 0xc0, 0x01, 0xff, 0xfe, 0x00, 0x3e, 0x00, 
	0x03, 0xc0, 0x03, 0xff, 0xfc, 0x00, 0x1e, 0x00, 0x03, 0xc0, 0x07, 0xe0, 0xfc, 0x00, 0x0f, 0x00, 
	0x0f, 0xc0, 0x0f, 0x80, 0x78, 0x00, 0x0f, 0x00, 0x1f, 0xc0, 0x0f, 0x00, 0x78, 0x00, 0x0f, 0x00, 
	0x3f, 0x80, 0x0f, 0x00, 0x78, 0x00, 0x07, 0x00, 0x7e, 0x00, 0x1e, 0x00, 0x78, 0x00, 0x07, 0x00, 
	0x78, 0x00, 0x1e, 0x00, 0x78, 0x00, 0x07, 0x80, 0xf8, 0x00, 0x1e, 0x00, 0x78, 0x00, 0x0f, 0xe0, 
	0xf0, 0x00, 0x1e, 0x00, 0x78, 0x00, 0x0f, 0xf0, 0xf0, 0x00, 0x3e, 0x00, 0x30, 0x00, 0x0f, 0xf8, 
	0xf0, 0x00, 0xfe, 0x00, 0x00, 0x00, 0x1e, 0xfc, 0xf0, 0x01, 0xff, 0x00, 0x00, 0x00, 0x3e, 0x3e, 
	0xf0, 0x03, 0xff, 0x80, 0x00, 0x00, 0x3c, 0x1e, 0x78, 0x03, 0xe7, 0x80, 0x00, 0x00, 0x38, 0x1f, 
	0x7c, 0x07, 0xc7, 0x80, 0x00, 0x00, 0x00, 0x0f, 0x3e, 0x07, 0x83, 0x80, 0x00, 0x00, 0x00, 0x0f, 
	0x3f, 0xff, 0x80, 0x00, 0x00, 0x00, 0x00, 0x0f, 0x1f, 0xff, 0x80, 0x00, 0x00, 0x00, 0x00, 0x0f, 
	0x07, 0xff, 0x80, 0x00, 0x00, 0x00, 0x00, 0x0f, 0x01, 0xff, 0x80, 0x00, 0x00, 0x00, 0x00, 0x0f, 
	0x00, 0x07, 0x80, 0x00, 0x00, 0x00, 0x00, 0x1e, 0x00, 0x03, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x3e, 
	0x00, 0x03, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x7c, 0x00, 0x01, 0xfc, 0x00, 0x00, 0x00, 0x07, 0xf8, 
	0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf0, 0x00, 0x00, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xe0, 
	0x00, 0x00, 0x7f, 0xff, 0xff, 0xff, 0xff, 0x80, 0x00, 0x00, 0x78, 0x7c, 0x00, 0x3c, 0x3e, 0x00, 
	0x00, 0x00, 0x78, 0x78, 0x00, 0x3c, 0x3c, 0x00, 0x00, 0x00, 0xf0, 0x78, 0x00, 0x78, 0x3c, 0x00, 
	0x00, 0x00, 0xf0, 0x70, 0x00, 0x78, 0x38, 0x00, 0x00, 0x00, 0xf0, 0xf0, 0x00, 0x78, 0x78, 0x00, 
	0x00, 0x01, 0xe0, 0xff, 0x80, 0xf0, 0x7f, 0xc0, 0x00, 0x01, 0xe0, 0xff, 0xc0, 0xf0, 0x7f, 0xe0, 
	0x00, 0x01, 0xe1, 0xff, 0xc0, 0xf0, 0xff, 0xe0, 0x00, 0x01, 0xc0, 0xff, 0x80, 0xe0, 0x7f, 0xc0, 
	0x00, 0x03, 0xfc, 0x1f, 0x01, 0xfe, 0x0f, 0x80, 0x00, 0x03, 0xfe, 0x3f, 0x01, 0xff, 0x1f, 0x80, 
	0x00, 0x03, 0xfe, 0x3e, 0x01, 0xff, 0x1f, 0x00, 0x00, 0x01, 0xfe, 0x7c, 0x00, 0xff, 0x3e, 0x00, 
	0x00, 0x00, 0x1e, 0xf8, 0x00, 0x0f, 0x7c, 0x00, 0x00, 0x00, 0x1f, 0xf0, 0x00, 0x0f, 0xf8, 0x00, 
	0x00, 0x00, 0x1f, 0xe0, 0x00, 0x0f, 0xf0, 0x00, 0x00, 0x00, 0x3f, 0xc0, 0x00, 0x1f, 0xe0, 0x00, 
	0x00, 0x00, 0x3f, 0x80, 0x00, 0x1f, 0xc0, 0x00, 0x00, 0x00, 0x3f, 0x00, 0x00, 0x1f, 0x80, 0x00, 
	0x00, 0x00, 0x3e, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x3e, 0x00, 0x00, 0x1f, 0x00, 0x00, 
	0x00, 0x00, 0x3c, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x1c, 0x00, 0x00
};
const unsigned char epd_bitmap_humidity [] PROGMEM = {
	0x00, 0x01, 0x80, 0x00, 0x00, 0x03, 0xc0, 0x00, 0x00, 0x07, 0xe0, 0x00, 0x00, 0x0c, 0x30, 0x00, 
	0x00, 0x18, 0x18, 0x00, 0x00, 0x30, 0x0c, 0x00, 0x00, 0x60, 0x06, 0x00, 0x00, 0xc0, 0x03, 0x00, 
	0x01, 0xc0, 0x03, 0x80, 0x01, 0x80, 0x01, 0x80, 0x03, 0x00, 0x00, 0xc0, 0x06, 0x00, 0x00, 0x60, 
	0x06, 0x18, 0x00, 0x60, 0x0c, 0x3c, 0x00, 0x30, 0x0c, 0x66, 0x20, 0x30, 0x0c, 0x66, 0x60, 0x30, 
	0x18, 0x3c, 0xe0, 0x18, 0x18, 0x1c, 0xc0, 0x18, 0x18, 0x01, 0x80, 0x18, 0x18, 0x01, 0x80, 0x18, 
	0x18, 0x03, 0x18, 0x18, 0x18, 0x03, 0x3c, 0x18, 0x0c, 0x06, 0x66, 0x30, 0x0c, 0x06, 0x66, 0x30, 
	0x0c, 0x00, 0x3c, 0x30, 0x06, 0x00, 0x18, 0x60, 0x07, 0x00, 0x00, 0xe0, 0x03, 0x80, 0x01, 0xc0, 
	0x01, 0xc0, 0x03, 0x80, 0x00, 0xf0, 0x0f, 0x00, 0x00, 0x3f, 0xfc, 0x00, 0x00, 0x0f, 0xf0, 0x00
};
const unsigned char epd_bitmap_temperature [] PROGMEM = {
	0x00, 0x0f, 0x00, 0x00, 0x00, 0x1f, 0xc0, 0x00, 0x00, 0x30, 0xc0, 0x00, 0x00, 0x30, 0x60, 0x00, 
	0x00, 0x60, 0x67, 0x80, 0x00, 0x60, 0x67, 0x80, 0x00, 0x60, 0x60, 0x00, 0x00, 0x60, 0x63, 0x00, 
	0x00, 0x66, 0x67, 0x80, 0x00, 0x66, 0x60, 0x00, 0x00, 0x66, 0x60, 0x00, 0x00, 0x66, 0x67, 0x80, 
	0x00, 0x66, 0x67, 0x80, 0x00, 0x66, 0x60, 0x00, 0x00, 0x66, 0x60, 0x00, 0x00, 0x66, 0x67, 0x80, 
	0x00, 0x66, 0x67, 0x80, 0x00, 0x66, 0x60, 0x00, 0x00, 0x66, 0x60, 0x00, 0x00, 0xe6, 0x70, 0x00, 
	0x00, 0xc6, 0x38, 0x00, 0x01, 0x8f, 0x18, 0x00, 0x01, 0x9f, 0x98, 0x00, 0x01, 0xb0, 0xcc, 0x00, 
	0x01, 0x30, 0xcc, 0x00, 0x01, 0xb8, 0xcc, 0x00, 0x01, 0x9f, 0x98, 0x00, 0x01, 0x8f, 0x18, 0x00, 
	0x00, 0xc0, 0x30, 0x00, 0x00, 0x70, 0x70, 0x00, 0x00, 0x3f, 0xe0, 0x00, 0x00, 0x1f, 0x80, 0x00
};
const unsigned char epd_bitmap_warning [] PROGMEM = {
	0x00, 0x00, 0x03, 0xc0, 0x02, 0x40, 0x06, 0x60, 0x04, 0x20, 0x0d, 0xb0, 0x19, 0x98, 0x11, 0x88, 
	0x31, 0x8c, 0x21, 0x84, 0x60, 0x06, 0x40, 0x02, 0xc0, 0x03, 0xc0, 0x03, 0x7f, 0xfe, 0x00, 0x00
};

#include <WiFi.h>
#include <HTTPClient.h>
#include <ArduinoJson.h>
#include <GxEPD2_BW.h>
#include <GxEPD2_3C.h>
#include <Fonts/FreeSans18pt7b.h>

#define uS_TO_S_FACTOR 1000000  // Conversion factor for micro seconds to seconds
#define TIME_TO_SLEEP  1800      // Time ESP32 will sleep (in seconds)

//GxEPD2_BW<GxEPD2_290_BS, GxEPD2_290_BS::HEIGHT> display(GxEPD2_290_BS(/*CS=5*/ SS, /*DC=*/ 1, /*RES=*/ 2, /*BUSY=*/ 3));
GxEPD2_3C<GxEPD2_290_C90c, GxEPD2_290_C90c::HEIGHT> display(GxEPD2_290_C90c(/*CS=5*/ SS, /*DC=*/ 1, /*RES=*/ 2, /*BUSY=*/ 3));

// WiFi Credentials
const char* ssid = "Ditto";
const char* password = "0380704001abc";

// OpenWeatherMap API Info
const String city = "Puchong";
const String apiKey = "b759a32c222cef5368b10fb891d0e8c7";
const String weatherURL = "http://api.openweathermap.org/data/2.5/weather?q=" + city + "&appid=" + apiKey + "&units=metric";
// http://api.openweathermap.org/data/2.5/weather?q=Puchong&appid=b759a32c222cef5368b10fb891d0e8c7&units=metric

int wifitimeout = 0;
bool wifi = false;

String temperature = "";
String humidity = "";
RTC_DATA_ATTR const unsigned char* icon = nullptr;

RTC_DATA_ATTR float savedTemp = 0;
RTC_DATA_ATTR int savedHumid = 0;

void setup() {
  display.init(115200, true, 50, false);
	display.setRotation(3);

	Serial.begin(115200);
	Serial.println("Initialising...");

	Serial.print("Connecting to WiFi");
	WiFi.begin(ssid, password);

	while (WiFi.status() != WL_CONNECTED) {
		delay(1000);
		Serial.print(".");
		wifitimeout++;
		if (wifitimeout > 20) {
			WiFi.disconnect();
			Serial.println("WiFi not connected! Display will not be updated!");
			break;
		}
	}

	if (WiFi.status() == WL_CONNECTED) {
		wifi = true;
		Serial.println("WiFi connected successfully! Checking weather now.");
		HTTPClient http;
		http.begin(weatherURL);
		int httpCode = http.GET();

		if (httpCode > 0) {
			String payload = http.getString();
			Serial.println("Weather JSON:");
			Serial.println(payload);

			StaticJsonDocument<1024> doc;
			DeserializationError error = deserializeJson(doc, payload);
			if (!error) {
				float temperaturenew = doc["main"]["temp"];
				int humiditynew = doc["main"]["humidity"];
				String iconnew = doc["weather"][0]["icon"];

				savedTemp = temperaturenew;
				savedHumid = humiditynew;
				Serial.println("Data saved!");

				String temperatureformatted = String(temperaturenew, 1) + " C";
				String humidityformatted = String(humiditynew) + "%";

				if (iconnew == "01d" || iconnew == "01n") {
  				icon = epd_bitmap_clear_sky;
				} else if (iconnew == "02d" || iconnew == "02n") {
    			icon = epd_bitmap_few_clouds;
				} else if (iconnew == "03d" || iconnew == "03n") {
    			icon = epd_bitmap_scattered_clouds;
				} else if (iconnew == "04d" || iconnew == "04n") {
    			icon = epd_bitmap_broken_clouds;
				} else if (iconnew == "09d" || iconnew == "09n") {
    			icon = epd_bitmap_shower_rain;
				} else if (iconnew == "10d" || iconnew == "10n") {
    			icon = epd_bitmap_rain;
				} else if (iconnew == "11d" || iconnew == "11n") {
    			icon = epd_bitmap_thunderstorm;
				} else if (iconnew == "13d" || iconnew == "13n") {
    			icon = epd_bitmap_snow;
				} else if (iconnew == "50d" || iconnew == "50n") {
    			icon = epd_bitmap_mist;
				} else {
    			icon = epd_bitmap_clear_sky;
				}
				temperature = temperatureformatted;
				humidity = humidityformatted;
			} else {
				Serial.println("JSON parsing failed");
			}
		} else {
			Serial.print("HTTP GET failed, code: ");
			Serial.println(httpCode);
		}
		http.end();
		Serial.println(temperature);
		Serial.println(humidity);
	} else {
		if (savedTemp == 0 && savedHumid == 0) {
			temperature = "N/A";
			humidity = "N/A";
			icon = epd_bitmap_clear_sky;
		} else {
			String temperaturerecovery = String(savedTemp, 1) + "°C";
			String humidityrecovery = String(savedHumid) + "%";
			temperature = temperaturerecovery;
			humidity = humidityrecovery;
		}
	}

	display.clearScreen();
	display.fillScreen(GxEPD_WHITE);
	display.setFont(&FreeSans18pt7b);
  display.setTextColor(GxEPD_BLACK);
  display.setTextSize(1);

	if (wifi == false) {
		display.drawBitmap(4, 3, epd_bitmap_warning, 16, 16, 0);
	}

	display.drawLine(104, 0, 104, 127, 0);
	display.drawBitmap(124, 23, epd_bitmap_temperature, 32, 32, 0);
	display.drawBitmap(123, 73, epd_bitmap_humidity, 32, 32, 0);
	display.setCursor(169, 102);
  display.print(humidity);
  display.setCursor(169, 51);
  display.print(temperature);

	display.drawBitmap(18, 32, icon, 64, 64, 0);

	display.display();

	esp_sleep_enable_timer_wakeup(TIME_TO_SLEEP * uS_TO_S_FACTOR);
  esp_deep_sleep_start();
}

void loop() {

}

Credits

Jeremy Ngai
1 project • 0 followers
A teen from Malaysia, passionate about electronics, coding, and microcontrollers—turning ideas into creative, working projects.

Comments