Terrible trouble with an Waveshare epaper 2.9 display

I am going out of my mind. I have been trying to get this work for am embarrassing amount of time.

I cannot get my Waveshare 2.9 epaper B&W to display anything. Nothing. Not a jot of success. Help. I am out of ideas and about to give up.

What I have done:

What on earth am I doing wrong? I normally can make better progress, but this has really stumped me.

Thank you.

#define GxEPD2_DRIVER_CLASS GxEPD2_290_T5 // GDEW029T5 128x296

3.3V Grey VCC
DIN Blue D7 (MOSI)
CLK Yellow D5 (SCK)
CS Orange D8
DC Green D3
RST White D4
BUSY Violet D2


welcome to the Displays section of the forum. I hope you have read How to get the best out of this forum (short version).

Please always post clickable links to the devices in question. It may help responders to give correct answers, and readers to follow.

I assume you have this Waveshare board: 296x128, 2.9inch E-Ink display module
Wiki page: https://www.waveshare.com/wiki/2.9inch_e-Paper_Module

Neither of the two pages tells exactly which panel they use, and if they have changed it recently.

GxEPD2 supports several 2.9" b/w panels from Good Display:

//#define GxEPD2_DRIVER_CLASS GxEPD2_290     // GDEH029A1   128x296
//#define GxEPD2_DRIVER_CLASS GxEPD2_290_T5  // GDEW029T5   128x296
//#define GxEPD2_DRIVER_CLASS GxEPD2_290_T94 // GDEM029T94  128x296
//#define GxEPD2_DRIVER_CLASS GxEPD2_290_M06 // GDEW029M06  128x296

Waveshare used GDEH029A1 on their original board. GDEW029T5 is less likely.

You could try all versions.

The actual version of the Waveshare board has the "clever" reset circuit. From GxEPD2 README.md:

- note that Waveshare bords with "clever" reset circuit may need shortened reset pulse
- use `init(115200, true, 2, false)` for Waveshare boards with "clever" reset circuit
  • changed the jumper on the back to a 3 wire SPI. (Was this correct?)

No. GxEPD2 does not support 3 wire SPI (9bit SPI transfers instead of DC line).

Please report the inking on the flex connector. Then I can compare with the panels I have.

If the GDEW029T5 is used, then there would be an issue; it might be GDEW029T5D. See also this post.
I have ordered this panel to check. It is on its slow way from China, ordered through AliExpress.


Thank you. You have assumed the correct display, sorry I should have mentioned it. It was bought direct from waveshare in the past couple of weeks. https://www.waveshare.com/product/displays/e-paper/epaper-2/2.9inch-e-paper-module.htm

I have re-instated the original 4 wire SPI soldered connector. The display has a ‘V2’ sticker on the back and is marked rev 2.1, the V2 sticker Waveshare have told me means it is b/w.

The flex connector of the b/w display has written on it (I assume you mean the flexible connector between the display and control PCB). Can send pictures if needed, just let me know:

I have added the adjusted code mentioned (see below). I have tried with this code change for all the four display versions without any success. Still I am not getting any response from the display.

Incidentally, the display currently has a load of static noise on teh display. It appeared during the testing. I assume that when it correctly receives a command to display text it will either partially or fully be cleared.

I could use either the b/w/y or a b/w/r one that I also bought at the same time. Though, adding more different permutations might not be helpful in eliminating the problem, so am hesitant to do so.

It blows my mind that these boards are different and that they are not labelled…

// GxEPD2_MinimumExample.ino by Jean-Marc Zingg

// purpose is e.g. to determine minimum code and ram use by this library

// see GxEPD2_wiring_examples.h of GxEPD2_Example for wiring suggestions and examples
// if you use a different wiring, you need to adapt the constructor parameters!

// uncomment next line to use class GFX of library GFX_Root instead of Adafruit_GFX, to use less code and ram
//#include <GFX.h>

#include <GxEPD2_BW.h> // including both doesn't use more code or ram
#include <GxEPD2_3C.h> // including both doesn't use more code or ram

// select the display class and display driver class in the following file (new style):
#include "GxEPD2_display_selection_new_style.h"

// alternately you can copy the constructor from GxEPD2_display_selection.h or GxEPD2_display_selection_added.h of GxEPD2_Example to here
// e.g. for Wemos D1 mini:
//GxEPD2_BW<GxEPD2_154_D67, GxEPD2_154_D67::HEIGHT> display(GxEPD2_154_D67(/*CS=D8*/ SS, /*DC=D3*/ 0, /*RST=D4*/ 2, /*BUSY=D2*/ 4)); // GDEH0154D67

void setup()
  display.init(115200, true, 2, false);
  // comment out next line to have no or minimal Adafruit_GFX code
    // comment out next line to have no or minimal Adafruit_GFX code
    display.print("Hello World!");
  while (display.nextPage());
void loop() {};


bad news, this e-paper panel is not supported by GxEPD2.

I found a panel with the same inking. I had put a sticker "029 defekt" on it.
I had got it from a donator to find out if I can get it to work.
This panel doesn't seem to come from Good Display, but I don't know.
On the backside it has a sticker "DEPG0290BNS800F6HP--DK".

You could try to run it with the Waveshare demo code.

