What’s old is new again.
Back in the early Macintosh computer days, when the Earth’s crust was still cooling, getting photos and artwork to look presentable on these computers’ 1-bit monochrome displays was something of an art form.
Much of that know-how has fallen by the wayside as screens improved…but with wafer-thin, ultra-low-power E-Ink displays appearing everywhere now, a refresher in those techniques is suddenly relevant again.
A couple of software options are shown in this guide. ImageMagick (a free command-line tool) and Photoshop (not free, but many folks already have it).
The resulting BMP images can be used with Arduino or CircuitPython libraries for these displays.
For Arduino, that would be the Adafruit_ImageReader library, which can be installed with the Arduino Library Manager (Sketch→Include Library→Manage Libraries…). The latest versions of the Arduino IDE will then take care of installing all the dependent libraries (Adafruit_GFX and others). See the EInk* examples included with the Adafruit_ImageReader library for usage.
For CircuitPython, here’s a whole guide to get you started.
The aforementioned libraries — both for Arduino and CircuitPython — read BMP image files. But even within BMP, there are a number of different variations…and these libraries, evolving independently, aren’t always in step. Knowing what each library can handle is important when converting images.
- Adafruit_ImageReader for Arduino: reads 1-bit and 24-bit uncompressed BMPs only.
- CircuitPython displayio.OnDiskBitmap: reads uncompressed BMPs of any depth, 1- to 32-bit.
- CircuitPython adafruit_imageload: 1-, 4- and 8-bit uncompressed or RLE-compressed BMPs. 16-bit and higher depths are not supported.
Because E-ink displays typically offer just a few shades, 1- or 4-bit output would normally be ideal. But due to the library constraints above, sometimes it’s necessary to use 24-bit output regardless, which we’ll explain…