E-Ink Weather


I've always loved e-ink screens. They only need power to update the image, and have great visibility in most lighting conditions. They also have a certain quality about them; images displayed on them just look more real and physical than a normal LCD.

In looking for a project to play with Arduino/ESP8266 boards, I found, and eventually settled on, the Waveshare e-ink screens that are widely available on Amazon. They are also the only manufacturer that makes screens this large, with Pervasive Displays offering better screens that support partial updates, but seem to be near impossible to find at the 7 inch and above level.

Driving the screen is an Adafruit Featuer HUZZAH ESP8266 which has the advantage of a battery connection that can be recharged through USB on the board directly. I'm not much of a hardware person at all, so having the battery and USB connections on board was critical.

Programming the board was pretty simple. I decided to take the route of doing all the rendering on the server side, which meant the client, minus screen libraries, was only around 100 lines. The client just grabs a file from a hardcoded URL, sending an ETag in the request that is saved in the EEPROM. This lets the board further save on battery life by not downloading and refreshing an unchanged image. The response is passed straight through to the screen, and then goes to deep sleep for 20 minutes. In this mode, everything is turned off including the CPU; only the Real Time Clock stays running.

With this update schedule, I get about a month of battery life with my current 2500mAH battery. While research indicated I could probably be getting battery life in the 2-3 month range, I'm not sure how much more I can currently get.

The server side is a Python script ran from a cron job that dumps a binary file to disk. This is the part that does all the image processing and API calls. The script's output is a buffer of packed pixels, with 8 black or white pixels per byte. This is what lets me dump it right into the e-ink screen's controller on the ESP8266.

There's probably a lot of other potential things to display on the screen, I just have a weird thing for weather displays. The slow refresh time (~7 seconds) to refresh the screen means you probably don't want to refresh too frequently otherwise it'll get annoying, even if power isn't a concern.

This project was a lot of fun, and I hope that somehow in the future I can replace the screen and do something that updates a little more frequently. I really like the idea of having a display that doesn't have a backlight on your desk that blends in.