9.7"/6" E-Paper controller (Kindle Screen)

I always wanted a large, affordable E-Ink screen to play around with. The result is a board to talk to a Kindle DX screen with an ESP32.

Similar projects worth following
*Update:* I'm currently working on a version 2 with additional features, see

A breakout board for the ED097OC4 9.7" ePaper (or E-Ink) display. ePaper is a fascinating technology for low-power and pleasant-to-look-at screens. However, ready-made DIY modules for this size and with 4bpp (16 Grayscale) color support are currently quite expensive.

This project uses Kindle DX replacement screens, which are available for 30$ on ebay, making tinkering with those screens much more affordable.

Displayed image By David REVOY -, CC BY 3.0, Link

Build it!

KiCad-Project, Gerber files and firmware can be found on github:


  • 4bpp (16 color) output in ~2 seconds (at 1200x825 resolution)
  • Simple, 2 layer PCB with all components on front
  • Broken out I2C and sensor pins

Thanks to:

Thanks to the work of some awesome people, the hard stuff was already done:


A print of the PCB layout.

Adobe Portable Document Format - 168.86 kB - 11/01/2019 at 11:12



The board schematic.

Adobe Portable Document Format - 84.94 kB - 11/01/2019 at 11:12



A short demo video.

MPEG-4 Video - 41.19 MB - 11/01/2019 at 10:27



Gif of the demo video.

Graphics Interchange Format - 9.67 MB - 11/01/2019 at 10:22


  • v2 underway!

    Valentin03/21/2020 at 10:31 0 comments

    Over the past few days, I've been working on a revised PCB. It is now in production, so given international shipping will continue in the following weeks I'll soon be able to test it!
    The following improvements over the original version where made:

    • Switched to the ESP32-Wrover Module, which features 8MB PSRAM. This allows to hold full frame buffers in memory.
    • A footprint for an optional connector for the ED060SC4 6" E-Paper display was added. This should allow for driving either a 9.7" or 6" display with the same board!
    • As some ESP pins are now needed for the PSRAM module, some configuration pins where moved to a shift register.
    • A temperature sensor was added to be able to (in theory) adjust the driving waveform to the environmental temperature.
    • Smaller PCB outline of ~100mm x 32mm.
    • The board can be powered directly through 3.3V (without USB) for lower power consumption.
    • Instead of I2C, a full SPI port is broken out.

    Meanwhile, there are still some things to improve software-side: Currently, the refresh time of about 1100ms is mainly bounded by the ESPs flash bandwidth. With better data encoding / compression, it could be lowered even further.

  • Font Rendering and Partial Drawing

    Valentin11/18/2019 at 21:44 0 comments

    Now, finally I implemented what these displays where originally designed for: displaying text. Unfortunately, the ESP32 does not have enough RAM for a real frame buffer (maybe a version 2 will use a module with PSRAM). So, I have to resort to partial refresh / drawing. 

    For the image shown above, I first displayed a full-screen grayscale image as usual. Then, I cleared the middle area and proceeded to draw the text line-by-line. If you screen content does not need to be updated often, this should suffice. Otherwise, you can always stream frames via wifi.

    For my tests I used the latin1 character set and the Fira Sans font, however, this is completely customizable.

  • ESP32 timing

    Valentin11/01/2019 at 11:32 0 comments

    Hello World! Finally, the project is ready to go public. If you have any ideas, improvements or comments to share, feel free!

    During the last days, I struggled a bit with getting the timing for the gray scale output right. Each row has to be activated for a only a few microseconds to only dim it slightly. While this worked most of the time, sometimes, the code took much longer, resulting in dark horizontal stripes. Debugging this was quite a journey, since I was new to the ESP32:

    • Coming from the world of Arduino, having a real-time OS running on the chip was new. Disabling interrupts during the critical sections helped, the fact that the noInterrupts() function of the Arduino framework for the ESP32 is just a dummy did not.
    • At this point, most bad stipes where gone, but timing was still somewhat irregular, even when using the hardware timer. I thought using hardware timer interrupts is as good as it gets when trying to do exact timing, but apparently I was wrong. If someone has an idea why this could be, please tell me!
    • Finally, tagging the critical function with IRAM_ATTR and busy waiting for a set number of CPU cycles did the trick.

    Busy waiting does not seem like the most elegant solution, but it works. Refresh times are now at about 2 seconds for a gull grayscale image of 1200x825 pixels. If I could manage to already shift in new data while waiting for the current row to fade, this could be even faster. I'll have to try some things :) 

View all 3 project logs

Enjoy this project?



Boa wrote 2 days ago point

Hi, I'm kind of new to low level stuff so sorry if I ask stupid questions. Would it be possible to use a arduino uno or rpi zero instead of the custom pcb? If so what hardware and software modifications would I need to do?

  Are you sure? yes | no

Jürgen Skrotzky wrote 02/20/2020 at 19:49 point

Congratulations for this awesome project!

I would like to have something similar - but using the 6" Kindle display - I think it is the ED060SC7.
Is it possible to connect it to your board?
Thx and best regards,


  Are you sure? yes | no

Valentin wrote 02/20/2020 at 21:23 point

Hi, glad you like it. Unfortunately, the SC7 uses a different connector than the OC4 (34 vs 33 pin FPC with different pitch). However, as far as I know the driving mechanism for these displays is nearly identical for all models, so you might be able to just swap out the connector. I don't have a SC7 to verify though.

  Are you sure? yes | no

Jürgen Skrotzky wrote 02/22/2020 at 21:09 point

Thx for fast reply. I will dig into google to find more about it. Maybe I found an used and cheap 9inch screen 😅

  Are you sure? yes | no

Vadim Radu wrote 01/07/2020 at 13:53 point


Congratulations for your project, it's very nice.

I'm working on something similar. Can you share some info regarding the MODE1 and MODE2 pins? what are they used for and why did you tied them to a GPIO?



  Are you sure? yes | no

Valentin wrote 01/10/2020 at 21:36 point

Hi Vadim,

Sure, but may I known which display you are using? As far as I know, only the ED60SC4-Displays have MODE1 and MODE2 lines. The display I'm using is a 9.7 inch one and has only one MODE line, which is just wired to a GPIO, as drawn on the schematic ;)

  Are you sure? yes | no

Similar Projects

Does this project spark your interest?

Become a member to follow this project and never miss any updates