Skip to content

Commit b9dbbc7

Browse files
committed
Version 3.0.9
- fixed BMP handling, e.g. for BMPs created by ImageMagick - see also Arduino Forum Topic https://forum.arduino.cc/index.php?topic=642343.0 - added support for GDEW075T7 7.5" b/w 800x480 - GDEW075T7 has differential update (1.6s) using a charge balancing waveform - added "fast partial update" (differential update) for GDEW0371W7 3.7" b/w 240x416 - improved differential update waveform for GDEW026T0 2.6" b/w 152x256 - fixed init code & improved differential update for GDEW042T2 4.2" b/w 300x400 - note that all differential refresh waveforms are a compromise (ghosting, big font use) - parameters for differential waveform for these display can easily be changed for experimenting - GDEW042T2 would have greyed background without sustain phase - GDEW042T2 needs multiple full refreshes after extended use of partial updates
1 parent 10187e3 commit b9dbbc7

File tree

16 files changed

+13383
-216
lines changed

16 files changed

+13383
-216
lines changed

README.md

+19-4
Original file line numberDiff line numberDiff line change
@@ -23,9 +23,11 @@ A simple E-Paper display library with common base class and separate IO class fo
2323

2424
### The E-Paper display base class is a subclass of Adafruit_GFX, to have graphics and text rendering.
2525

26-
- It needs up to 30kB available RAM to buffer the black/white image for the SPI displays, double for 3-color.
27-
- ESP8266, ESP32 , STM32 systems, Arduino Due e.g. have enough free RAM for full graphics buffer.
28-
- Paged Drawing is available to cope with RAM restriction on AVR processors.
26+
- It needs up to 15kB available RAM to buffer the black/white image for the SPI displays,
27+
- double for 3-color, for e-papers up to 4.2" (300 * 400 / 8, 2 * 300 * 400 / 8).
28+
- ESP8266, ESP32 , STM32 systems, Arduino Due e.g. have enough free RAM for full graphics buffer.
29+
- It needs more RAM for e-paper displays above the 4.2".
30+
- Paged Drawing is available to cope with RAM restriction on AVR processors or for big displays.
2931

3032
### Supporting Arduino Forum Topics:
3133

@@ -52,6 +54,7 @@ A simple E-Paper display library with common base class and separate IO class fo
5254
- GDEW042Z15 4.2" b/w/r
5355
- GDEW0583T7 5.83" b/w
5456
- GDEW075T8 7.5" b/w
57+
- GDEW075T7 7.5" b/w 800x480
5558
- GDEW075Z09 7.5" b/w/r
5659
- GDEW075Z08 7.5" b/w/r 800x480
5760
#### Supported SPI e-paper panels & boards from Waveshare: compare with Good Display, same panel
@@ -62,7 +65,19 @@ A simple E-Paper display library with common base class and separate IO class fo
6265

6366
### for pin mapping suggestions see ConnectingHardware.md
6467

65-
### Version 3.0.8
68+
### Version 3.0.9
69+
- fixed BMP handling, e.g. for BMPs created by ImageMagick
70+
- see also Arduino Forum Topic https://forum.arduino.cc/index.php?topic=642343.0
71+
- added support for GDEW075T7 7.5" b/w 800x480
72+
- GDEW075T7 has differential update (1.6s) using a charge balancing waveform
73+
- added "fast partial update" (differential update) for GDEW0371W7 3.7" b/w 240x416
74+
- improved differential update waveform for GDEW026T0 2.6" b/w 152x256
75+
- fixed init code & improved differential update for GDEW042T2 4.2" b/w 300x400
76+
- note that all differential refresh waveforms are a compromise (ghosting, big font use)
77+
- parameters for differential waveform for these display can easily be changed for experimenting
78+
- GDEW042T2 would have greyed background without sustain phase
79+
- GDEW042T2 needs multiple full refreshes after extended use of partial updates
80+
#### Version 3.0.8
6681
- added support for GDEH0213B73 2.13" b/w, replacement for GDE0213B1, GDEH0213B72
6782
- added support for GDEW026T0 2.6" b/w 152x256
6883
- added support for GDEW0371W7 3.7" b/w 240x416

examples/GxEPD_Example/GxEPD_Example.ino

