Waveshare E-Paper Display HAT not working with ESP32 Dev Kit C V2

I'm stuck while setting up my Waveshare 7.5 Inch E-Paper Display HAT Module V2 to work with my ESP32 Dev Kit C V2 from AZ-Delivery.
I already followed multiple tutorials but could not get a single Pixel to show up.
The images show my setup and cabling.
Basically, I have the following questions:

  • Is there anything I could do wrong (not connecting the display properly?)
    And how may I validate that the connection is correct?
  • Which setting should I choose on the HAT Module?
    I can choose between 3-line SPI and 4-line SPI (currently)
    and between 3R and 0.47R (currently)
  • Within the Code example on the Waveshare website the code get's stuck in epd.Init()
    How can I debug this further to see what is causing the issue?

I also tested the GxEPD2 library, of course. Unfortunately, this had no success either.
Here's the demo code from Waveshare, that I used:

#include <SPI.h>
#include "epd7in5b.h"
#include "imagedata.h"

void setup() {
    Serial.begin(9600);
    Epd epd;
    if (epd.Init() != 0) { // get's stuck here
        Serial.print("e-Paper init failed");
        return;
    }
    //epd.Clean();
    epd.DisplayOneQuarterFrame(IMAGE_DATA);
}

void loop() {
}

I'm pretty sure, it's some stupid mistake that I can not resolve myself.
So I'm glad about every support.


My wiring looks like this: https://raw.githubusercontent.com/G6EJD/ESP32-e-Paper-Weather-Display/master/Schematic.JPG

Thank you!

@tobnactobi, Hi, welcome to the forum!

Congratulation for providing this much information with your first post.
For further posts in the Displays section, I suggest you provide clickable links to the devices in question, e.g. 800×480, 7.5inch E-Ink display HAT for Raspberry Pi SKU: 13504.

I assume the code you refer to is from Arduino/epd7in5_V2.

4-line SPI and 0.47R are correct. (3-line SPI is hard to use. Consult panel specs for RESE value.)
I use to add Serial.print() statements to pinpoint were a program gets stuck, when I am desperate.

Your picture shows a newer panel than the one shown on the Waveshare page.
It seems to have the same inking as my GDEY075T7 I am working on just now.
It almost works with the same driver as for GDEW075T7, with some distortions.

The wiring used by G6EJD for ESP32 is the same I suggest for GxEPD2, which comes to no surprise.

Maybe you just need to adapt Arduino/epd7in5_V2/epdif.h to your wiring.

// Pin definition
#define RST_PIN         8
#define DC_PIN          9
#define CS_PIN          10
#define BUSY_PIN        7

is the Waveshare wiring for Arduino UNO.

Jean-Marc

1 Like

Thank's for your quick help! @ZinggJM

I suggest you provide clickable links to the devices in question

I had a lot of links (and fun!), but unfortunately I'm not allowed to include more than 2 in my first post.

Your picture shows a newer panel than the one shown on the Waveshare page.

I bought it from Waveshare (via Amazon) and it has the "V2" Sticker on the back.
Therefore I used this waveshare Manual.

Maybe you just need to adapt [...] to your wiring

I already did that, but forgot to mention:

// Pin definition
#define RST_PIN         16
#define DC_PIN          17
#define CS_PIN          5
#define BUSY_PIN        4

Still does not seem to work.
I also tried it with your library and suggested wiring. Also no change on the display.
As long as the simplest (Waveshare) demo does not seem to work, I'm afraid of testing further libraries.

I use to add Serial.print() statements to pinpoint were a program gets stuck, when I am desperate.

But I would need them within the used libraries, don't i?

Is there anything else that I might not do correctly?
I checked the PH2.0 and Display Connectors multiple times. A very small LED indicating "power" would help a lot in that scenario.

E-Paper-Driver-HAT-Schematic2.pdf

