Good Dispay ePaper for Arduino

Hey @ZinggJM just wanted to say thank you for always being super engaged with the community! I wrote an article about using the GDEW0213T5 with the DESPI-C02, because I had trouble with the setup process and distilled all the knowledge I got from here into the post Arduino - (e-ink) Good Display (GDEW0213T5). Thanks again!

Version 1.3.2 of library GxEPD2 is available, install with Library Manager.

  • added support for GDEW0213T5D 104x212 b/w e-paper panel
  • added support for GDEW029T5D 128x296 b/w e-paper panel
  • added support for GDEW0213Z19 104x212 b/w/r e-paper panel
  • added support for GDEW029Z13 128x296 b/w/r e-paper panel
  • both GDEW0213Z19 and GDEW029Z13 support only full screen refresh (controller issue)

Jean-Marc

1 Like

Version 3.1.1 of library GxEPD is available, install with Library Manager.

  • added support for GDEM029T94 2.9" b/w, actual Waveshare 2.9" b/w
  • updated example GxEPD_WiFi_Example, for actual GitHub certificate

This panel has been reported to be used on the actual Waveshare 2.9" b/w board.
But I don't have this Waveshare board, so I can't check and test with.

Jean-Marc

Dear Jean-Marc,

thank you very much for your answer.

After hours of testing, I found the mistake -and was mixing up MISO and MOSI :slight_smile:

Maybe just interesting, I ordered a TFT with Front-Light and think this is just looking great. Also to note, it needs 21V.

Regards,
Christian

Version 1.3.3 of library GxEPD2 is available, install with Library Manager.

For details see this post: Waveshare e-paper displays with SPI - #2599 by ZinggJM

Jean-Marc

