Aliexpress 7,5" Epaper with GxEPD2 / ESP32

Hello, I have a 7.5" 800x480 epaper screen from aliexpress and I can't get it to work with GxEPD2 and waveshare driver hat adapter.
aliexpress link


I have very simple code from GxEPD examples.

#include <GxEPD2_3C.h> 

// Overview of Waveshare e-Paper HAT connection to XIAO ESP32C6:
// -------------------------------------------------------------------
// Signal on e-Paper HAT | Pin on XIAO ESP32C6 | GPIO on XIAO ESP32C6
// -------------------------------------------------------------------
// VCC (or 3.3V, VIN)    | 3V3                 | -
// GND                     | GND                 | -
// DIN (or MOSI)         | D10                 | GPIO18 (SDIO_CMD)
// CLK (or SCK)          | D8                  | GPIO19 (SDIO_CLK)
// CS (Chip Select)        | D0                  | GPIO0  (LP_GPIO0)
// DC (Data/Command)       | D1                  | GPIO1  (LP_GPIO1)
// RST (Reset)             | D2                  | GPIO2  (LP_GPIO2)
// BUSY                    | D4                  | GPIO22 (SDA / SDIO_DATA2)
// -------------------------------------------------------------------

GxEPD2_3C < GxEPD2_750c_Z08, GxEPD2_750c_Z08::HEIGHT / 4 > display(GxEPD2_750c_Z08(/*CS=D0*/ 0, /*DC=D1*/ 1, /*RST=D2*/ 2, /*BUSY=D4*/ 22)); // GDEW075Z08 800x480, GD7965

void setup()
{
  //display.init(115200); // default 10ms reset pulse, e.g. for bare panels with DESPI-C02
  display.init(115200, true, 2, false); // USE THIS for Waveshare boards with "clever" reset circuit, 2ms reset pulse
  // comment out next line to have no or minimal Adafruit_GFX code
  display.setTextColor(GxEPD_BLACK);
  display.firstPage();
  do
  {
    display.fillScreen(GxEPD_WHITE);
    // comment out next line to have no or minimal Adafruit_GFX code
    display.print("Hello World!");
  }
  while (display.nextPage());
}

void loop() {};

This is what I have from serial monitor:

ESP-ROM:esp32c6-20220919

_PowerOn : 6

_Update_Full : 2

_PowerOff : 2

But nothing more. The display is not responding. Busy pin is high. Voltage is 5v stable. PWR pin is high too.
Does anyone have experience with a similar display? or what would you advise me?

I have ESP XIAO C6.

If you read the pinned post re 'How to get the most from the forum', you will learn about how to post code.
After you read that, look very carefully at the cables and where they make contact with the clamps. Note the numbers on the cables and/or the cable clamps, it looks like at least one is wrong.

1 Like

I edited the original post, I apologize. I also added detailed wiring diagrams commented in the code.

I have it connected to 5V now because on 3v3 it gives busy timeout. But the adapter should handle it according to the specifications. 3V probably can't deliver that much current and that's why it doesn't work, I don't know.

I have now triple-checked all the connections again and everything is fine.



@suke001 I found all the parts on Waveshare and it looks like you got it cabled right. Can you eliminate the one board and cable and connect the screen directly to the driver board? Also make sure those cables are FULLY seated, mine make a distinct click when they are inserted correctly.

Sorry, I loaded the library and the Hello World example looks very different. My very brief look at both your code and the 3 examples I looked at indicate a lot of decisions and wiring choices have to be made.
I also don't see XIAO support, now that isn't normally a big deal, but this hardware seems to be ultra sensitive to what it is connected to.
I would get the display working with one of the example sketches before attempting to use a XIAO.