And you could ask Waveshare where the panel comes from and what controller it uses.
Maybe they have specs for the panel and the controller.

They could consider to send me a free sample.



I just found this post.

And I found another panel with this inking. It is a GDEM029T94.
It has the same kind of sticker on the backside as the defective one, but with "GDEM029T94" on it.

But you told you tried this, so I don't know.

You could take a look at diagnostic output in Serial Monitor and maybe report it in a code window.
This to check if your SPI communication works.


I have just been looking through the other displays and I bought 6 in total (2 red, 2 yellow & two b&W)I have marked on the flex connectors:

  • WFT0290CZ10

  • HINK-E029A10-A3

Would either of these be any others on the list which are supported?

I will put a oscilloscope on the board tomorrow, to check that the SPI signals are looking reasonable.

Waveshare have provided Arduino drivers in the past. I grabbed a copy here a while ago and fixed some bugs. I did use the ESP8266 with the 2.9 display driver and it worked OK.

Due to the passage of time (and the "retiring" of all my ePaper projects...) I am not able to provide more help!

Just a final update. I have paused this investigation. I will may come back to in coming months.

Meanwhile I am using a ILI9341 display and gesture controller. It will do what I need, plus I can get it to work without issue.

I had the same problem with DOIT ESP32 DEVKIT1 and waveshare 2.9inch Rev2.1
I wrote an email to waveshare service and the answer was:

The driver of the new e-Paper is different from the old version and cause the driver codes to be different.
I'm sorry about it.
How about referring to our demo codes and try to combine the two codes?

  1. it is unacceptable that the hardware is changed with one not compatible with the past, keeping the same code and part number
  2. no idea how to combine the two codes. Jean-Marc Zingg any idea?
    PS it is used in a cosmic ray detector for high school. Ten have been assembled last year and sell wordwide. Now we want restart the production 2021 but I am blocked

Thanks for any help
Angelo Maggiora


Hi Angelo,

if you have not done yet, please read How to get the best out of this forum (short version).

And just to make sure we are discussing the same device, please post a link (clickable) to the device you bought.

Please also tell which constructors you tried with GxEPD2. And if you used the init() method with the shortened reset pulse for the "clever" reset circuit of the Waveshare board (see README.md). And report the inking on the flex connector of the panel.

I think the 2.9" b/w e-paper board from Waveshare uses the GDEM029T94 panel.
GxEPD2 and its examples should work with it. But I don't have the actual version from Waveshare.

In the next step provide diagnostic output from Serial Monitor. In a code window, please.
BTW: which processor do you select to compile for? See also: https://forum.arduino.cc/index.php?topic=487007.msg4952538#msg4952538.


1 Like

Thank you very much, Jean.Marc, either for your answer and for your excellent library.
Sorry for the delay, I was out during last week. I had the possibility to read but not to work on harware.
Following your suggestions, I test the display with GxEPD2 example and I found that it work with GDEM029T94.
But now I have a big problem, the code for the educational cosmic ray detectors, which took more than a year of work, produced and sold worldwide by a specialized firm last year, was written with the GxEPD libraries and not with the GxEPD2.
I have not found the GxEPD2_290_T94 under GxEPD.
I also tried to update the code with the GXEPD2 but there are too many differences. For example, there is no drawExampleBitmap or updateWindow. Replacing them with drawInvertedBitmap and setPartialWindow didn’t work. Rewriting the code of a working and production object takes an unacceptable amount of time.
The question is: how can I use GxEPD2_290_T94 under GxEPD?
Thank you in advance,

Angelo Maggiora

Hi Angelo,

maybe after a little patience.

GxEPD lags behind GxEPD2, not by purpose, but because of my limited time and resources.
I think there are more users and projects with GxEPD than GxEPD2, so I always intended to update GxEPD also.

I am somewhat driven by user feedback. And naturally I get more feedback for new panels.
And I promote GxEPD2 for new users and new project, as I think it is easier to use.

I take note of your requirement, and will add support for GDEM029T94 to GxEPD.
I just can’t tell how soon this will be.


Dear Jean-Marc
thanks for your kindness and availability.
And thank you again, especially for the excellent library you wrote.
I started this project in 2019 by developing both hardware and software. The object went into production in 2020. Setting up a production line is not easy for a medium-small company, but in the end we succeeded and the didactic modules were sold all over the world. When production 2021 started and the display was not working, my arms dropped. A year of work thrown away and a few months to rewrite the firmware.
The subject is as follows:

Thanks again for your kindness and availability. I look forward with confidence but, at least now, there is a prospect of a solution.

Angelo Maggiora

Dear Angelo,

I am willing to help you with this. But you need to be aware that this is voluntary work.

Open Source Software can be useful for small companies for a start.
But you always need to be aware of its limitations, e.g. its license limitations.


BTW: please also be aware that you added your posts to a topic with a title I don’t like!


I have added support for GDEM029T94 2.9" b/w, actual Waveshare 2.9" b/w to GxEPD.

See also Waveshare e-paper displays with SPI - Using Arduino / Displays - Arduino Forum


Dear Jean-Marc
thanks again for your kindness and availability.
The new T94 library works with both GxEPD_EXAMPLE and my code.
You saved me at least a month of work

Angelo Maggiora

1 Like