Good Display ePaper for Arduino

@ZinggJM

Thank you for the reply. Yes samd21 and yes I noticed the partial update limitation of my screen hence I am moving away from the partial update as it has no benefit.

My goal is simple: I have a background image with icons and I want to put next to them values from sensors like temperature / moisture level etc.

As for the GxEPD I feel a bit out of my depth if you could point me at some good reference about it. You might be confused because I have no idea what I am doing :). Is there like a slack channel or some other forum so far I found that even the screen manufacturer refers to this thread

This is where I got confused, I wanted to write to the buffer the image, modify some pages of that image and the update/refresh the screen with the content of the buffer... it clearly didn’t work with my code...

The in ram drawing should hopefully do the trick so I will check it out now.

I would suggest you draw the bitmap to the drawing buffer with the Adafruit_GFX drawBitmap method, like in the example.
You can then clear the rectangle where you want to draw your text. And draw the text.
You can then either update() the full screen, or updateWindow() the rectangle.
You need to update() the full screen from time to time, to avoid fading.

Seems not clear enough for you. Look at file Adafruit_GFX.h to find the bitmap drawing methods. These draw to the drawing buffer of GxEPD. Then you have the background in the drawing buffer, instead of the controller buffer. And available for every update().

ZinggJM:
Seems not clear enough for you. Look at file Adafruit_GFX.h to find the bitmap drawing methods. These draw to the drawing buffer of GxEPD. Then you have the background in the drawing buffer, instead of the controller buffer. And available for every update().

Hey ZinggJM thanks for the help... got it to do what I wanted, awesome job with the library by the way!

  // Draw background image to the buffer
  display.drawBitmap(blackBacground,0,0,104,212,GxEPD_WHITE,0);
  display.setRotation(3);
  //set font properties
  display.setTextColor(GxEPD_RED);
  display.setFont(&FreeMonoBold9pt7b);
  //set position of the stex on screen
  display.setCursor(x,y);
  //write some text
  display.println("some text");
  // send buffer to screen
  display.update();

Thank you for the library GxEPD2.

Currently, I'm using Waveshare e-Paper ESP8266 Driver Board and 1.54 B/W e-paper.
The words and images do shows, but there are alway a mess on the screen after flash.

The e-paper is V2 version, updated by waveshare recently.
http://waveshare.net/wiki/E-Paper_ESP8266_Driver_Board
http://waveshare.net/wiki/E-Paper_ESP8266_Driver_Board

So grateful if you could offer some help.

MTools:
Thank you for the library GxEPD2.

Currently, I'm using Waveshare e-Paper ESP8266 Driver Board and 1.54 B/W e-paper.
The words and images do shows, but there are alway a mess on the screen after flash.

The e-paper is V2 version, updated by waveshare recently.
E-Paper ESP8266 Driver Board - Waveshare Wiki
E-Paper ESP8266 Driver Board - Waveshare Wiki

So grateful if you could offer some help.

I don't understand your post.

but there are alway a mess on the screen after flash.

What do you mean by this? I have no such "mess" after program upload.

The e-paper is V2 version, updated by waveshare recently.

I don't know about V2 version. Please post a link.

E-Paper ESP8266 Driver Board - Waveshare Wiki

Please use waveshare.com and use URL tags, so users can click and get the English web-page:

When I power up the processor board with the attached 1.54" b/w e-paper, I see the "mess" also for a short moment. This is because the controller memory contains random data, also in the "previous data" buffer. The controller doesn't seem to have a command to write to the "old data" buffer, therefore this can't be avoided with the waveform table used.

Jean-Marc

@ZinggJM Firstly, thank you for this great library. It is immensely helpful!

I think there is a bug in the GxEPD2_213_B72 and GxEPD2_213_B73 definitions. You have them as being 250x128 pixels. But according to GoodDisplay (and my testing with the B73) they are actually 250x122 pixels.

References:

gchart:
@ZinggJM Firstly, thank you for this great library. It is immensely helpful!

I think there is a bug in the GxEPD2_213_B72 and GxEPD2_213_B73 definitions. You have them as being 250x128 pixels. But according to GoodDisplay (and my testing with the B73) they are actually 250x122 pixels.

References:
e-paper display module,partial refresh,e-ink display,e-ink screen,2.13 inch e-paper display mod
2.13 inch,e-paper,display module,partial refresh,e-ink screen,2.13 inch e-paper display module

