Close
0%
0%

EPDiy: 9.7"/6" E-Paper controller

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

Similar projects worth following
EPDiy is a driver board which talks to affordable E-Paper (or E-Ink) screens, which are usually sold as replacement screens for E-Book readers. Why are they interesting?
* Easy on the eyes and paper-like aesthetics
* No power consumption when not updating
* Sunlight-readable
Ready-made DIY modules for this size and with 4bpp (16 Grayscale) color support are currently quite expensive. This project uses Kindle replacement screens, which are available for 20$ (small) / 30$ (large) on ebay!
The EPDiy driver board targets multiple E-Paper displays. As the driving method for all matrix-based E-ink displays seems to be more or less the same, only the right connector and timings are needed. The EPDiy PCB features a 33pin and a 39pin connector, which allow to drive the following display types: ED097OC4, ED060SC4, ED097TC2For more information and a full documentation, visit the documentation!

Documentation:

Want to know how to use the board? Check out the ESP-IDF component API.

Want to know more about the supported boards? Have a look at the documentation.

Build It!

KiCad-Project, Gerber files and firmware can be found on github: https://github.com/vroland/epdiy.

Features: 

  • 4bpp (16 color) output in ~600ms (at 1200x825 resolution)
  • Simple, 2 layer PCB with all components on front (Optional connector for 6" EPDs on the back)
  • Small form Factor
  • Onboard temperature sensor
  • Broken out SPI and sensor pins
  • High-level library for own software (https://epdiy.readthedocs.io/en/latest/ This is still work in progress!)

Thanks to:

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

cut.mp4

A short demo video.

MPEG-4 Video - 2.35 MB - 04/21/2020 at 17:00

Download

  • Software at last...

    Valentin04/22/2020 at 12:08 0 comments

    Now that my v2 PCBs have arrived and I have assembled a test board, it turns out most of the work is actually software. But first: This is how the new version looks like:

    As you can see, the new version is much more compact. Additionally, there is now one component on the back side: The connector for the ED060SC4 is optional, to be populated if needed. Currently there is no software support for it, but I'll fix that in the following days.

    Actually, writing the software driver is taking a lot more time than I anticipated. Part really was just experimenting, figuring out the functional details of the ePaper screen and familiarizing with the ESP32.
    Another one was rewriting all my display routines to use buffers with 4bit per pixel (instead of 8), for better memory efficiency and faster display (which is still somewhat bound by memory speed).

    But I also wanted to make sure the board is actually usable by others, which is why I am currently working on re-structuring and documenting the driver. You can get a preview of the displays' capabilities here: https://epdiy.readthedocs.io/en/latest/api.html Or watch the updated demo video :)

  • v2 underway!

    Valentin03/21/2020 at 10:31 1 comment

    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 4 project logs

Enjoy this project?

Share

Discussions

Sebastius wrote 05/24/2020 at 22:21 point

Spent the weekend building two boards according to the latest files, and they both work! My compliments to your work so far. I'll try and contribute a nice complete BOM soon, and make it nice and LCSC compatible. Sadly they lack the LT1945 chip and i haven't found the ED060 displayconnector AXT334124 equivalent yet.

Have you looked into dedicated PMICs for eink, like the TI TPS65186 ? I've made a board with it but i can't get it to run yet.

  Are you sure? yes | no

Valentin wrote 7 days ago point

Nice to hear that :)
I have, briefly. But they seem fairly expensive, only come in unwieldly packages. They could be nice for energy efficiency though.
For the ED060 connector I used the Hirose FH26W-39S-0.3SHW, which seems to be widely available.

  Are you sure? yes | no

Sebastius wrote 7 days ago point

unwieldy is relative, with a bit of paste and hot-air its pretty straight-forward soldering. Cost is a factor, but the reduction in the number of parts and the improvement in efficiency might be interesting. 

The Hirose connector you mention seems to be a different pitch compared to the panasonic one. But hey, if they work :D

  Are you sure? yes | no

Max M Fuhlendorf wrote 05/24/2020 at 08:52 point

Im a biology graduate with an undergraduate degree in computer sciences but the electronics go way over my head... I LOVED your project though, but while I'm very comfortable with its software side, the hardware is intimidating. 

Could you point us in the right direction on where to start learning how to actually order and build this esp32 board version?

  Are you sure? yes | no

Paul wrote 05/23/2020 at 23:56 point

Awesome project! I've been eyeing it for a while.

Are you planning to sell pre-made boards? That would make acquiring one considerably easier for me.

  Are you sure? yes | no

Valentin wrote 05/24/2020 at 19:42 point

I'm thinking about doing that in the future, seems like the requests for boards keep coming...

  Are you sure? yes | no

Camilo Alvarez wrote 05/21/2020 at 15:12 point

Love the project, been trying to work myself with recycled e-paper displays for a while. 

May i suggest something. Separating the interface part of the design with the control part. That way it could be a cheap / easy to manufacture connector  with  through hole and connect it to an  already mass produced esp-32 module like the NodeMCU

  Are you sure? yes | no

Valentin wrote 05/24/2020 at 19:41 point

PaperBack has done something like that for a smaller display. However, the integrated design was deliberately chosen to obtain a smaller form factor. Furthermore, most of the pins of the ESP32 are in use and the software requires the SPRAM on the wrover module (not the wroom module as on the NodeMCU).

But feel free to modify the design to suit your needs ;)

  Are you sure? yes | no

Szymon Masternak wrote 04/27/2020 at 12:46 point

Whats the power consumption when in deep sleep and when updating the display?

  Are you sure? yes | no

Valentin wrote 05/02/2020 at 10:29 point

That's a good question I hope to investigate when I have the time. However, I don't know if I can make reliable measurements with my equipment...

  Are you sure? yes | no

Jürgen Skrotzky wrote 04/13/2020 at 13:43 point

Wow V2 sounds great. Looking forward to the progress. Really want to use this for my kitchen to display some info.

  Are you sure? yes | no

Boa wrote 04/03/2020 at 21:30 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

Valentin wrote 04/10/2020 at 16:02 point

The Arduino Uno does neither provide enough IO nor has the resources to drive a display like this (Maybe, if you stream in the data, you could do it veeery slowly).
An RPI on the other hand has a full operating system running, which makes it hard to drive signals which require exact timing.
So, what you would normally do is use a controller board (such as this one ;)) and use a RPI oder Arduino to interface with it.

  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,

Jorgen

  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

Hello,

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?

Regards,

Vadim

  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