+27-2
Original file line numberDiff line numberDiff line change
@@ -56,11 +56,12 @@
5656
//#include <GxGDEW026T0/GxGDEW026T0.h> // 2.6" b/w
5757
//#include <GxGDEW027C44/GxGDEW027C44.h> // 2.7" b/w/r
5858
//#include <GxGDEW027W3/GxGDEW027W3.h> // 2.7" b/w
59-
//#include <GxGDEW0371W7/GxGDEW0371W7.h> // 3.7" b/w
59+
//#include <GxGDEW0371W7/GxGDEW0371W7.h> // 3.7" b/w
6060
//#include <GxGDEW042T2/GxGDEW042T2.h> // 4.2" b/w
6161
//#include <GxGDEW042Z15/GxGDEW042Z15.h> // 4.2" b/w/r
6262
//#include <GxGDEW0583T7/GxGDEW0583T7.h> // 5.83" b/w
6363
//#include <GxGDEW075T8/GxGDEW075T8.h> // 7.5" b/w
64+
//#include <GxGDEW075T7/GxGDEW075T7.h> // 7.5" b/w 800x480
6465
//#include <GxGDEW075Z09/GxGDEW075Z09.h> // 7.5" b/w/r
6566
//#include <GxGDEW075Z08/GxGDEW075Z08.h> // 7.5" b/w/r 800x480
6667

@@ -85,6 +86,9 @@ GxIO_Class io(SPI, /*CS=D8*/ SS, /*DC=D3*/ 0, /*RST=D4*/ 2); // arbitrary select
8586
GxEPD_Class display(io, /*RST=D4*/ 2, /*BUSY=D2*/ 4); // default selection of D4(=2), D2(=4)
8687
// Heltec E-Paper 1.54" b/w without RST, BUSY
8788
//GxEPD_Class display(io, /*RST=D4*/ -1, /*BUSY=D2*/ -1); // no RST, no BUSY
89+
// Waveshare e-Paper ESP8266 Driver Board
90+
//GxIO_Class io(SPI, 15, 4, 5);
91+
//GxEPD_Class display(io, 5, 16);
8892

8993
#elif defined(ESP32)
9094

@@ -450,7 +454,7 @@ void showBitmapExample()
450454
void showBitmapExample()
451455
{
452456
#if defined(__AVR)
453-
//display.drawBitmap(BitmapExample1, sizeof(BitmapExample1));
457+
display.drawBitmap(BitmapExample1, sizeof(BitmapExample1));
454458
#else
455459
display.drawExampleBitmap(BitmapExample1, sizeof(BitmapExample1));
456460
delay(2000);
@@ -539,6 +543,27 @@ void showBitmapExample()
539543
}
540544
#endif
541545

546+
#if defined(_GxGDEW075T7_H_)
547+
void showBitmapExample()
548+
{
549+
#if defined(__AVR)
550+
display.drawExampleBitmap(BitmapExample1, sizeof(BitmapExample1));
551+
#else
552+
display.drawExampleBitmap(BitmapExample1, sizeof(BitmapExample1));
553+
delay(2000);
554+
display.drawExampleBitmap(BitmapExample2, sizeof(BitmapExample2));
555+
delay(5000);
556+
display.drawExampleBitmap(BitmapExample3, sizeof(BitmapExample1));
557+
delay(2000);
558+
display.drawExampleBitmap(BitmapExample4, sizeof(BitmapExample2));
559+
delay(5000);
560+
display.fillScreen(GxEPD_WHITE);
561+
display.drawExampleBitmap(BitmapExample1, 0, 0, GxEPD_WIDTH, GxEPD_HEIGHT, GxEPD_BLACK);
562+
display.update();
563+
#endif
564+
}
565+
#endif
566+
542567
#if defined(_GxGDEW075Z08_H_)
543568
#define HAS_RED_COLOR
544569
void showBitmapExample()

examples/GxEPD_SD_Example/GxEPD_SD_Example.ino

+11-5
Original file line numberDiff line numberDiff line change
@@ -74,20 +74,28 @@ SdFat SD;
7474
#include <GxEPD.h>
7575

