Control multiple e-ink display with a single Arduino


I plan to use small e-ink SPI display, like this one : Link to e-ink display

In my project, I need to use 6 or maybe 8 of these display, and control all of them from a single Arduino board.

Is there any way to control all these display from a single Arduino board (like a Mega 2560) ? Using the "slave select" pin of the SPI bus ?

Or should I use a small Arduino board for each display and then control them all from a "central" board, using a communication bus between all the boards ?

Another question : should I shift the Arduino output levels from 5V to 3.3V ?

Thanks !

Last question first: you should use 3.3V control signals, either 3.3V Arduino, or level shifter, or voltage divider, or at least series resistors.

If you want to display more than just bitmaps, you need enough RAM to buffer either the full display, or at least pages or frames. So one AVR Arduino is not usable for multiple displays.

Even if a EPD library supports multiple instances of display classes, you will run out of RAM even with ESP8266 or ESP32.

I have not yet used my GxEPD library with multiple displays. With some changes it might control up to 4 2.9" b/w e-paper displays.

Theoretically the same buffer could be used sequentially for multiple displays, but this is not implemented.

The ESP32 would have enough pins for one SS or CS line per display, maybe even for separate BUSY lines, or the BUSY lines could be ored to one pin.

Do you already have a library in mind?

Thanks for these informations, I didn't thought about memory...

I want to use these little e-ink screen only to display text.

The only library I have in mind is yours. (

But I didn't played with it for now (I didn't received my screens yet)

I want to have the smallest hardware possible, so do you know if this is possible to control a 296x128 e-ink display (maybe one with 3 colors ?) from a Arduino Nano ?

Or maybe could you give me some advices for a (very) small single e-ink screen control board ?

I think about that : - one small 3.3V control board for each e-ink display - all controls boards are connected to a central 5V Arduino board using I2C or another bus - this way, I only need to shift levels on the Arduino output (smallest circuit) - I need a 5V Arduino on main control because I need to connect it to other 5V components/shields

There are 3.3V Arduino Pro Mini versions. You can control 196x128 e-papers with these using the paged drawing method.

But the cheapest Wemos D1 mini clones are about the same price, have enough RAM for full display buffer, and have USB connector for program upload. And you just have the I2C pins left for connection. I2C is open drain, so you don't even need level shifters.

196x128 / 8 is 3136 bytes for b/w, so with ESP32 you could connect > 10 of these displays to one, but not quite so many because of less available pins (too late for me for counting them now).

Hi there, I'm using the Waveshare 2.9" b/w e-paper display. I'm currently controlling each display with one Arduino Mega 2560 using your GxEPD library. I would like to be able to control multiple displays with one Arduino Mega. What changes would need to be made to the GxEPD library to control multiple displays wit hone Arduino?


You didn't tell how many displays. The MEGA has more RAM than the UNO, so you might use multiple display instances with GxEPD.

But I recommend to use GxEPD2 for this, as you can control the amount of RAM to use per instance as template parameter of the constructor at application level.

The example GxEPD2_MultiDisplayExample.ino is for ESP32 or ESP8266, but you can combine with the constructors for __AVR in GxEPD2_Example.