Waveshare e-paper displays with SPI

Sorry for the bad link. Either my mouse or Windows Edge misbehaves on click-select since recently.

You just uncomment the constructor for your panel in this example, and compile, load and run the example. After that you can create your own application.

Jean-Marc

This does the re-mapping!

Thanks @ZinggJM,

Didn't expect it to be so simple.

My display driver is GDEH029Z13.

Demo is working great and the freezing I battled with for weeks are also gone.

I'm new to E-Paper displays and the demo I just compiled is about 1136 lines long. Is there a step by step guide available that teaches from the most simple hello world text up to more complex structures demonstrated in the demo?

Thanks,

No. The example contains almost all you would look for. It is my test example.
There is a GxEPD2_HelloWorld example, but you would need to add the re-mapping code for the ESP32 Driver Board.

That's a great idea,

How do I include the re-mapping code?

Copy Line 131 to 169 into the GxEPD2_HelloWorld example?

Thanks,

Hello @ZinggJM. I am sure your Library is awesome and i like to use it but i only get a blank display.

What i have testet....

I have opened the example "GxEPD2_Example".
Using this Line: #include "GxEPD2_display_selection.h"
and
in that file i use the following line for this Display.
GxEPD2_BW<GxEPD2_750_T7, MAX_HEIGHT(GxEPD2_750_T7)> display(GxEPD2_750_T7(/CS=10/ SS, /DC=/ 9, /RST=/ 8, /BUSY=/ 7)); // GDEW075T7 800x480

But all leaves blank. Nothing happens.

I get the following Serial Output:

setup
_PowerOn : 8
_Update_Full : 8
_PowerOff : 8
_PowerOn : 8
_Update_Part : 8
_Update_Part : 8
_Update_Part : 8
_Update_Full : 8
_PowerOff : 8
_PowerOn : 8
_Update_Part : 4
_Update_Full : 4
_PowerOff : 8
_PowerOn : 8
_Update_Full : 8
_PowerOff : 8
_PowerOn : 8
_Update_Part : 8
_Update_Part : 16
_Update_Part : 8
_Update_Part : 8
_Update_Part : 8
_Update_Part : 8
_Update_Part : 8
_Update_Part : 8
_Update_Part : 8
_Update_Part : 8
_Update_Part : 8
_Update_Part : 8
_Update_Part : 8
_Update_Part : 8
_Update_Part : 4
_Update_Part : 8
_Update_Part : 8
_Update_Part : 8
_Update_Part : 8
_Update_Part : 8
_Update_Part : 8
_Update_Part : 8
_Update_Part : 8
_Update_Part : 8
_Update_Part : 8
_Update_Part : 8
_Update_Part : 4
_Update_Part : 8
_Update_Part : 8
_Update_Part : 8
_Update_Part : 8
_Update_Part : 8
_Update_Part : 8
_Update_Part : 8
_Update_Part : 8
_Update_Part : 8
_Update_Part : 8
_Update_Part : 8
_Update_Part : 4
_Update_Part : 8
_Update_Part : 8
_Update_Part : 8
_Update_Part : 8
_Update_Part : 8
_Update_Part : 8
_Update_Part : 8
_Update_Part : 4
_Update_Part : 8
_Update_Part : 8
_Update_Part : 4
_Update_Part : 8
_Update_Part : 8
_PowerOff : 8
_PowerOn : 8
_Update_Full : 8
_PowerOff : 8
_PowerOn : 8
_Update_Full : 8
_PowerOff : 8
_PowerOn : 8
_Update_Full : 4
_PowerOff : 8
setup done

I hope you cet help me with a pro-tip to get running my Display.

Many, many thanks in Advance
Sascha

Yes, thanks, some users say so. Welcome to the forum!

Please read How to get the best out of this forum if you haven't done yet.

It looks like you have selected the correct constructor line for your display.
But I can't know for sure, as you have not reported what processor you use.
If you use an Arduino UNO or an other AVR Arduino, you just need to make sure the constructor parameters correspond to your wiring. Note that I use a suggested wiring that is different compared to the Waveshare demo code.
You may need the shortened reset pulse, see README.md, for the Waveshare HAT.

Jean-Marc