I recently bought Lilygo TTGO T5 v2.3_2.13 which apparently uses the GoodDisplay GxGDE0213B1 (2.13" B/W) e-ink display.

I downloaded your GxEPD library, however no matter what I do I can't make the display to update. I compile & upload the sketch successfully to the board, run it aaand ... nothing happens. Below I'll explain what I'm doing

Here's the code that I'm trying to use to display stuff and nothing happens: #include <Arduino.h>#include <NTPClient.h>#include <GxEPD.h>#include <GxGD - Pastebin.com

This is the board that I bought TTGO T5 V2.3 wireless WiFi basic Wireless Module ESP 32 esp32 2.13 ePaper display development board|Replacement Parts & Accessories| - AliExpress

Thank you for any information in advance. Any hint is helpful. I am out of ideas as to what I am doing wrong.

The Arduino IDE is set to esp32-dev board. The code compiles and uploads successfully. The display is integrated basically so I physically can't plug it in the wrong pins or something. I send the commands and nothing happens. The debug messages that I get from the display class are the following

Connecting to wifi...
Connected to wifi.
Current time: 18:52:33
testDisplay init
␀_PowerOn : 90841
_Update_Full : 90952
_PowerOff : 230917
_PowerOn : 90588
_Update_Full : 91352
_PowerOff : 230921
␀_PowerOn : 90473
_Update_Full : 91399
_PowerOff : 230917
_PowerOn : 90546
_Update_Full : 91363
_PowerOff : 230921

P.S: The board supports SD cards but I haven't plugged one in yet. Could this be a problem, one that tricks the SPI interface?

@ltsochev, Hi, welcome to the forum.

The e-paper panel GDE0213B1 is no longer available, see GxEPD/README.md at master · ZinggJM/GxEPD · GitHub.

  • GDEH0213B72 2.13" b/w, replacement for GDE0213B1
  • GDEH0213B73 2.13" b/w, new replacement for GDE0213B1, GDEH0213B72

For new projects I recommend to use GxEPD2.
It is easier to use (in my view), and supports more e-paper panels.

You could just try with GxEPD2 and all available 2.13 b/w panel drivers.

Jean-Marc

I tried with GxEPD2 using the GxEPD2_213_B72, GxEPD2_213_B73 drivers all I'm getting is "Busy Timeout!" even when running the example solutions with proper selected panels.

I don't see any pin settings for GxEPD2 I suppose those are integrated in the drivers?

P.S: Tried all the drivers, none of them changed the display. I'm starting to think that the display is simply bust lol. How can I check that? Currently it is displaying LILYGO's logo and SKU number.

P.P.S: Nothing wrong with the display. The display selector had wrong definitions for Arduino ESP32 Dev boards. It set the wrong pins for the display class. I changed the pins and the phased out display class works flawlessly, mostly. I'm trying to get the hang of the library. I was able to show some text and remove the original logo. Thanks for the help. GxEDP2 is solid :slight_smile:

Ok I have no clue what I'm doing wrong. I need assistance. First off, the display fails to change anything regardless of what code I use, be it partial or full update. I've downloaded working examples and when I run them (compiled through PlatformIO) they do not run, nothing happens on screen. I decided to dig deeper in the library and found the refresh() method. When I use the refresh() method in the do/while loop the screen does what I want it to do with some caveats. display.fillScreen seemingly fills the screen with noisy black, even though I'm using GXEPD_WHITE constant, which should turn it white. And then the text color is white, while it should be black because I'm using the GXEPD_BLACK. The refresh method slows the code a lot.

I don't know what I'm doing wrong. I'm fairly certain I am using the proper driver class for my device. What troubleshooting tips can you guys give me. Basically unless I use refresh() nothing happens. Even the GxEPD2 example codes do not work whatsoever. I'm out of ideas. I tried using fillRect() method with no success at all. Nothing changse unless I call refresh() and when I call refresh() the display does weird stuff. Another issue I noticed with refresh() is pretty much all the text vanishes (slowly) when refresh() finishes its job even when I call display.powerOff() immediately after which is super weird because the function description says it is there to protect fading text.

Basically this is the code I'm using:

#define ENABLE_GxEPD2_GFX 0
#define SERIAL_BAUD_RATE 115200
#include <Arduino.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
#include <U8g2_for_Adafruit_GFX.h>

#define GxEPD2_DISPLAY_CLASS GxEPD2_BW
#define GxEPD2_DRIVER_CLASS GxEPD2_213_B72

#ifndef EPD_CS
#define EPD_CS SS
#endif

#define MAX_DISPLAY_BUFFER_SIZE 800 // e.g.
#define MAX_HEIGHT(EPD) (EPD::HEIGHT <= MAX_DISPLAY_BUFFER_SIZE / (EPD::WIDTH / 8) ? EPD::HEIGHT : MAX_DISPLAY_BUFFER_SIZE / (EPD::WIDTH / 8))
GxEPD2_DISPLAY_CLASS<GxEPD2_DRIVER_CLASS, MAX_HEIGHT(GxEPD2_DRIVER_CLASS)> display(GxEPD2_DRIVER_CLASS(/*CS=5*/ EPD_CS, /*DC=*/ 17, /*RST=*/ 16, /*BUSY=*/ 4));
U8G2_FOR_ADAFRUIT_GFX u8g2Fonts;

void helloWorldU8();

void setup() {
    Serial.begin(SERIAL_BAUD_RATE);
    Serial.println();
    Serial.println("setup");
    Serial.flush();
    
    delay(1000);

    display.init(SERIAL_BAUD_RATE);

    u8g2Fonts.begin(display);

    Serial.println("Attempting to draw stuff...");

    helloWorldU8();

    Serial.println("Going to loop subroutine");
}

void loop() {
    //
}

void helloWorldU8() {
    display.setRotation(1);
    u8g2Fonts.setFontMode(0);
    u8g2Fonts.setFontDirection(0);
    u8g2Fonts.setForegroundColor(GxEPD_BLACK);
    u8g2Fonts.setBackgroundColor(GxEPD_WHITE);
    u8g2Fonts.setFont(u8g2_font_helvR14_tf);

    uint16_t x = (display.width() - 160) / 2;
    uint16_t y = 48;

    display.firstPage();

    do {
        display.fillScreen(GxEPD_WHITE);
        u8g2Fonts.setCursor(x, y);
        u8g2Fonts.print("Lorem ipsum > Hello World!");
    } while (display.nextPage());

    Serial.println("helloWorld complete");
}

I am confused with your posts. Please provide clear information.

Please report the inking on the flex connector of the display panel. Maybe I can see if it corresponds to one of my panels.

I suggest you test with GxEPD2_Example. Uncomment one line in GxEPD2_display_selection.h in the ESP32 conditional section, and adapt the parameters to the wiring of your board.

Jean-Marc

Yes, I'm sorry about the confusion. Even earlier I saw some wonky stuff but I assumed I did something wrong with the installation and thought that I could figure it out on my own but apparently I can't. I didn't understand your prompt but after I ran the code the last time this is how my device looked like Image Upload For Everyone - Imageupload.io The cable part is a bit unreadable. It says FPC-7528

Basically, the background was supposed to be white but it's some noisy black. I tried to keep everything in focus.

Running the example code does nothing.

Sorry, I can't help you. I don't have any panel with FPC-7528. I have several 2.9" with FPC-7519.
Note that I don't download from sites I don't know.

Ah so you are saying that the issue is most likely with the cable? I guess I could try to find a replacement somewhere. Any tips on how to proceed with FPC-7528?

P.S: The links I post are basically toward images site to check out the pictures. I don't know if I can upload images in here.

No, your e-paper display has a panel I don't have, and therefore is not supported by GxEPD2.

Is there any way I can figure the maker of the display so I could look at least for technical documentation and write my own abstraction to show simple text on it?

2.13 inch e-paper screen module partial refresh, 4 Grayscale, GDEM0213B74_e-ink display-Good Display (good-display.com)

You can see FPC-7528 on the picture. You can find all details on that page.

BTW: TTGO has a fork of my library. Maybe they support that panel.

<GxGDEM0213B74/GxGDEM0213B74.h> is the proper library for it. Thanks for everything. This seems to be working right. Follows the color codes the way I put them and the text stays the way i put it. Huge thanks.

First of all, thank you for the outstanding contribution for your librarys !
With the new version of the Lilygo T5 2.13 Epaper, I had a problem with bad contrast /ghosting with the partial update. Full update is OK. The display is the GDEM0213B74, so I used the GxEPD with the GDEM0213B74.h library. Unfortunately, in this library there is no separat LUT table for partial update (all OPC i guess). So I tried another library, the GxDEPG0213BN.h. This lib has a LUT for partial update. But here also the same problem with partial update, bad contrast /ghosting.
Then I changed 1 byte (0x1 to 0x4) in the LUT, and that seems to be much better. Are there other ways to solve this problem ?

const uint8_t GxDEPG0213BN::LUTDefault_part[] = {
    0x32, // command
    0x0,    0x40,   0x0,    0x0,    0x0,    0x0,    0x0,    0x0,    0x0,    0x0,    0x0,    0x0,
    0x80,   0x80,   0x0,    0x0,    0x0,    0x0,    0x0,    0x0,    0x0,    0x0,    0x0,    0x0,
    0x40,   0x40,   0x0,    0x0,    0x0,    0x0,    0x0,    0x0,    0x0,    0x0,    0x0,    0x0,
    0x0,    0x80,   0x0,    0x0,    0x0,    0x0,    0x0,    0x0,    0x0,    0x0,    0x0,    0x0,
    0x0,    0x0,    0x0,    0x0,    0x0,    0x0,    0x0,    0x0,    0x0,    0x0,    0x0,    0x0,    //5*12=60 bytes
    0xF,    0x0,    0x0,    0x0,    0x0,    0x0,    0x0,   
    0x4,    0x0,    0x0,    0x0,    0x0,    0x0,    0x0,   //Partial update bad contrast with 0x1, change to 0x4, Jan Heynen !!!!!
    0x0,    0x0,    0x0,    0x0,    0x0,    0x0,    0x0,    
    0x0,    0x0,    0x0,    0x0,    0x0,    0x0,    0x0,    
    0x0,    0x0,    0x0,    0x0,    0x0,    0x0,    0x0,    
    0x0,    0x0,    0x0,    0x0,    0x0,    0x0,    0x0,    
    0x0,    0x0,    0x0,    0x0,    0x0,    0x0,    0x0,    
    0x0,    0x0,    0x0,    0x0,    0x0,    0x0,    0x0,    
    0x0,    0x0,    0x0,    0x0,    0x0,    0x0,    0x1,    
    0x0,    0x0,    0x0,    0x0,    0x0,    0x0,    0x1,    
    0x0,    0x0,    0x0,    0x0,    0x0,    0x0,    0x0,    
    0x0,    0x0,    0x0,    0x0,    0x0,    0x0,    0x0,  //12*7=84 bytes  
    0x22,   0x22,   0x22,   0x22,   0x22,   0x22,   //6 bytes
    0x0,    0x0,    0x0,                            //3 bytes, totaal dus 153 bytes
    // 0x22,   0x17,   0x41,   0x0,    0x32,   0x32
};typ of plak hier code
1 Like

Yes, you could donate a Lilygo T5 2.13 Epaper to me, or persuade TTGO to send me a free sample.
Then I could try to add support for this e-paper display and its panel to the official versions of my libraries.

@rp6conrad, Hi, welcome to the forum!

Did you already read How to get the best out of this forum ?

For the display section, please always post a link to the display in question, for us to know exactly what you have.

If you use a library version different from the official version available through Library Manager, then you should also provide a link.

I assume you really have this panel: GDEM0213B74.

On that site you find the demo examples from Good Display. You may find a waveform table for partial refresh in one of the examples, most likely in the STM32 examples.

Good Luck!

Jean-Marc

1 Like