You are correct. But this is not a bug, it is a design decision. The width in the controller buffer is 128, which is a multiple of 8, but only 122 pixels are visible. Width of 128 is easier to handle.

GDE0213B1 is handled with width of 122 in the library GxEPD.

Jean-Marc

Ahh, ok. I'll just make sure to be careful with positioning and the usage of display.height(). Thanks for the quick reply!

Hello.
I've just noticed that good-display sells some displays with touch-screen, e.g. GDEW027W3-T.

@ZinggJM do you know something about how to use that touch-screen or maybe what controller they use?

On the GDEW027W3-T datasheet, I found only pinout:
1 - GND
2 - INT
3 - RST
4 - VDD
5 - SCL
6 - SDA

@strange_v,

I don't know, but you could just ask Good Display sales support, they are willing to help.

Maybe you find a clue in the demo code:

demo code for 2.7'' touch panel

@ZinggJM, thank you!

I haven't noticed this demo code. Based on it I could say that they use FocalTech FT6336(G) capacitive touch panel controller. The datasheet is available, so now I can try to use this display.

@ZinggJM

I have been trying to get the GDEW0213Z16 to run. You list your library as supporting so I assume i am not at the completely wrong address.
I am just very very confused on the pins ?
I am using a nodeMCU V1.0 so essentially i am using an ESP8266
so i assume this line is the one i am looking for:

``` GxEPD2_BW<GxEPD2_213_flex, GxEPD2_213_flex::HEIGHT> display(GxEPD2_213_flex(/*CS=D8*/ SS, /*DC=D3*/ 0, /*RST=D4*/ 2, /*BUSY=D2*/ 4)); // GDEW0213I5F ```

But then again I am really not sure as the last view characters don't match up, I have found the full name of the display used in the library but couldn't backtrack what pins to use from that point.

I am trying to run the whole thing via the GDE021/DESTM32-S2 display driver, for which you have made a small text with the pinout (and jumper position) and marked the display down as "usable" with this driver.
Though when it comes to connecting i am completely lost:

This is your message i am tralking about:
DESTM32-S2 pinout (top, component side view):
|-------------------------------------------------
| VCC |o o| VCC 5V
| GND |o o| GND
| 3.3 |o o| 3.3V
| nc |o o| nc
| nc |o o| nc
| nc |o o| nc
| MOSI |o o| CLK
| DC |o o| D/C
| RST |o o| BUSY
| nc |o o| BS
|-------------------------------------------------

CS = D8 ... What CS?
From what i could gather there is no CS? (chip select), or did the name change? Can't find anything with the instructions from good displays either. CS from the NodeMCU? but what does D8 stand for ?

CD=D3, ok
3,3 to 3.3 and GND to GND, ok
RST = D4, OK
BUSY=D2 ,OK
BS = GND , you mentioned this somewhere, can't find it right now though
.... and the others? as it stands MOSI, CLK, D/C

If i try falling back onto some other instructions from waveshare or similar products, i don'T really know what to connect stuff to either because of this section:

```
// mapping suggestion from Waveshare SPI e-Paper to generic ESP8266
// BUSY -> GPIO4, RST -> GPIO2, DC -> GPIO0, CS -> GPIO15, CLK -> GPIO14, DIN -> GPIO13, GND -> GND, 3.3V -> 3.3V
// NOTE: connect 4.7k pull-down from GPIO15 to GND if your board or shield has level converters
// NOTE for ESP8266: using SS (GPIO15) for CS may cause boot mode problems, use different pin in case, or 4k7 pull-down

// mapping of Waveshare e-Paper ESP8266 Driver Board
// BUSY -> GPIO16, RST -> GPIO5, DC -> GPIO4, CS -> GPIO15, CLK -> GPIO14, DIN -> GPIO13, GND -> GND, 3.3V -> 3.3V
// NOTE for ESP8266: using SS (GPIO15) for CS may cause boot mode problems, use different pin in case
```

As i don't have GPIO and do not know the D# equivalent i am not sure what to do here.

:confused: I love your library and have tried reading into it more and the lib from Adafruit, but i can't even get the demo example (GxEPD2_Example.ino) to run anyways so playing around with it is nearly impossible.

Regards,
Zwei

@ZweiEuro,

I have read your post, and I will answer soon, but right now I don't have the time.