Many thank`s for your answere. Sorry, i have forgotten to say i am using an Arduino Uno. Later i will use a Nano.

The Tip to use shortened reset pule was the tip to get it running. Many thanks, you are great.

Have a nice day. Thanks!!

Hello ZinggJM,
Newbie in this forum as well as on e-paper device, I would appreciate your support for my first steps in the e-paper world.

My Project is to build a Display repeater for use on a sailing boat, MEGA2560 pro based.

E-paper technology, low power consumption, High contrast image is of high interest especially under High sunlight conditions.

I bought recently for trials a Waveshare 2.9" V2 e-paper module and made my first steps using the demo code delivered by Waveshare.

Your GxEPD library is looking very attractive and I see it address Waveshare modules.

The Waveshare module I bought is Version 2 of the 2.9 inch, it supports Partial_Display and as per link below low level driver developped by Waveshare to meet with the e-paper controller required being updated and is not compatible with initial version.

https://www.waveshare.com/wiki/2.9inch_e-Paper_Module?spm=a2g0s.imconversation.0.0.3c9c3e5f154LRO&file=2.9inch_e-Paper_Module

Do you think any of the below driver of your lib is compatible with my epd2in9_V2 ?

  • GDEH029A1 2.9" b/w
  • GDEW029T5 2.9" b/w
  • GDEM029T94 2.9" b/w
  • GDEW029Z10 2.9" b/w/r

Is there risk of damages trying it ?

Any luck you tried already this Waveshare unit under your lib ?

According to datasheet, epd2in9_V2 uses driver IC is SSD1680Z8, maybe does it talks to you, for sure not to me.

Thanks a lot for your hints, Cheers

@barsailer, Hi, welcome to the forum!

Your e-paper display is not (yet) supported by GxEPD. Update for next version is indeterminate.

Your e-paper display is supported by GxEPD2, see README.md:

Version 1.3.6

  • added support for Waveshare 2.9" b/w V2, driver class GxEPD2_290_T94_V2
  • Waveshare 2.9" b/w V2 uses a GDEM029T94 variant without partial update wft in OTP
  • driver class GxEPD2_290_T94_V2 uses partial update wft written to registers
  • added NOTE for RST pull-up on ESP8266 with "clever" reset circuit, or alternate pin

Jean-Marc

Thanks so much Jean Marc, This is a good news.

Because I also need to manage incoming data flow from GPS and wind instruments, I'm concerned by RAM memory usage and CPU load required for the ePaper. ( I need only basic draw line and charcaters from 3 differents fonts )

Is the GxEPD2 optimized for RAM and CPU and would you have any specific recommendation for software implementation ?

This looks promising, I'll make trials anyway as soon as possible.
Thanks again.

Ok, I should have mentioned in my first response that I expect clickable links to the devices in question. This spares me the time to go searching. I don't know the MEGA 2560 pro.

GxEPD2 supports paged drawing, and you can specify the space for graphics buffer page.

Arduino MEGA 2560 has 8k RAM, if I remember correctly. No problem with your display.

Jean-Marc

Merci Jean Marc, for your point out.
Sorry for confusion, Mega2560 pro is small footprint PCB version of MEGA2560, nothing different from well known MEGA2560 CPU.

And I confirm GxEPD2 Works perfectly with Waveshare 2.9" b/w V2, Hello world example tried succesfully.

So easy to make working something well designed and documented, Thanks so much for this awesome library.

Pardon my breaking in here. I have a revalent question.

I was under the impression that GxPED2 replaced GxPED. However your response suggests GxPED will/may continue to get updates. I am using GxEPD2 exclusively, it there a situation I might consider GxEPD?

Thanks
John

There may be more examples around for GxEPD, and there are definitely more forks.
Also many users have created tutorials and videos for GxEPD, many more than for GxEPD2, I think.

Jean-Marc

1 Like

Thank you :slight_smile:
I have GxEPD2 working well and I seem to understand enough for my project. I'll stay with GxEPD2
And again thank you for your work and kindness to release it and answer some questions for the forum.

From README.md of GxEPD:

A simple E-Paper display library with common base class and separate IO class for Arduino.

  • For SPI e-paper displays from Dalian Good Display

  • and SPI e-paper boards from Waveshare

  • GxEPD2 is better suited for new users or new projects!

Jean-Marc

When I started my first library for e-paper displays, I used some ideas from my GxTFT library.
See README.md:

GxTFT for Arduino

A New Approach for a General TFT Library.

This library separates the aspects IO connection, controller type and display class into separate C++ classes

  • The purpose of this Library and its design is to make additions easy.
  • The initial commit served as "proof of concept", with HVGA TFT on MEGA, DUE, and 3.5" RPI HVGA on SPI
  • This library supports a collection of TFT displays I bought to learn from and to learn from other libraries
  • It supports some "exotic" displays for Arduino that were not made to use with Arduino IDE or Arduino boards
  • I recommend to use other common Arduino TFT libraries whenever possible, as these are better supported
  • my recommendations are MCUFRIEND_kbv, TFT_eSPI, and the whole range of Adafruit libraries

But this library is somewhat outdated and not well supported, by lack of time.
And the intended replacement GFX_TFT is stuck "under construction".
I think investment of my time for e-paper displays is worth more.

Hello Jean Marc,
I'm very pleased with the application I wrote , thanks to your awesome GxEPD2 library I use it with GDEM029T94 2.9" b/w configuration, you made my life much easier :smiley:

Display fully designed, I'm now dealing with performance and would appreciate getting your expertise in EPD coding optimization .

Like a measurement instrument, my application requires a couples of values to be updated periodically with as high as possible frequency, ideally 1Hz to 2Hz

I chosed the display.setPartialWindow() defining the full screen and I set all my varaibles using display.setCursor() and display.print() before calling display.nextPage()

I got an execution time for the full screen partial refresh (_Update_Part indication) of 733ms, so within the timeout defined in GxEPD2_290_T94_V2.h

If I apply an display.hibernate() as recomended, the Power ON and OFF add 250ms, not very welcome.

According to Waveshare documentation, 2.9" ePaper V2 the FastPartialUpdate is specified @ 0.3s.

Good display also specifies 0,3s https://www.good-display.com/product/360.html.

  • Am i doing something wrong or miss Interpretting specifications ?
  • Is there a way to improve and meet the FastPartialUpdate as stated by Waveshare ?
  • What is the long term physical risk I save 250ms by omiting the hibernate ?
  • is the while (display.nextPage()) code interrupt-able for managing other Hardware resources like UART incoming flows or Button Interface action along navigation through menus ?

I appreciate your support, Thanks so much in advance.

GxEPD2 reports active BUSY times in Serial Monitor diagnostic output.

    static const uint16_t partial_refresh_time = 750; // ms, e.g. 736721us

This is the value I got at room temperature. Value is used if BUSY pin is not used (-1).
I don't know at what temperature Good Display and Waveshare have measured, or if they just put in a value they once determined for some other display.

Yes, by heating the display. Not recommended.
Not available, as the V2 has no (temperature dependent) wavetable in OTP for differential refresh. But you can experiment with the wavetable values instead.

None, if you do full refresh from time to time, else persistent ghosting.

GxEPD2 doesn't disable interrupts. But it does "busy wait" on the BUSY line state.
The design goal and implementation of GxEPD2 (and of GxEPD) conflicts with realtime requirements. There are forks that may have a solution.

Note that e-paper displays in general are not suitable for this kind of application.
Look at the specified number of refreshes, and calculate expected lifetime for your frequent refreshes.

Jean-Marc

Thanks Jean Marc for all pertinent and objective answers.

I'm aware I'm trying to set a slow display technology, but I would have imagine the partial referesh time announced by supplier is easily reproduceable at room temperature without tricking any specific LUT table. ( Not my intention anyhow )

Your remark related to Number of refreshes is very interesting and I must admit I haven't thought about it.

I read Lifetime of 5 years in datasheets which is very low but where did you find out such number ?
I looked on both Global Display and Waveshare specifications and could not find any specified value.

I estimated my application requirements to 2Million Partial Refresh Cycles. ( I did not accounted full Refresh which I understood is needed to avoid Ghost images)

Am I dreaming ?
Do you have background experience of reliabilities issues evidences under comparable use case ?

Very Best Regards

Waveshare e-paper displays with SPI - Using Arduino / Displays - Arduino Forum

I know I have reported result of a long time test (about 1 year) with 1.54" b/w, but I don't find that post.