Waveshare e-paper displays with SPI

@winnie_the_pooh,

welcome to the forum, and thank you for your report!

Waveshare's FAQ states that the display "needs to be updated at least every three months".
Does this mean that the display is damaged forever if it is not updated for years?

I don't know, but I would follow that recommendation.
Good Display recommends to refresh the screen to white, before storing it for a longer time.
This may be more important for 3-color or 7-color displays than for b/w.
I have b/w left with a picture stored for quite some time, that worked normal afterwards.

I assumed that displaying such
images would cause all these little black-white-red balls to rotate and move,
which can restore display's functionality.

Yes, maybe. But as far I know these are uniform colored black and red or yellow particles in a white fluid, the colored particles are bigger than the black ones and move more slowly to the front or back.

Jean-Marc

Version 1.2.16 of library GxEPD2 is available through Library Manager.

  • fix for GDEH0154D67, to work independent of OTP version (ping-pong issue)

Jean-Marc

@ZinggJM

Thanks for the quick response!

It may be from Wemos/LOLIN, or a clone. I have some of these. Should work fine.

Good to know!

You could set Serial Monitor to 74880 baud to see the boot messages of the ESP8266 processor.

I could figure out how to do this (linux)

The picture on the website of the e-paper board doesn't look like the actual version of the Waveshare board.
Please compare the backside of your board with 200x200, 1.54inch E-Ink display module, SPI interface | HINK-E0154A05 WFC0000CZ07. The actual version has the levels converter and the "clever" reset circuit that cause problems.
But it should work with the init() method with short reset pulse.

I just realized the picture on the website is not actual the board I got send.
I have attached an actual picture of the display.
Which of the 1.54inch one is this?

Without RST connected I still get a busytimeout most of the time.
Even if not nothing is shown.
I suspect I bricked it. Should I get a new one from the same dealer?

I've been quiet for ages because once my parts actually arrived, I was able to get them working on my own through research. :slight_smile: So I've had great success. Thank you so much for this library.

Sorry if this has already been answered... I've tried to read this whole thread over time but it's a lot to go through and I might have missed some. I did try searching.

Question is: how do I silence all the debug stuff on the serial console? Now that I've got it working, I'd rather reserve the console for debug message from other parts of my program. Currently the GxEPD library is flooding the serial console with data on every screen write.

sremick:
I've been quiet for ages because once my parts actually arrived, I was able to get them working on my own through research. :slight_smile: So I've had great success. Thank you so much for this library.

Sorry if this has already been answered... I've tried to read this whole thread over time but it's a lot to go through and I might have missed some. I did try searching.

Question is: how do I silence all the debug stuff on the serial console? Now that I've got it working, I'd rather reserve the console for debug message from other parts of my program. Currently the GxEPD library is flooding the serial console with data on every screen write.

    void init(uint32_t serial_diag_bitrate = 0) // = 0 : disabled

GxEPD2_BW.h, line 134.

@thargor,

you have the actual version of the Waveshare board with level converter and the "clever" reset circuit.

So disconnect will not work, but pull-up should help.

If you disconnect RST for a test, you need to connect it to VCC 3.3V. Otherwise the "clever" reset circuit switches off supply to the board and panel.

I am not sure about D4 (GPIO02) concerning strapping. I am too lazy to look this up in the processor specs.
Boot mode issues usually come from D8 (GPIO15). With the level converter on the Waveshare board even a 3.3k pull-down may be too weak.

