static const uint8_t SS = 34;
static const uint8_t MOSI = 35;
static const uint8_t MISO = 37;
static const uint8_t SCK = 36;
- DIN ??
- DC/RST/BUSY can be any GPIO?
DIN from MOSI (Master Out Slave IN)
Yes, any available pin.
static const uint8_t SS = 34;
static const uint8_t MOSI = 35;
static const uint8_t MISO = 37;
static const uint8_t SCK = 36;
- DIN ??
- DC/RST/BUSY can be any GPIO?
DIN from MOSI (Master Out Slave IN)
Yes, any available pin.
Version 1.3.0 of library GxEPD2 is available through Library Manager.
Jean-Marc
I checked the GDEH075Z90 880x528 3-color panel again with DESPI-C02 on ESP8266 and ESP32, and with the Waveshare ESP32 Driver board. All results looked ok with correct red color.
I compared the Waveshare driver code as e.g. in epd7in5b_HD.cpp with the Good Display demo code and the driver code of GxEPD2 in GxEPD2_750c_Z90.cpp.
I see no difference that could explain your issue.
Both Waveshare and Good Display use Data Entry Mode 0x01, y-decrement, instead of 0x03, y-increment.
Waveshare uses then reversed Gate driving sequence to undo the resulting vertical flip.
(there was a controller used on 2.31" b/w where y-increment didn't work, maybe that's why Good Display continued to use y-decrement. AFAIK Chinese don't read bottom up in general).
The driver code uses waveform tables from controller OTP. The VCOM value is also part of the temperature dependent waveform tables, and should be matched to the panel.
I see no command to set a different VCOM value in the Waveshare code, so this shouldn't be the reason.
But you can try to set VCOM in GxEPD2_750c_Z90.cpp by adding this at line 398:
_writeCommand(0x2C); // Write VCOM register
_writeData(0x28); // -1.0V
for encoding of different values see controller or panel specs.
There is a related post here.
Jean-Marc
Hi @ZinggJM
Thanks for your latest findings. I tried out the command to change the volage, but it only made things worse (the second redraw of the picture only completed partially). And you are right, my issue seems to be related to the one from Lukas. Sorry I missed that.
But, I was able to get proper colors by using a workaround: I added the display init code from the epd7in5b_HD-demo as a first thing in the setup() routine. I am not really sure why this helps, but could it be related to me sometimes unplugging the display while it is still refreshing (is that bad?) and maybe the example code from waveshare does a bit more cleanup..?
Anyway, here is what I did to your code..., the "DEV_Config.h" and "EPD.h" and the code marked as "hack" below are from "examples/esp32-waveshare-epd/examples/epd7in5b_HD-demo" coming from the Waveshare e-Paper Hat Example Code.
#define GxEPD2_DISPLAY_CLASS GxEPD2_3C
#define GxEPD2_DRIVER_CLASS GxEPD2_750c_Z90 // GDEH075Z90 880x528
#include "DEV_Config.h"
#include "EPD.h"
void setup()
{
Serial.begin(115200);
Serial.println();
Serial.println("setup");
// hack start
Serial.println("Doing the hack");
DEV_Module_Init();
printf("EPD_7IN5B_HD_test Demo\r\n");
printf("e-Paper Init and Clear...\r\n");
EPD_7IN5B_HD_Init();
//EPD_7IN5B_HD_Clear(); // found this to be optional
delay(1000);
// hack done
display.init(115200); // uses standard SPI pins, e.g. SCK(18), MISO(19), MOSI(23), SS(5)
Best regards
Kevin
I just lost the detailed post of my answer by one of these dreadful forum failures.
You now know where the init code is in Waveshare code and GxEPD2 driver code.
You can use your workaround or experiment with including/changing code in GxEPD2.
Unless no other users report this issue, we leave it as is, else I would need the actual panel donated.
Jean-Marc
EPD_7IN5B_HD_SendCommand(0x46); // Auto Write RAM
EPD_7IN5B_HD_SendData(0xF7);
EPD_7IN5B_HD_ReadBusy(); //waiting for the electronic paper IC to release the idle signal
EPD_7IN5B_HD_SendCommand(0x47); // Auto Write RAM
EPD_7IN5B_HD_SendData(0xF7);
EPD_7IN5B_HD_ReadBusy(); //waiting for the electronic paper IC to release the idle signal
EPD_7IN5B_HD_SendCommand(0x01); // Set MUX as 527
EPD_7IN5B_HD_SendData(0xAF);
EPD_7IN5B_HD_SendData(0x02);
EPD_7IN5B_HD_SendData(0x01);
0x02AF is not 527.
Using a different number of gates to scan will result in a different waveform. Maybe the waveform in OTP of the new panels is for a different panel, and this change corrects the timing. Your reported refresh times are slightly different than mine.
Hello Again !
Now i'm looking for using partial refresh on my waveshare 7.5 3 color display.
Really don't find the solution. Looks like it doesn't want to work.
this is the line used at the screen selection :
GxEPD2_3C<GxEPD2_750c_Z08, MAX_HEIGHT_3C(GxEPD2_750c_Z08)> display(GxEPD2_750c_Z08(/*CS=10*/ SS, /*DC=*/ 8, /*RST=*/ 9, /*BUSY=*/ 7)); // GDEW075Z08 800x480
I really don't see where we can find your library commands description (or adafruit GFX) Obliged to try.
Your sample GxEPD2_not Paged_example shows errors, so I simply transfered some blocks at the actual
Display_ePaper_7.5_BWR_with_GxEPD2 that I use and that's working but in paged mode.
That I need is be able to change only some part of text on my screen, and not to do the terrible whole flashing. Or do it sometimes but not as often as change a line content.
to obtain not paged use, it seems to me that we have to use
display.setFullWindow();
and then
write or draw something
and then
display.display(false); ??
or
display.setFullWindow(); ??
for the moment I get all kind of unpredictable results. Also maybe my screen doesn't support partial update ? it is writtend on your document " does not support differencial update" ??
I've clearly seen at some the unpredictable stuff your library + my modifications were doing on my screen, that the screen is totally able to wipe something and replace with another, without doing the "big flashing shit"...
but maybe we just can't control it ??
Any hint of help welcome !!!
Thank you..
my screen is this one : https://fr.aliexpress.com/item/32832744705.html?spm=a2g0s.9042311.0.0.27426c37h3JA8U
If you want to complain about documentation, read README.md about documentation, and don't expect further help from me.
No 3-color e-paper display can do differential refresh, flicker free fast partial update. Update of partial window is possible, but with full refresh.
47francois:
Hello Again !Now i'm looking for using partial refresh on my waveshare 7.5 3 color display.
Really don't find the solution. Looks like it doesn't want to work.this is the line used at the screen selection :
GxEPD2_3C<GxEPD2_750c_Z08, MAX_HEIGHT_3C(GxEPD2_750c_Z08)> display(GxEPD2_750c_Z08(/*CS=10*/ SS, /*DC=*/ 8, /*RST=*/ 9, /*BUSY=*/ 7)); // GDEW075Z08 800x480I really don't see where we can find your library commands description (or adafruit GFX) Obliged to try.
Your sample GxEPD2_not Paged_example shows errors, so I simply transfered some blocks at the actual
Display_ePaper_7.5_BWR_with_GxEPD2 that I use and that's working but in paged mode.That I need is be able to change only some part of text on my screen, and not to do the terrible whole flashing. Or do it sometimes but not as often as change a line content.
to obtain not paged use, it seems to me that we have to use
display.setFullWindow();
and then
write or draw something
and thendisplay.display(false); ??
or
display.setFullWindow(); ??
for the moment I get all kind of unpredictable results. Also maybe my screen doesn't support partial update ? it is writtend on your document " does not support differencial update" ??
I've clearly seen at some the unpredictable stuff your library + my modifications were doing on my screen, that the screen is totally able to wipe something and replace with another, without doing the "big flashing shit"...
but maybe we just can't control it ??
Any hint of help welcome !!!
Thank you..
my screen is this one : https://fr.aliexpress.com/item/32832744705.html?spm=a2g0s.9042311.0.0.27426c37h3JA8U
Quote for record. "Abschreckendes Beispiel". Not recommended way to expect help from me.
Mr. Dear Jean-Marc,
thank you very much again for the GxEPD2 library I use
a long time! According to that, I also followed which ePaper to buy!
Here is my ePaper collection in a few years ... ![]()

For Christmas, I bought an ePaper 6.0 800x600 with an IT8951 controller

I bought an ePaper (kindle) 9.7 1200x825
https://www.aliexpress.com/item/32840668114.html
I know you don't support him !!
I connected it to the IT8951 controller and used the GxEPD2 Library
and was a partial success, I displayed a picture or tex but only on part of the screen but 2x it's a bug and stripes on the right!
@jzvolanek, Hi Josef,
what an impressive collection! respect!
Sometime I will find time and a big board or picture frame and canvas to mount my e-paper displays on.
(And a second board for my neglected TFT displays.)
eWaper from Waveshare and IT8951 controller needs to be paired?
Can't combine the** IT8951**a controller with different Waveshare ePaper?
Yes, they need be paired, best bought together. The IT8951 board comes programmed or parameterized.
And there are 2 different versions with different number of FPC pins.
Jean-Marc
Hi Jean-Marc,
thank you for the quick reply!
You mean if I buy Waveshare 9.7 + eHAT T8951
so there's any chance I'm breaking up with your GxEPD2 library ?
Thank you very much and have a nice evening!
Josef
Hi Josef,
most likely it is enough to copy and edit the driver class GxEPD2_it60_1448x1072 for the dimension of your 9.7" display. And add a constructor line to the example with a suitable page_height to fit the graphics buffer to processor RAM.
Maybe you would also need to look at the Waveshare demo for any initialization changes, but as the IT8951 board comes parameterized maybe there is no need.
Jean-Marc
Hi Jean-Marc,
thank you for the quick reply.
I really appreciate it, thank you!
Maybe it should be enough to add then
in my code:
#define SCREEN_WIDTH 1200 // Landscape mode setting
#define SCREEN_HEIGHT 825
Josef
See GxEPD2_it60_1448x1072.h
class GxEPD2_it60_1448x1072 : public GxEPD2_EPD
{
public:
// attributes
static const uint16_t WIDTH = 1448;
static const uint16_t HEIGHT = 1072;
static const GxEPD2::Panel panel = GxEPD2::ED060KC1;
You would need to decide if you change the existing class or create a new one with an appropriate name.
Very pleasantly surprised, I will use it with waveshare e-paper.
Hi,
I want to use an waveshare ePaper Display 2.9in (b/w) via SPI to show the live data of a sensor. I want to use die GxEPD2-Library. It´s connected correctly, the example works (Hello world).
That´s my displays wiring: GxEPD2_290 (/CS=10/ SS, /DC=/ 8, /RST=/ 9, /BUSY=/ 7)
Where do I find informations about what each task does and do I have to include more libraries (like u8glib or something else)?
Thanks for the feedback!
It would be great if anyone has a sample code for my project that clarifies what is being done where?
I want to set up everything in the setup() area and then display the current values of the sensor in the loop() on each program run.
Thanks again.
flori_2121:
Hi,I want to use an waveshare ePaper Display 2.9in (b/w) via SPI to show the live data of a sensor. I want to use die GxEPD2-Library. It´s connected correctly, the example works (Hello world).
That´s my displays wiring: GxEPD2_290 (/CS=10/ SS, /DC=/ 8, /RST=/ 9, /BUSY=/ 7)Where do I find informations about what each task does and do I have to include more libraries (like u8glib or something else)?
Thanks for the feedback!
It would be great if anyone has a sample code for my project that clarifies what is being done where?
I want to set up everything in the setup() area and then display the current values of the sensor in the loop() on each program run.Thanks again.
I want to use an waveshare ePaper Display 2.9in (b/w) via SPI to show the live data of a sensor.
Good to know your goal. This is a good start.
I want to use die GxEPD2-Library.
Welcome, you are allowed to do that!
It´s connected correctly, the example works (Hello world).
Congratulations.
That´s my displays wiring: GxEPD2_290 (/CS=10/ SS, /DC=/ 8, /RST=/ 9, /BUSY=/ 7)
Aha. Most likely you use an AVR Arduino. But you could provide more details.
Where do I find informations about what each task does and do I have to include more libraries (like u8glib or something else)?
You don't need anything else. Adafuit_GFX is included by GxEPD2. It needs be installed.
It would be great if anyone has a sample code for my project that clarifies what is being done where?
Search for weather-stations for e-paper displays. The world is full of these. e.g. ESP32-e-Paper-Weather-Display
You don't seem to want to take a look at GxEPD2_Example.ino.
I want to set up everything in the setup() area and then display the current values of the sensor in the loop() on each program run.
You may do that. It's the usual way to do.
Thanks for your answer!
I tried using the GxEPD library today to get the code to work, but immediately got an error message " Error compiling for Arduino Nano board."
#include <GxEPD.h>
#include <GxFont_GFX.h>
#include <GxGDEH029A1/GxGDEH029A1.cpp> // 2.9" b/w
#include <GxIO/GxIO_SPI/GxIO_SPI.cpp>
#include <GxIO/GxIO.cpp>
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
#include <SPI.h>
void setup() {}
void loop() { }
So my question: Is any library not embedded properly or where is the problem? The wiring of the microcontroller is correct, can it also be due to the new waveshare display used that it is not addressed (GxGDEH029A1 in GxEPD vs. GDEH029A1 in GxEPD2)?
Are there differences between the two libraries within the coding of the commands?
Mr. Dear Jean-Marc
【New Release】4.01inch e-Paper HAT (F) , 640×400 Pixels, ACeP 7-Color, SPI Interface
Dear Jean-Marc,
Is it really necessary with GxEPD2 to do the display commands with the construction do .... while, or are there also other ways that the display reacts?
In all examples of the GxEPD library that I have seen this was not done or was not necessary.
Thanks for your feedback.