In the meantime please read the post How to use this forum - please read.

If you provide clickable links to the products you can get an answer faster.

Do preview before post, and put text in code tags that would not be presented correctly.

DESTM32-S2 pinout (top, component side view):

         |-------------------------------------------------

         |  VCC  |o o| VCC 5V  not needed

         |  GND  |o o| GND     GND

         |  3.3  |o o| 3.3     3.3V

         |  nc   |o o| nc

         |  nc   |o o| nc

         |  nc   |o o| nc

   MOSI  |  DIN  |o o| CLK     SCK

   SS    |  CS   |o o| DC      e.g. D3

   D4    |  RST  |o o| BUSY    e.g. D2

         |  nc   |o o| BS      GND

         |-------------------------------------------------

Same recommendation for me: remove the extra line breaks! should look like the board.

   connection to the e-Paper display is through DESTM32-S2 connection board, available from Good Display

   DESTM32-S2 pinout (top, component side view):

         |-------------------------------------------------
         |  VCC  |o o| VCC 5V  not needed
         |  GND  |o o| GND     GND
         |  3.3  |o o| 3.3     3.3V
         |  nc   |o o| nc
         |  nc   |o o| nc
         |  nc   |o o| nc
   MOSI  |  DIN  |o o| CLK     SCK
   SS    |  CS   |o o| DC      e.g. D3
   D4    |  RST  |o o| BUSY    e.g. D2
         |  nc   |o o| BS      GND
         |-------------------------------------------------

@ZinggJM

Oh, I read them but i thought the preview was fine since i just copied it from when you posted the same thing earlier.

Thanks for the fast reply. But so others can also find what I mean:
This is the display i am tralking about:
https://www.good-display.com/products_detail/productId=310.html
GDEW0213Z16

With the driver I mentioned:
https://www.good-display.com/products_detail/productId%3D362.html
GDE021/029 DESTM32-S2

My Breakout board for an ESP8266:
NodeMCU Amica

Which runs the NodeMCU-V1.0 Dev kit:

As far as i can gather the pinouts are quasi exact for the nodeMCU boards

As far as I have understood it, using the above connection names for the nodeMCU i am still unsure where to connect what since it's not really 100% exact:

         |-------------------------------------------------
         |  VCC  |o o| VCC 5V  not needed                //ok
         |  GND  |o o| GND     GND                       //ok
         |  3.3  |o o| 3.3     3.3V                      //ok
         |  nc   |o o| nc                                //ok
         |  nc   |o o| nc                                //ok
         |  nc   |o o| nc                                //ok
   MOSI  |  DIN  |o o| CLK     SCK                       //suspect MOSI = MOSI (PIN SD1)  |o o| unclear SCK as in SCLK (PIN CLK) ?
   SS    |  CS   |o o| DC      e.g. D3                   // What is SS supposed to mean? Don't know which pin has that purpose. 
   D4    |  RST  |o o| BUSY    e.g. D2                   //ok
         |  nc   |o o| BS      GND                       //ok
         |-------------------------------------------------

