An e-Paper based photo frame

21-3-2021

Another one of my “lockdown projects” involves a 7.5 inch e-Paper display from Waveshare. Instead of your ordinary computer display, which bombards your eyes with light, e-Paper displays are more similar to paper. By making a pixel more or less reflective (using a technique known as ‘E-ink’), an e-Paper display reflects more or less external light. This makes the displays very easy on the eyes and quite sharp. The major downsides are that (1) E-paper displays typically can only show one or two different colors, and (2) they are very slow to change from one image to another (however, an image will ‘stick’ even when the power is turned off!).

In this case the goal was to make a photoframe display. While my e-Paper display could only show black or white, it is possible to use a trick known as ‘dithering‘ (check this link out, it is pretty cool!) to fool your eyes into thinking there are actually multiple shades of grey involved. As you can see below, Mona Lisa appears quite nicely, albeit with a few speckles and strange ‘patterns’ on her chest and robe:

Mona Lisa, dithered on an e-Paper display, conected to a Pi Zero. One can only wonder what Leonardo Da Vinci would think of this!

To make the photo frame work, I wrote a program in Rust that periodically fetches an image (using HTTPS), applies the dithering algorithm, and sends it to the e-Paper display. The latter involves a lot of dark magic with GPIO and SPIs, which took quite a bit of effort given Waveshare’s very limited documentation and abysmal support… After figuring out the protocol however and finding out that the first display driver HAT I received was actually defect, I managed to draw something on the screen. To generate the images on the server side, I am using a very neat piece of kit which could also be used to generate all sorts of dashboards quite easily.

The source code is available here.