On the schematics you can see that the VCC_int pin of the 6-pin connector goes through a
MOS FET to an LDO. If 3.3V is connected to VCC_int, the 3V3_out may be too low for the e-paper controller to get ready. And the "clever" reset circuit, driving the MOS FET may worsen things.

You could connect 5V to VCC_int, but then you need a series resistor on the BUSY line, e.g. 10k, to protect the ESP32.

And / or you could add a pull-up resistor on RST, 4k7 ... 10k.

I don't have this actual HAT, so I can't try.

Yes, you would. But you would only find out that is waiting indefinitely for BUSY to become inactive.

1 Like

Ok, so far as I understand, the voltage seems to be too low to activate the BUSY line.
I measured the voltages and as expected the BUSY line is always LOW.
However, the RST seems to have about 3.3V constantly.

I shorted the BUSY line a few times and the code runs to "Image ready!" here:

void setup() {
  pinMode(4, INPUT);
  // put your setup code here, to run once:
    Serial.begin(115200);
    Epd epd;
    Serial.print("initializing...");
    if (epd.Init() != 0) {
        Serial.print("e-Paper init failed");
        return;
    }
    Serial.print("running!");
    //epd.Clean();
    epd.DisplayOneQuarterFrame(IMAGE_DATA);
    Serial.print("Image ready!");
}

But it still does not show any image (since the BUSY line was not truly HIGH, I suppose)
I need to get some resistors and will try to run it like you said.

I can take the 5V from the ESPs dedicated PIN, right?

Yes, you can take it from the ESP32 5V pin. It is from USB 5V, through a diode, I think.
The e-paper controller (UC8179) generates and checks the panel driving voltages from its 3.3V supply. On the big e-paper displays it may not reach the required driving voltage, if the 3.3V supply is too low or weak. This might also be caused by a weak LDO on the processor board, or a low or weak USB supply. You can also try to connect to a USB 3 connector on your PC or notebook.

1 Like

A Breadboard and a few jumper cables later:
I wired everything like you suggested (image) with a 10K or 4.7K resistor for BUSY, but had no success.

So it's either the USB supply which is too weak ( I already tried to power it with a power bank and other USB ports) or I'm missing something absolutely fundamental.

I can only try to put a serial resistor on RST as you suggested.

Thank you for your help, @ZinggJM

Ok, then I suggest you try with GxEPD2, and report diagnostic output from Serial Monitor.
In GxEPD2_display_selection_new_style.h of GxEPD2_Example select (uncomment) this line:

//#define GxEPD2_DRIVER_CLASS GxEPD2_750_T7  // GDEW075T7   800x480, EK79655 (GD7965)

as the correct driver is not yet checked-in:

//#define GxEPD2_DRIVER_CLASS GxEPD2_750_YT7  // GDEY075T7  800x480, UC8179 (GD7965)

available soon.

You could also measure and report some of the supply voltages.

Added:

In GxEPD2_Example.ino you need to uncomment line 120:

  display.init(115200, true, 2, false); // USE THIS for Waveshare boards with "clever" reset circuit, 2ms reset pulse

And for the Waveshare example it might help if you also shorten the reset pulse to 2ms in epd7in5_V2.cpp line 223.

1 Like

In GxEPD2_Example.ino you need to uncomment line 120:

  display.init(115200, true, 2, false); // USE THIS for Waveshare boards with "clever" reset circuit, 2ms reset pulse

And for the Waveshare example it might help if you also shorten the reset pulse to 2ms in epd7in5_V2.cpp line 223.

this did it for me.
Now it works without any resistors and with the initially suggested wiring.

Thank you so much, I'm in tears :,)

Is there a list of boards that should enable this setting?
Otherwise we might add it here

Thank you for the feedback!

Do you mean Waveshare boards that have the "clever" reset circuit?
I think all e-paper boards and e-paper connection boards now have it, except the ESP8266 and ESP32 E-Paper Driver boards.

I should have immediately thought of this, as other users had the same issue, but I was distracted by my current work.

Jean-Marc

1 Like

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.