Fun with E-ink
Having recently completed a project using the excellent ESP-32 microcontroller, I wanted something new to work on.
After spotting a nice e-ink display on Amazon, I decided it was time to play.
Helpfully, Amazon also suggested a "Universal" e-ink driver board with a built in ESP-32:
At this point, I wondered if this project would be too easy; I was somewhat mistaken...
The FFC on the display has 20 pins; the receptacle on the driver board has 24, so immediately I see i'm going to have to do some work. Looking into the schematic for the driver board and what documentation I could find for the display, these do not connect in any trivial way, though the signals seem to be somewhat comparable.
I've so far been unable to find a technical reference manual for the relevant EPSON s1d13541 display controller, but I found some documentation from a plasticlogic github repo which explains a good amount around how e-ink displays actually work. I've never worked with e-ink displays before and it turns out they aren't completely trivial.
Some noteworthy details I didn't appreciate:
- You need to generate relatively high voltages (the driver board handles this).
- Switching pixels on and off requires factory-generated/calibrated 'waveform' data to be fed into the display's controller at startup.
- This and other such factory-established parameters are stored in an I2C memory which is also stuck to the display in this case.
- The display->host processor interface is SPI, so the memory must be accessed via the display controller's SPI-I2C bridge functionality.
Finally, I found that the code for the PlasticLogic eval kits is available in a github repo!
This code is nicely structured and looks relatively easy to port to ESP32. It takes care of basically everything and comes with everything you need, even example applications to exercise the screen!
I'm currently waiting for some FFC breakout boards to arrive; things are pretty hectic at the moment and I have multiple projects going on elsewhere in my life which cannot be deferred. Hopefully i'll get some time together soon to port some of the demo code to ESP32!