7676
// select the display class to use, only one
77-
#include <GxGDEP015OC1/GxGDEP015OC1.h> // 1.54" b/w
77+
//#include <GxGDEP015OC1/GxGDEP015OC1.h> // 1.54" b/w
7878
//#include <GxGDEW0154Z04/GxGDEW0154Z04.h> // 1.54" b/w/r 200x200
7979
//#include <GxGDEW0154Z17/GxGDEW0154Z17.h> // 1.54" b/w/r 152x152
80+
//#include <GxGDEW0213I5F/GxGDEW0213I5F.h> // 2.13" b/w 104x212 flexible
8081
//#include <GxGDE0213B1/GxGDE0213B1.h> // 2.13" b/w
82+
//#include <GxGDEH0213B72/GxGDEH0213B72.h> // 2.13" b/w new panel
83+
//#include <GxGDEH0213B73/GxGDEH0213B73.h> // 2.13" b/w newer panel
8184
//#include <GxGDEW0213Z16/GxGDEW0213Z16.h> // 2.13" b/w/r
8285
//#include <GxGDEH029A1/GxGDEH029A1.h> // 2.9" b/w
86+
//#include <GxGDEW029T5/GxGDEW029T5.h> // 2.9" b/w IL0373
8387
//#include <GxGDEW029Z10/GxGDEW029Z10.h> // 2.9" b/w/r
88+
//#include <GxGDEW026T0/GxGDEW026T0.h> // 2.6" b/w
8489
//#include <GxGDEW027C44/GxGDEW027C44.h> // 2.7" b/w/r
8590
//#include <GxGDEW027W3/GxGDEW027W3.h> // 2.7" b/w
91+
//#include <GxGDEW0371W7/GxGDEW0371W7.h> // 3.7" b/w
8692
//#include <GxGDEW042T2/GxGDEW042T2.h> // 4.2" b/w
8793
//#include <GxGDEW042Z15/GxGDEW042Z15.h> // 4.2" b/w/r
8894
//#include <GxGDEW0583T7/GxGDEW0583T7.h> // 5.83" b/w
8995
//#include <GxGDEW075T8/GxGDEW075T8.h> // 7.5" b/w
96+
//#include <GxGDEW075T7/GxGDEW075T7.h> // 7.5" b/w 800x480
9097
//#include <GxGDEW075Z09/GxGDEW075Z09.h> // 7.5" b/w/r
98+
//#include <GxGDEW075Z08/GxGDEW075Z08.h> // 7.5" b/w/r 800x480
9199