I am most lost on SS which without which the board will not turn on (which is clear, but I don't know what SS stands for and what pin may have that purpose?

Sorry for not providing enough context the first time around.

@ZweiEuro,

First, I need to understand what you have:

GDEW0213Z16 3-color display.

Connection Adapter Board DESTM32-S2-12(Discontinued)

And you want to connect it to a NodeMCU V1.0 (link not searched for).

The NodeMCU V1.0 has the same Dx kind of inking of the pins like the Wemos D1 mini I use.

And I provide a suggested wiring for it in my examples ConnectingHardware.md:

#### mapping suggestion from Waveshare SPI e-Paper to ESP8266 NodeMCU:
- BUSY -> D2, RST -> D4, DC -> D3, CS -> D8, CLK -> D5, DIN -> D7, GND -> GND, 3.3V -> 3.3V

its the same as for Wemos D1 mini.

If you need to find the mapping from Dx inking to GPIO numbers, you consult pins_arduino.h of your board:
C:\Users\xxx\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\2.5.2\variants\nodemcu\pins_arduino.h:

static const uint8_t D0   = 16;
static const uint8_t D1   = 5;
static const uint8_t D2   = 4;
static const uint8_t D3   = 0;
static const uint8_t D4   = 2;
static const uint8_t D5   = 14;
static const uint8_t D6   = 12;
static const uint8_t D7   = 13;
static const uint8_t D8   = 15;
static const uint8_t D9   = 3;
static const uint8_t D10  = 1;

#include "../generic/common.h"

And in ../generic/common.h you find the SPI pins:

#define PIN_SPI_SS   (15)
#define PIN_SPI_MOSI (13)
#define PIN_SPI_MISO (12)
#define PIN_SPI_SCK  (14)

static const uint8_t SS    = PIN_SPI_SS;
static const uint8_t MOSI  = PIN_SPI_MOSI;
static const uint8_t MISO  = PIN_SPI_MISO;
static const uint8_t SCK   = PIN_SPI_SCK;

Now you only need to select/uncomment the correct constructor for your 3-color e-paper:

//GxEPD2_3C<GxEPD2_213c, GxEPD2_213c::HEIGHT> display(GxEPD2_213c(/*CS=D8*/ SS, /*DC=D3*/ 0, /*RST=D4*/ 2, /*BUSY=D2*/ 4));

I hope this helps!

Don't send me two Euros, but you could increase my Karma points.

Jean-Marc

Added:

SS and CS are used alternatively for Slave Select or Chip Select.

You can use any free GPIO pin for the CS pin of the e-paper, but there is a pre-defined SS pin for SPI, which is usually used, as it can't be used for anything else if HW SPI is used (on most processors).

The pin you use for e-paper CS must be used as parameter in the constructor, like DC, RST and BUSY.

//suspect MOSI = MOSI (PIN SD1) |o o| unclear SCK as in SCLK (PIN CLK) ?

on NodeMCU you need to connect to the HSPI pins, the SDIO pins can't be used (internal sram/flash).
Use HSCLK, HMOSI, HCS.

@ZinggJM
Thank you for all the useful information!
I actually wasn't aware that GPIO# are ultimately the numbers used in programming thank you for clearing that up.

I've tried your hardware configuration from the mini before and hoped that if i swapped the class it would function ,sadly no such luck.
I will play around with it some more and will get something soldered together because i do not trust these connections.

Are there any drivers (Dev boards) you recommend in order to try the e ink displays or develop ?
Since you said that the one i was using is not being continued. What are your personal recommendation since you have worked with a lot of them.

Hope the karma is helping :slight_smile:

Sincerely,
Zwei

EDIT: Nevermind i figured it out:
NOTE: if anyone is trying this, be sure not to swap the two rows... I accidentally mixed them up since there is no real "UP" indicator.
For the board i was using the side where you do not plug the cables into is TOP.
So most likly it worked fine the first time i tried, just swapped the pins

I now use DESPI-C02 to connect to 3.3V processor boards.

Waveshare has ESP32 and ESP8266 driver boards to connect panels directly, both have drawbacks (unable to use processor deep-sleep on ESP8266 because of BUSY pin, wrong SPI pins on ESP32).
Their Arduino driver shield would be ok, if it had a jumper from 5V to VCC pin, and a 3.3V to 3.3V jumper for use with STM32-Nucleo boards.
Their HAT has marginal e-paper VCC when connected by cable to 3.3V processors, ok through RasPi 3.3V pin.

hi ZinggJM, I would like to known did you any plan add GDEW075T7 7.5" b/w/r 800x480 into GxEPD.

because I notify by good display GDEW075T8 7.5" b/w was End-of-life. and i asking to use GDEW075T7 .

I created a PCB and working good.

thank you.

Hi zhongshanliyu,

GDEW075Z08 is supported by my library GxEPD2.

GDEW075Z08 is also supported by GxEPD. Version 3.0.8

GDEW075Z08 needs 2 * 800 * 480 / 8 bytes of RAM for full screen graphics buffer.
This means you need to use paged drawing on most processors.
GxEPD2 is better suited for use of paged drawing, as the page buffer size can be selected by the template class parameter page_height.

I intend to add GDEW075T7 7.5" b/w 800 * 480 to GxEPD also, it is supported by GxEPD2.

Did you mean GDEW075T7 ?

Thank you for your question; only by feedback I can know which panels are used with my libraries.

Jean-Marc

PS: if you want to add a picture and have it shown, add it as attachment, post, copy the link of the attached picture, modify the post by adding the picture using the link copied, save the post.

Yes, I mean GDEW075T7 for GxEPD.