Good Display ePaper for Arduino

I really need some help with my new epaper modules. I'm not sure whether I've bought some bad epaper or my coding is bad.

I wasn't able to get the whites to stay whites.

I have attached images here. Right after the code finished setup, the display was perfect, white being white, black being black and yellow being good-enough. but a few seconds after that, you can see the yellow particles started appearing on the display (left hand side) and in less than 10 seconds, all the whites became yellowish. I tried different patterns, drawing bitmaps etc, but the edges always started turning yellowish and then all the whites ended up very yellowish after around 10 sec.

FYI, I am using D1 mini (Esp8266), wired up with dupont / breadboard to the DESPI-C02 display driver directly (no resister or anything in between). Wiring was exactly the same way as the suggested wiring in GxEPD2 library ( BUSY -> D2, RST -> D4, DC -> D3, CS -> D8, SCK -> D5, SDI -> D7, GND -> GND, 3.3V -> 3.3V ). The display is a 2.9" B/W/Yellow GDEW029C32.

For power, I tried both with my laptop USB port as well as a 5V3.1A USB charger socket. Same problem. also, I bought and tried 2 modules , both displayed the same problem.

The code I used is as follows. I tried hibernate() instead of powerOff() or not doing powerOff at all. Nothing helped.

I feel very frustrated, any help would be greatly appreciated. Thanks.

#define ENABLE_GxEPD2_GFX 0
#include <GxEPD2_3C.h>

#define MAX_DISPLAY_BUFFER_SIZE 800
#define MAX_HEIGHT_3C(EPD) (EPD::HEIGHT <= (MAX_DISPLAY_BUFFER_SIZE / 2) / (EPD::WIDTH / 8) ? EPD::HEIGHT : (MAX_DISPLAY_BUFFER_SIZE / 2) / (EPD::WIDTH / 8))
GxEPD2_3C<GxEPD2_290c, GxEPD2_290c::HEIGHT> display(GxEPD2_290c(/*CS=D8*/ SS, /*DC=D3*/ 0, /*RST=D4*/ 2, /*BUSY=D2*/ 4));


#include <Fonts/FreeMonoBold12pt7b.h> 
#include <Fonts/FreeMonoBold24pt7b.h>  



void setup()
{
  Serial.begin(115200);
  Serial.println();
  Serial.println("setup");
  delay(100);
  display.init(115200);

  display.setFullWindow();
  //display.firstPage();
  display.fillScreen(GxEPD_WHITE);


  display.setRotation(1); 
  display.fillRect(0, 0, 296, 30, GxEPD_BLACK);
  display.fillRect(0, 32, 128, 128, GxEPD_RED);


  display.setTextColor(GxEPD_WHITE);
  display.setFont(&FreeMonoBold12pt7b);
  display.setCursor(0, 0);
  display.println();
  display.println("Very expensive stuff");

  display.setCursor(0, 24);
  display.setFont(&FreeMonoBold24pt7b);
  display.println();
  display.println(" ON ");
  display.println("SALE");

  display.setCursor(150, 90);
  display.setTextColor(GxEPD_BLACK);
  display.println("$100");



  //while (display.nextPage());
  display.display();
  display.powerOff();
  Serial.println("done");

}

void loop() {};

IMG_20200827_163448.jpg

IMG_20200827_163512.jpg

IMG_20200827_163536.jpg

IMG_20200827_163605.jpg