[color=#426c6d]- [/color]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

README.md, line 18,19.

I would not expect your board to be defective, but you may have one of these issues.

Make sure you have the actual version of GxEPD2, Version 1.2.16.

Jean-Marc

thargor:
...
Which of the 1.54inch one is this?
...

look at the 1.54 color version...

edit: I have the same display.

  • no timeouts with M09 but nothing is displayed

Box of displays says "SKU 12955" ->

Is is the old or new V2 version? I am confused.
https://www.waveshare.com/wiki/1.54inch_e-Paper_Module

This works:

It seems very new.

Hello !

I purchased a 7.5 inch 3 color epaper display at waveshare, aliexpress.
this one.

Because I found on youtube InterlinkKnight 's video , It seems "safe" for me just to purchase excactly same setup, so I won't get bothered with screen code problems....

BUT.......

HUGE PROBLEMS !!

and can't say that waveshare does help much on their Wechat Channel ! Only a very very small amount of scarce help !

Waveshare does provide a code that works, but can't use it. It's not made to print chararcters. Waveshare today just wrote "please check INIT method"

I found a problem, as wrote here, we have to change a line in the library. Problem caused by "clever reset" And it begins to work. needs to use this : init(115200, true,2,false)

And then I found this forum where the line stuff is mentionned.....

But doesn't work long.

I only try to print something using a different font, and finished. Screen not working anymore !

reload the soft as it was before, no way !!

Reload Chinese waveshare soft, and it works ! no hardware problem, then !

But what happens with this adafruit soft ??

I even upgrade to 1.2.16 (was on 1.2.15) and I found it's again needed to change the line, change 20 with 2

No way !

Obviously some trick because the "clever reset stuff" ??

Then I pick up some init components out of the Chinese soft into a new tab into the adafruit sample code and put them after the display.init in adafruit code.

NOT working.

but keeping the stuff on, 10 minutes later the screen did decide to refresh and print something. then stopped....

Any idea ?

 display.init(115200);  // Initiate the display

delay(100);
Init();

...

@47francois,

please post a clickable link to the hardware you use. Display panel, connection module, processor used.

And maybe explain once more, a bit less confusing.

Jean-Marc

And then I will ask you for the constructor line you used, and for diagnostic output (in a code window).

Dear Jean-Marc, hello community!

Thank you so much for creating GxEPD2 and being so helpful on this forum!

Maybe you can help me with the following puzzle:

I bought a Waveshare 7.5" HD e-Paper (B) 880×528 eInk display and a Waveshare ESP32 Driver Board. I ran your example file "GxEPD2_WS_ESP32_Driver" on my board by enabling GxEPD2_750c_Z90. In method "helloArduino()" you use red as text color. However, on my display, the text color is more black-ish. You can see that the text is blinking red-ish slightly and it tries really hard to be become red, but the red color eventually does not stick.

However, if I deploy "examples/esp32-waveshare-epd/examples/epd7in5b_HD-demo" from the Waveshare e-Paper Hat Example Code onto my board. Let it run (it shows colors). And then re-deploy your GxEPD2_WS_ESP32_Driver example, then your text shows up correctly in red. But if I remove power and plug it in again, the text is black-ish again.

Here is what I tried:

  • Using bitmap functionality from "GxEPD2_WiFi_Example" -> same result
  • I tried using the clearScreen(uint8_t black_value, uint8_t color_value) method instead of the clearScreen(uint8_t value) -> same result
  • I changed "static const bool usePartialUpdate" to be false in "GxEPD2_750c_Z90.h"-> same result

Would you have any idea what is going on? I am running the latest version of your library. My setup is pretty straightforward: ESP32 hat and Waveshare display are connected through the cables provided in the box. Running on USB power.

Thank you and best regards
Kevin Steven

I apologize if this has already been addressed.
I'm pretty new to Arduino & displays.

I have an Arduino Uno and I'm hoping to use 3 separate Waveshare 2.9" display modules, controlled by the Uno.
I understand that the GxEPD2 multi display example requires an ESP8266 (or similar) so there is enough RAM to buffer all of the screens.

I want to display a 3 large numbers on each screen (3 variables total). I would like to run a partial update to update the last digit on the screen. After 5-10 updates, I would perform a full update.
I would update display 1, then #2, then #3, and repeat. They will not be updated at the same time.

If I can use the paged drawing on one display, can I use this same idea to do the other 2 screens? Can I use that same RAM buffer so I don't have to use 3 times the RAM for 3 displays?

Can I use one Uno to drive all 3 screens? (and use one RAM buffer)
Is there a more suitable library for such a task? Again, I only need to display numbers on the display.

Sorry if this has already been addressed...

I have a Waveshare V3 2.13" RBW display. After a bit of sleuthing I figured out that this is the GDEW0213Z16 display, which is very different programmatically from previous versions. Looking at the GxEPD2 GitHub readme and source code, it appears that a partial refresh is possible on this display, but it will take 15 seconds. And that a full refresh will also take 15 seconds.

Have I understood all that correctly? Because the full refresh takes quite a bit less than 15 seconds for me.

@kevinsteven,

your information would indicate there is some initialization missing in the driver code of GxEPD2_750c_Z90.cpp.

But I am quite sure it worked correctly with the panel I have. I will verify that again later.
I don't know if I tested my panel with the ESP32 Driver board.

You could provide diagnostic output (from Serial Monitor, in a code window), so I can compare refresh times.

Jean-Marc

@d2468,

If I can use the paged drawing on one display, can I use this same idea to do the other 2 screens?

Yes, you can do that. You would need to reduce the page_height for all three displays to fit in RAM, with GxEPD2.

Can I use that same RAM buffer so I don't have to use 3 times the RAM for 3 displays?

No, not easily with GxEPD2. I don't recommend to do that.

Can I use one Uno to drive all 3 screens? (and use one RAM buffer)

Not recommended, see above.

Is there a more suitable library for such a task?

I don't know. I assume you need Adafruit_GFX for the big font numbers.

Jean-Marc

frankvnz:
Sorry if this has already been addressed...

I have a Waveshare V3 2.13" RBW display. After a bit of sleuthing I figured out that this is the GDEW0213Z16 display, which is very different programmatically from previous versions. Looking at the GxEPD2 GitHub readme and source code, it appears that a partial refresh is possible on this display, but it will take 15 seconds. And that a full refresh will also take 15 seconds.

Have I understood all that correctly? Because the full refresh takes quite a bit less than 15 seconds for me.

Sorry if I don't understand your post.
I need at least to know exactly what display board you have. Please post a clickable link.
Both Waveshare and Good Display specify 15s for full refresh for this display. Partial update is same on 3-color.

SOLUTION FOUND !!!
but I had hard time, must say. Cannot say "thank you" to display manufacturer !!! They do change the specifications without any notice, and no help from waveshare, very very scarce on the number of letters they would send you thru WECHAT.

software problems--------> only caused by the "20" that has to be replaced by "2" inside the GxEPD2_EPD library file here : init(serial_diag_bitrate, true, 2, false);

and then, the screen was printing the red correctly, but the black just like a very (extremely) dim grey.

Was desperate, noticed that before the last refresh the black stuff can be seen, so I was at digging into the library to see if was possible somewhere to modify it, changing the refresh sequence maybe..... :o

Obviously this stuff is not located in this library, was very desperate ....

And I found the reason : it is necessary to switch the HAT on "A" (small screens)

and now.... works very well !!!!

....Hope it will lasts

Hi @ZinggJM

Thank you for looking into my issue. Please find below the serial output of the GxEPD2_WS_ESP32_Driver example.

21:01:04.287 -> setup
21:01:05.645 -> _PowerOn : 82002
21:01:29.398 -> _Update_Full : 23005001
21:01:29.642 -> _PowerOff : 222001
21:01:30.746 -> _PowerOn : 82001
21:01:54.119 -> _Update_Full : 23004000
21:01:54.366 -> _PowerOff : 222001
21:01:55.459 -> _PowerOn : 82001
21:02:18.843 -> _Update_Full : 23008001
21:02:19.084 -> _PowerOff : 222001
21:02:21.160 -> _PowerOn : 82001
21:02:44.568 -> _Update_Full : 23005000
21:02:44.784 -> _PowerOff : 222001
21:02:45.894 -> _PowerOn : 82001
21:03:09.298 -> _Update_Full : 23004001
21:03:09.544 -> _PowerOff : 222001
21:03:10.629 -> _PowerOn : 82001
21:03:34.010 -> _Update_Full : 23002000
21:03:57.045 -> _Update_Part : 23003001
21:04:22.068 -> _Update_Part : 23003000
21:04:47.127 -> _Update_Part : 23004001
21:05:12.185 -> _Update_Part : 23004001
21:05:37.211 -> _Update_Part : 23002001
21:06:02.267 -> _Update_Part : 23002000
21:06:23.856 -> _Update_Part : 19554001
21:06:45.438 -> _Update_Part : 19555001
21:07:07.056 -> _Update_Part : 19554001
21:07:29.021 -> _Update_Part : 19553003
21:07:50.972 -> _Update_Part : 19552000
21:08:12.949 -> _Update_Part : 19551001
21:08:34.911 -> _Update_Part : 19552000
21:08:56.869 -> _Update_Part : 19549001
21:09:18.838 -> _Update_Part : 19549000
21:09:40.804 -> _Update_Part : 19549001
21:10:02.765 -> _Update_Part : 19548001
21:10:24.767 -> _Update_Part : 19550000
21:10:46.734 -> _Update_Part : 19548001
21:11:08.735 -> _Update_Part : 19550000
21:11:30.670 -> _Update_Full : 19550001
21:11:50.254 -> _Update_Part : 19550000
21:12:12.205 -> _Update_Full : 19549001
21:12:12.421 -> _PowerOff : 222001
21:12:13.511 -> _PowerOn : 82001
21:12:33.457 -> _Update_Full : 19550001
21:12:33.705 -> _PowerOff : 222001
21:12:34.789 -> _PowerOn : 82001
21:12:54.735 -> _Update_Full : 19549000
21:12:54.982 -> _PowerOff : 222001
21:12:56.040 -> _PowerOn : 82001
21:13:16.008 -> _Update_Full : 19546001
21:13:16.222 -> _PowerOff : 222001
21:13:17.331 -> _PowerOn : 82001
21:13:37.289 -> _Update_Full : 19546000
21:13:37.503 -> _PowerOff : 222001
21:13:38.591 -> _PowerOn : 82001
21:13:58.564 -> _Update_Full : 19548001
21:13:58.775 -> _PowerOff : 222001
21:13:59.874 -> _PowerOn : 82001
21:14:19.835 -> _Update_Full : 19547999
21:14:20.045 -> _PowerOff : 222001
21:14:21.161 -> _PowerOn : 82001
21:14:41.089 -> _Update_Full : 19548001
21:14:41.326 -> _PowerOff : 222001
21:14:42.436 -> _PowerOn : 82001
21:15:02.372 -> _Update_Full : 19549001
21:15:02.585 -> _PowerOff : 222001
21:15:03.690 -> _PowerOn : 82001
21:15:23.653 -> _Update_Full : 19549000
21:15:23.895 -> _PowerOff : 222001
21:15:24.948 -> _PowerOn : 82001
21:15:44.951 -> _Update_Full : 19547001
21:15:45.195 -> _PowerOff : 222001
21:15:47.277 -> _PowerOn : 82001
21:16:07.232 -> _Update_Full : 19548000
21:16:07.435 -> _PowerOff : 222001
21:16:12.790 -> _PowerOn : 82001
21:16:32.738 -> _Update_Full : 19548001
21:16:32.944 -> _PowerOff : 222001
21:16:38.044 -> _PowerOn : 82001
21:16:58.007 -> _Update_Full : 19548000
21:16:58.229 -> _PowerOff : 222001
21:16:58.229 -> setup done

I also looked into changing the HAT type from B to A. But it made no difference.

Let me know if I can provide you with any more verbose log output.

Thanks!
Kevin

Do you have recommendations for the pins on an ESP32-S2?

The datasheet ( https://www.espressif.com/sites/default/files/documentation/esp32-s2-wrover_esp32-s2-wrover-i_datasheet_en.pdf ) seems to have multiple options - for instance, FSPICS0 is on IO10 and IO34.

@kevinsteven,

your diagnostic output looks ok. You have two different refresh times, which is ok, the ambient temperature may have risen. I am too busy currently, but I will look at the Waveshare code in the next days to compare.

@enkoopa,

you should find out which pins are used by the HW SPI class for the board you compile for.
look for pins_arduino.h of the variant of the ESP32 package.
Usually you would use SS for CS. You can use any pin for CS, but you can't use SS for anything else when you use HW SPI.

Jean-Marc

ZinggJM:
@enkoopa,

you should find out which pins are used by the HW SPI class for the board you compile for.
look for pins_arduino.h of the variant of the ESP32 package.
Usually you would use SS for CS. You can use any pin for CS, but you can't use SS for anything else when you use HW SPI.

Jean-Marc

Pins are at https://github.com/espressif/arduino-esp32/blob/esp32s2/variants/esp32s2/pins_arduino.h#L17-L18
Therefore would you concur

  • SS is IO34
  • CLK IO36
  • DIN ??
  • DC/RST/BUSY can be any GPIO?