92100
#include <GxIO/GxIO_SPI/GxIO_SPI.h>
93101
#include <GxIO/GxIO.h>
@@ -330,7 +338,8 @@ void drawBitmapFrom_SD_ToBuffer(const char *filename, int16_t x, int16_t y, bool
330338
if (depth <= 8)
331339
{
332340
if (depth < 8) bitmask >>= depth;
333-
file.seekSet(54); //palette is always @ 54
341+
//file.seekSet(54); //palette is always @ 54
342+
file.seekSet(imageOffset - (4 << depth)); // 54 for regular, diff for colorsimportant
334343
for (uint16_t pn = 0; pn < (1 << depth); pn++)
335344
{
336345
blue = file.read();
@@ -488,6 +497,3 @@ uint32_t read32(SdFile& f)
488497
((uint8_t *)&result)[3] = f.read(); // MSB
489498
return result;
490499
}
491-
492-
493-

examples/GxEPD_WiFi_Example/GxEPD_WiFi_Example.ino

+9-2
Original file line numberDiff line numberDiff line change
@@ -52,17 +52,22 @@
5252
//#include <GxGDEW0213I5F/GxGDEW0213I5F.h> // 2.13" b/w 104x212 flexible
5353
//#include <GxGDE0213B1/GxGDE0213B1.h> // 2.13" b/w
5454
//#include <GxGDEH0213B72/GxGDEH0213B72.h> // 2.13" b/w new panel
55+
//#include <GxGDEH0213B73/GxGDEH0213B73.h> // 2.13" b/w newer panel
5556
//#include <GxGDEW0213Z16/GxGDEW0213Z16.h> // 2.13" b/w/r
5657
//#include <GxGDEH029A1/GxGDEH029A1.h> // 2.9" b/w
5758
//#include <GxGDEW029T5/GxGDEW029T5.h> // 2.9" b/w IL0373
5859
//#include <GxGDEW029Z10/GxGDEW029Z10.h> // 2.9" b/w/r
60+
//#include <GxGDEW026T0/GxGDEW026T0.h> // 2.6" b/w
5961
//#include <GxGDEW027C44/GxGDEW027C44.h> // 2.7" b/w/r
6062
//#include <GxGDEW027W3/GxGDEW027W3.h> // 2.7" b/w
63+
//#include <GxGDEW0371W7/GxGDEW0371W7.h> // 3.7" b/w
6164
//#include <GxGDEW042T2/GxGDEW042T2.h> // 4.2" b/w
6265
//#include <GxGDEW042Z15/GxGDEW042Z15.h> // 4.2" b/w/r
6366
//#include <GxGDEW0583T7/GxGDEW0583T7.h> // 5.83" b/w
6467
//#include <GxGDEW075T8/GxGDEW075T8.h> // 7.5" b/w
68+
//#include <GxGDEW075T7/GxGDEW075T7.h> // 7.5" b/w 800x480
6569
//#include <GxGDEW075Z09/GxGDEW075Z09.h> // 7.5" b/w/r
70+
//#include <GxGDEW075Z08/GxGDEW075Z08.h> // 7.5" b/w/r 800x480
6671

6772
#include <GxIO/GxIO_SPI/GxIO_SPI.h>
6873
#include <GxIO/GxIO.h>
@@ -327,7 +332,8 @@ void drawBitmapFrom_HTTP_ToBuffer(const char* host, const char* path, const char
327332
if (depth <= 8)
328333
{
329334
if (depth < 8) bitmask >>= depth;
330-
bytes_read += skip(client, 54 - bytes_read); //palette is always @ 54
335+
//bytes_read += skip(client, 54 - bytes_read); //palette is always @ 54
336+
bytes_read += skip(client, imageOffset - (4 << depth) - bytes_read); // 54 for regular, diff for colorsimportant
331337
for (uint16_t pn = 0; pn < (1 << depth); pn++)
332338
{
333339
blue = client.read();
@@ -569,7 +575,8 @@ void drawBitmapFrom_HTTPS_ToBuffer(const char* host, const char* path, const cha
569575
if (depth <= 8)
570576
{
571577
if (depth < 8) bitmask >>= depth;
572-
bytes_read += skip(client, 54 - bytes_read); //palette is always @ 54
578+
//bytes_read += skip(client, 54 - bytes_read); //palette is always @ 54
579+
bytes_read += skip(client, imageOffset - (4 << depth) - bytes_read); // 54 for regular, diff for colorsimportant
573580
for (uint16_t pn = 0; pn < (1 << depth); pn++)
574581
{
575582
blue = client.read();

examples/PartialUpdateExample/PartialUpdateExample.ino

+2-1
Original file line numberDiff line numberDiff line change
@@ -47,8 +47,9 @@
4747
//#include <GxGDEW029T5/GxGDEW029T5.h> // 2.9" b/w IL0373
4848
//#include <GxGDEW026T0/GxGDEW026T0.h> // 2.6" b/w
4949
//#include <GxGDEW027W3/GxGDEW027W3.h> // 2.7" b/w
50-
//#include <GxGDEW0371W7/GxGDEW0371W7.h> // 3.7" b/w
50+
//#include <GxGDEW0371W7/GxGDEW0371W7.h> // 3.7" b/w
5151
//#include <GxGDEW042T2/GxGDEW042T2.h> // 4.2" b/w
52+
//#include <GxGDEW075T7/GxGDEW075T7.h> // 7.5" b/w 800x480
5253
// these displays do not fully support partial update
5354
//#include <GxGDEW0154Z17/GxGDEW0154Z17.h> // 1.54" b/w/r 152x152
5455
//#include <GxGDEW0213Z16/GxGDEW0213Z16.h> // 2.13" b/w/r

library.properties

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
name=GxEPD
2-
version=3.0.8
2+
version=3.0.9
33
author=Jean-Marc Zingg
44
maintainer=Jean-Marc Zingg
55
sentence=Display Library for SPI e-paper panels from Dalian Good Display and boards from Waveshare.

0 commit comments

Comments
 (0)