There is even references to forum articles in the example source code. You may want to check that out.
[// Waveshare e-paper displays with SPI: Waveshare e-paper displays with SPI - Displays - Arduino Forum](https:// Waveshare e-paper displays with SPI: Waveshare e-paper displays with SPI - Displays - Arduino Forum)

I just ordered one myself. Great little display.

1 Like

Yes I tried connecting the display directly to the hat without an extension.

I used minimum example from GxEPD github:

code github

I'm at a dead end. I have some Dfrobot firebeetle 2 esp32 units on the way so I'll try that unit.
If that doesn't work, I'll just buy original Good Display epaper and Despi adapter.Then I'll find out what's wrong.

Thanks for the responses

Do NOT use Github, it looks out of date. Here is the minimum example from the Arduino Library Examples. Now we have to wonder if the official library is different from what you are using. At the end are screen shots of what found NO github.

// GxEPD_MinimumExample by Jean-Marc Zingg

#include <GxEPD.h>

// select the display class to use, only one, copy from GxEPD_Example
#include <GxGDEH0154D67/GxGDEH0154D67.h>  // 1.54" b/w

#include <GxIO/GxIO_SPI/GxIO_SPI.h>
#include <GxIO/GxIO.h>

// constructor for AVR Arduino, copy from GxEPD_Example else
GxIO_Class io(SPI, /*CS=*/ SS, /*DC=*/ 8, /*RST=*/ 9); // arbitrary selection of 8, 9 selected for default of GxEPD_Class
GxEPD_Class display(io, /*RST=*/ 9, /*BUSY=*/ 7); // default selection of (9), 7

void setup()
{
  display.init();
  display.eraseDisplay();
  // comment out next line to have no or minimal Adafruit_GFX code
  display.drawPaged(drawHelloWorld); // version for AVR using paged drawing, works also on other processors
}

void drawHelloWorld()
{
  display.setTextColor(GxEPD_BLACK);
  display.print("Hello World!");
}

void loop() {};


and examples

This is GxEPD I am using GxEPD2. That's why the code is different.

The author of the library is trying to help me, but it probably won't get me anywhere.
If I use 3V3 then i got Busy timeout errors and 0V on busy pin.

github discussion

Which example. NOTE I did NOT use github, this is in the Library Manager.


Make sure to read the commets in the examples and make the changes they demand.
There are a total of 6 files in the example see below.
Screenshot 2025-05-16 at 09.41.08

Since you are working directly with the code author I am muting this convo. You might try READING.

So I bought a new display, hink e075a07. I connected it to a new esp32 Firebeetle2 C6. And it doesn't work for me again, as much as I love e-paper displays...I also bought DESPI C02 and it doesn't work either..
Please can someone give me some advice? I'm really clueless. The display does nothing.

serial monitor:

ESP-ROM:esp32c6-20220919

Setup starting (FireBeetle C6 - 3C Quarter Paged Mode)...
Display initialized.
_Update_Full : 2
Hello World displayed function called.
Setup done, display hibernating.

// PWR  <--> 3V3   (Power 3.3V)
// VCC  <--> 3V3   (Power 3.3V)
// GND  <--> GND   (Ground)
// DIN  <--> GPIO 22 (SPI MOSI)
// CLK  <--> GPIO 23 (SPI SCK)
// CS   <--> GPIO 7  (SPI Chip Select)
// DC   <--> GPIO 18 (Data/Command Select)
// RST  <--> GPIO 9  (Reset)
// BUSY <--> GPIO 1  (Busy Signal)


#include <Arduino.h>
#include <GxEPD2_BW.h> // Needed for base types
#include <GxEPD2_3C.h> // Using GxEPD2_3C.h for 3-color
#include <Fonts/FreeMonoBold9pt7b.h>


GxEPD2_3C<GxEPD2_750c_Z90, GxEPD2_750c_Z90::HEIGHT / 4> display(GxEPD2_750c_Z90(/*CS=*/ 7, /*DC=*/ 18, /*RST=*/ 9, /*BUSY=*/ 1));


void setup()
{
    // Initialize Serial Monitor for debugging
    Serial.begin(115200);
    Serial.println();
    Serial.println("Setup starting (FireBeetle C6 - 3C Quarter Paged Mode)...");

    display.init(115200, true, 2, false); 
   
    Serial.println("Display initialized.");

    // Display "Hello World"
    helloWorld();
    Serial.println("Hello World displayed function called.");

    // Put display to sleep
    display.hibernate();
    Serial.println("Setup done, display hibernating.");
}

const char BlackText[] = "This is black.";
const char RedText[]   = "This is red.";

void helloWorld()
{
    // Set rotation (1 = Landscape)
    display.setRotation(1); 
    // Set font
    display.setFont(&FreeMonoBold9pt7b);

    int16_t tbx, tby; uint16_t tbw, tbh;

    // Calculate position for centering (using black text as reference)
    display.getTextBounds(BlackText, 0, 0, &tbx, &tby, &tbw, &tbh);
    uint16_t x = ((display.width() - tbw) / 2) - tbx;
    uint16_t y = ((display.height() - tbh) / 2) - tby; // Center

    // Set full window and start drawing
    display.setFullWindow();
    display.firstPage();
    do
    {
        // Background white
        display.fillScreen(GxEPD_WHITE);

        // Black text
        display.setTextColor(GxEPD_BLACK);
        display.setCursor(x, y - 10);
        display.print(BlackText);

        // Red text
        display.setTextColor(GxEPD_RED);
        display.setCursor(x, y + 10);
        display.print(RedText);

    } while (display.nextPage()); // Finish drawing and send to display
}

void loop() 
{
    // Empty loop - e-paper is usually not updated constantly.
};