GxEPD2_PP : Particle Display Library for SPI E-Paper Displays


#41

@Norfeldt I left only temporarily, and as I get informed about posts to this topic per mail, I am ready for answers.

You didn’t tell me if the published library GxEPD2_PP works for you. Are there issues? How do you use it?

I can only improve if I get feedback, with as complete information as possible.

I just need to start up a noisy notebook if I need to use Particle CLI, everything else is ok on the mini PC box I use for work with Particle.


#42

@ZinggJM :grinning: Glad to hear you haven’t given up on it!

I decided to clear my code and start from scratch since you might have updated the code.

I have imported the Adafruit_GFX_RK (1.3.5) library, but when I trie to import the GXEPD2_PP it just hangs on “Loading…” all the time.

It did not do this when I tried it before Christmas.


#43

I had the same problem with the WEB-IDE. I had to set the browser to clear cache on exit, then exit the browser and start again. This worked for me. And it worked again just now, on my Acer notebook with the noisy fan.

I created a new project in the WEB-IDE, loaded library GxEPD2_PP, added it to my new project, loaded GxEPD2_PP again, opened GxEPD2_PP_Example, selected all, and replaced the code of the new project with the selection, and clicked Verify. Verified successfully.

I don’t know if this is the standard way to use library examples for test. But this is how I tried to verify GxEPD2_PP.

Suggestions for testing are welcome.


#44

@ZinggJM I set cleared the cache on exit (tried first to clear it, close and open) for
https://build.particle.io and it worked!

I’m testing it right now.


#45

@ZinggJM Here are some of the results so far

I used your example code from https://github.com/ZinggJM/GxEPD2_PP/blob/master/examples/GxEPD2_PP_Example/src/GxEPD2_PP_Example.ino

Did the following changes

#include <Arduino.h>
#include <Adafruit_GFX.h>
#include <FreeSerifBoldItalic18pt7b.h> // ADDED
#include <FreeMonoBold9pt7b.h>

(changed the setFont to FreeSerifBoldItalic18pt7b where applicable)

#if defined(PARTICLE)
// select one and adapt to your mapping, for buffered drawing, can use full buffer size (full HEIGHT) for Photon
//GxEPD2_BW<GxEPD2_154, GxEPD2_154::HEIGHT> display(GxEPD2_154(/*CS=D5*/ SS, /*DC=*/ A1, /*RST=*/ A0, /*BUSY=*/ D4));
..
//GxEPD2_3C<GxEPD2_583c, GxEPD2_583c::HEIGHT / 4 > display(GxEPD2_583c(/*CS=D5*/ SS, /*DC=*/ A1, /*RST=*/ A0, /*BUSY=*/ D4));
GxEPD2_3C<GxEPD2_750c, GxEPD2_750c::HEIGHT / 4 > display(GxEPD2_750c(/*CS=D5*/ SS, /*DC=*/ A1, /*RST=*/ A0, /*BUSY=*/ D4));
#endif

// comment out unused bitmaps to reduce code space used
// #include "bitmaps/Bitmaps200x200.h" // 1.54" b/w
// #include "bitmaps/Bitmaps128x250.h" // 2.13" b/w
// #include "bitmaps/Bitmaps128x296.h" // 2.9"  b/w
// #include "bitmaps/Bitmaps176x264.h" // 2.7"  b/w
// #include "bitmaps/Bitmaps400x300.h" // 4.2"  b/w
//#include "bitmaps/Bitmaps640x384.h" // 7.5"  b/w // can't select together with the others for Photon
// 3-color
// #include "bitmaps/Bitmaps3c200x200.h" // 1.54" b/w/r
// #include "bitmaps/Bitmaps3c104x212.h" // 2.13" b/w/r
// #include "bitmaps/Bitmaps3c128x296.h" // 2.9"  b/w/r
// #include "bitmaps/Bitmaps3c176x264.h" // 2.7"  b/w/r
#include "bitmaps/Bitmaps3c400x300.h" // 4.2"  b/w/r

As you can see there seems to be some issue with the Hello Android and Hello E-Paper.


Is this a correct understanding of the following

void helloWorld()
{
  //Serial.println("helloWorld");
  display.setRotation(1);
  display.setFont(&FreeSerifBoldItalic18pt7b);
  display.setTextColor(GxEPD_BLACK);
  uint16_t x = (display.width() - 160) / 2;
  uint16_t y = display.height() / 2;
  display.setFullWindow();
  display.firstPage();
  do
  {
    display.fillScreen(GxEPD_WHITE);
    display.setCursor(x, y);
    display.println("Hello World!");
  }
  while (display.nextPage());
  //Serial.println("helloWorld done");
}

The display.firstPage() triggers some sort of async function that returns True when calling display.nextPage() for some period of time and then when ready (display print finish) it returns False and can exit the loop?


It’s not drawing any bitmaps. So uncommented this section back to the original setup.

// comment out unused bitmaps to reduce code space used
#include "bitmaps/Bitmaps200x200.h" // 1.54" b/w
#include "bitmaps/Bitmaps128x250.h" // 2.13" b/w
#include "bitmaps/Bitmaps128x296.h" // 2.9"  b/w
#include "bitmaps/Bitmaps176x264.h" // 2.7"  b/w
#include "bitmaps/Bitmaps400x300.h" // 4.2"  b/w
//#include "bitmaps/Bitmaps640x384.h" // 7.5"  b/w // can't select together with the others for Photon
// 3-color
#include "bitmaps/Bitmaps3c200x200.h" // 1.54" b/w/r
#include "bitmaps/Bitmaps3c104x212.h" // 2.13" b/w/r
#include "bitmaps/Bitmaps3c128x296.h" // 2.9"  b/w/r
#include "bitmaps/Bitmaps3c176x264.h" // 2.7"  b/w/r
#include "bitmaps/Bitmaps3c400x300.h" // 4.2"  b/w/r

Now some of the logo bitmaps are back

I would LOVE to print some of my own photos onto the display.


#46

To answer your questions:

  1. I was referring to the GxEPD2_PP library.
  2. I am not well placed to help you with published libraries as I have not published anything yet.

I am using the Web IDE. Typically I include a library in my project sometimes I copy and recreate the files and change them. I also use VSC (for the better editor) but not at the moment with the Particle extensions - waiting for a good beta version.

I originally asked if anyone knew of a library to drive e-paper displays and @peekay123 referred me to your Arduino github GxEPD library. I then found the GxEPD2 library. I figured out how it fitted together copied the files I needed and created .h and .cpp files in the Web IDE as needed. I then stripped out all the Arduino related stuff that is not necessary in the Particle space and worked through the compile errors until it compiled and then I flashed to a test Photon wired up to a 2.13" 3 colour display.


#47

@armor

BTW, the library you have posted does not build in the IDE without changes - the #includes do not need “…epd/”.

I do not understand this, as it works for me with the WEB-IDE.


#48

Yes, there is an issue with missing clipping of drawing to a partial window. See

The display.firstPage() triggers some sort of async function that returns True when calling display.nextPage() for some period of time and then when ready (display print finish) it returns False and can exit the loop?

display.firstPage() simply sets the graphics class to paged mode. Nothing asynchronous involved.

display.nextpage() transfers the buffer content - the page - to the controller. For the last page the controller is ordered to refresh the screen. For displays with “fast partial update” aka differential update, there is as second round to make both controller buffers have the same content. Then false is returned.

It’s not drawing any bitmaps. So uncommented this section back to the original setup.

Don’t understand what you mean. Aha, you had selected the wrong bitmaps for your b/w display:

#include "bitmaps/Bitmaps3c400x300.h" // 4.2"  b/w/r

These are the bitmaps for your display:

#include "bitmaps/Bitmaps640x384.h" // 7.5"  b/w // can't select together with the others for Photon

These bitmaps are drawn to any display, if uncommented:

 #include "bitmaps/Bitmaps200x200.h" // 1.54" b/w


#49

Okay, I read it like I could pick different sizes (since the 200x200 worked on my 7.5"). I tried the b/w for 7.5" and it works perfect! I can live without the red color - perhaps I can print some red text instead.

Suppose I wish to print a custom logo like this:

customLogo

How would I go about that? Let’s start with just adding it as a file that is falshed to the device.

BMP file can be downloaded from here:


Okay - I think I understand it. So it actually only goes 1 iteration in the helloWorld().

Then in the helloFullScreenPartialMode() the if statements makes calls to the display telling it that it needs to do more iteration before the last page is reached.
So display.epd2.hasFastPartialUpdate returns True once (things are added to the buffer) and then in the next iteration it returns False. Then it comes to display.epd2.hasPartialUpdate that sorta does the same thing to get another iteration.

Right?



#50

Nope

display.epd2.hasFastPartialUpdate is an attribute. It is true for displays with a controller that supports differential update and uses a wavetable for “fast partial update”, that uses only phases for differences.

I add a function helloWorldForDummies() to GxEPD2_Example in the next release of GxEPD2, and later to GxEPD2_PP:

void helloWorldForDummies()
{
  //Serial.println("helloWorld");
  // most e-papers have width < height (portrait) as native orientation, especially the small ones
  // in GxEPD2 rotation 0 is used for native orientation (most TFT libraries use 0 fix for portrait orientation)
  // set rotation to 1 (rotate right 90 degrees) to have enough space on small displays (landscape)
  display.setRotation(1);
  // select a suitable font in Adafruit_GFX
  display.setFont(&FreeMonoBold9pt7b);
  // on e-papers black on white is more pleasant to read
  display.setTextColor(GxEPD_BLACK);
  // not really centered, but allmost, should be improved
  uint16_t x = (display.width() - 160) / 2;
  uint16_t y = display.height() / 2;
  // full window mode is the initial mode, set it anyway
  display.setFullWindow();
  // here we use paged drawing, even if the processor has enough RAM for full buffer
  // so this can be used with any supported processor board.
  // the cost in code overhead and execution time penalty is marginal
  // tell the graphics class to use paged drawing mode
  display.firstPage();
  do
  {
    // this part of code is executed multiple times, as many as needed,
    // in case of full buffer it is executed once
    // IMPORTANT: each iteration needs to draw the same, to avoid strange effects
    // use a copy of values that might change, don't read e.g. from analog or pins in the loop!
    display.fillScreen(GxEPD_WHITE); // set the background to white (fill the buffer with value for white)
    display.setCursor(x, y); // set the postition to start printing text
    display.println("Hello World!"); // print some text
    // end of part executed multiple times
  }
  // tell the graphics class to transfer the buffer content (page) to the controller buffer
  // the graphics class will command the controller to refresh to the screen when the last page has been transferred
  // returns true if more pages need be drawn and transferred
  // returns false if the last page has been transferred and the screen refreshed for panels without fast partial update
  // returns false for panels with fast partial update when the controller buffer has been written once more, to make the differential buffers equal
  // (for full buffered with fast partial update the (full) buffer is just transferred again, and false returned)
  while (display.nextPage());
  //Serial.println("helloWorld done");
}


#51

:man_facepalming: sorry! I wasn’t paying attention to what was actually printed to the screen.

I think it was because I imagined that partial/differential update was to be used when you only want some parts of the screen to update while other parts (like logo) should be untouched.


:hugs: Thank you for adding something to us newbies. I appreciate it :hugs:


BTW: I updated the .BMP file because I forgot to convert it to greyscale.


#52

Yes, this is true. With “fast partial update” you have pure differential flicker free refresh in addition. And some displays without “fast partial update” flicker only in the partial window, whereas others flicker the whole screen even with partial update. See https://github.com/ZinggJM/GxEPD2/blob/master/MyEPDs_UpdateInfos.pdf


#53

I have published Version 1.0.9

  • added support for GDEW029T5
  • fixed (added) clipping for partial window
  • fixed (added) powerOff() after full update (partial update keeps power on)
  • added hibernate() for minimum power use by displays that support it

BTW: I have found out how to prepare and test a new version of the library:
I just need to upload the new version with Particle CLI, then this version becomes a private version for me, to test. After successful test I can publish this version to make it public. This is logical and convenient, but was not obvious for a beginner.


#54

Thanks a lot for this @ZinggJM! Is there a list of supported/tested displays, or just anything SPI should work?


#55

Hi

I had forgotten to add this list to the README.MD

Supported SPI e-paper panels from Good Display:

  • GDEP015OC1 1.54" b/w
  • GDEW0154Z04 1.54" b/w/r 200x200
  • GDE0213B1 2.13" b/w
  • GDEW0213I5F 2.13" b/w flexible
  • GDEW0213Z16 2.13" b/w/r
  • GDEH029A1 2.9" b/w
  • GDEW029T5 2.9" b/w
  • GDEW029Z10 2.9" b/w/r
  • GDEW027C44 2.7" b/w/r
  • GDEW027W3 2.7" b/w
  • GDEW042T2 4.2" b/w
  • GDEW042Z15 4.2" b/w/r
  • GDEW0583T7 5.83" b/w
  • GDEW075T8 7.5" b/w
  • GDEW075Z09 7.5" b/w/r

Supported SPI e-paper panels & boards from Waveshare: compare with Good Display, same panel

The library GxEPD2 for Arduino supports the same e-paper panels (the list is also missing)

The (different) library GxEPD for Arduino supports an additional e-paper I don’t have:

  • GDEW0154Z17 1.54" b/w/r 152x152

#56

Hello everyone!

Ive been reading through many posts about the wave-share e-ink screens and the Photon because me and my classmates have purchased both for a school project. We have a GDEW042Z15 4.2" b/w/r (actually b/w/y but same thing) and a photon like I said and we are having trouble getting the e-ink screen to display anything. All we want is for it to say “Hello World” or anything just so we know it is powered up and running correctly. I have tried following other posts about “demo’s” but we are having trouble with the IDE and we are not able to run anything to the board.

Our connections for the Screen onto the Photon are
Vcc > 3v3
GND > GND
DIN > A4
CLK > D2
CS > A2
DC > D1
RST > D0
BUSY > D7

Please let me know of another forum that could help us out or just some simple code to display something to the screen, Thank you very much (:


#57

IIRC DIN should be A5.
DIN means Data In for the display and A5 is the MOSI pin on the Photon where MOSI stands for Master Out Slave In and the display is your slave device.
Also the CLK pin should rather be A3 as this is the standard SPI Clock pin

The docs do tell so too
https://docs.particle.io/reference/device-os/firmware/photon/#spi


#58

@p-kollat

Please take a look at the example: https://github.com/ZinggJM/GxEPD2_PP/blob/master/examples/GxEPD2_PP_Example/src/GxEPD2_PP_Example.ino

// Supporting Arduino Forum Topics:
// Waveshare e-paper displays with SPI: http://forum.arduino.cc/index.php?topic=487007.0
// Good Dispay ePaper for Arduino: https://forum.arduino.cc/index.php?topic=436411.0

// mapping suggestion from Waveshare SPI e-Paper to Particle Photon
// A5 MOSI
// A4 MISO
// A3 SCK
// A2 SS
// BUSY -> D4, RST -> A0, DC -> A1, CS -> A2, CLK -> A3, DIN -> A5, GND -> GND, 3.3V -> 3.3V
// NOTE: it looks like MISO can't be used as general input pin for BUSY.

One of the features of the example is to say hello to the world.


#59

Hi,

I’m struggling with displaying my bitmaps.

this image shows my struggle

I’ve converted my bitmap image of the bike to C-code and it works. But I need more different bitmaps for displaying and this I get stuck. I’ve tried many different bitmaps, different sizes, formats, everything and all my bitmaps are coming out like the right one, completely dissorted.

Any help would be appreciated!

This is the code I’m using for my bitmaps. I’ve noticed that the two bitmaps are different from each other in C-code but the source .bmp file is the same for both 1-bit Windows converted.
00

//#ifndef _GxBitmaps200x200_H_
#define _GxBitmaps200x200_H_

#if defined(ESP8266) || defined(ESP32)
#include <pgmspace.h>
#else
#include <avr/pgmspace.h>
#endif

const unsigned char bike200x200[] PROGMEM = { /* 0X01,0X01,0XC8,0X00,0XC8,0X00, */
0x00, 0x00, 0x00, 0x00, 0x05, 0x7c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
0x00, 0x00, 0x00, 0x00, 0x3f, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
0x00, 0x00, 0x00, 0x00, 0x7f, 0xfc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
0x00, 0x00, 0x00, 0x00, 0xff, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
0x00, 0x00, 0x00, 0x00, 0xff, 0x54, 0x00, 0x00, 0x55, 0xff, 0xe0, 0x00, 0x00, 0x00, 
0x00, 0x00, 0x00, 0x00, 0xfe, 0x00, 0x00, 0x00, 0xff, 0xff, 0xe0, 0x00, 0x00, 0x00, 
0x00, 0x00, 0x00, 0x01, 0xf0, 0x00, 0x00, 0x00, 0x7f, 0xff, 0xe0, 0x00, 0x00, 0x00, 
0x00, 0x00, 0x00, 0x01, 0xf8, 0x00, 0x00, 0x00, 0x0f, 0xff, 0xe0, 0x00, 0x00, 0x00, 
0x00, 0x00, 0x00, 0x01, 0xf0, 0x00, 0x00, 0x00, 0x01, 0x7f, 0x40, 0x00, 0x00, 0x00, 
0x00, 0x00, 0x00, 0x03, 0xe0, 0x00, 0x00, 0x00, 0x00, 0xfe, 0x00, 0x00, 0x00, 0x00, 
0x00, 0x00, 0x00, 0x03, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x7c, 0x00, 0x00, 0x00, 0x00, 
0x00, 0x00, 0x00, 0x03, 0xe0, 0x00, 0x00, 0x00, 0x00, 0xf8, 0x00, 0x00, 0x00, 0x00, 
0x00, 0x00, 0x00, 0x07, 0xf5, 0x55, 0x55, 0x55, 0x55, 0xf8, 0x00, 0x00, 0x00, 0x00, 
0x00, 0x00, 0x00, 0x07, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf8, 0x00, 0x00, 0x00, 0x00, 
0x00, 0x00, 0x00, 0x07, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfc, 0x00, 0x00, 0x00, 0x00, 
0x00, 0x00, 0x00, 0x0f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfc, 0x00, 0x00, 0x00, 0x00, 
0x00, 0x00, 0x00, 0x07, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfc, 0x00, 0x00, 0x00, 0x00, 
0x00, 0x00, 0x00, 0x0f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0x00, 0x00, 0x00, 0x00, 
0x00, 0x00, 0x00, 0x1f, 0xc0, 0x00, 0x00, 0x00, 0x07, 0xff, 0x00, 0x00, 0x00, 0x00, 
0x00, 0x00, 0x00, 0x1f, 0xf0, 0x00, 0x00, 0x00, 0x0f, 0xff, 0x00, 0x00, 0x00, 0x00, 
0x00, 0x00, 0x00, 0x1f, 0xf0, 0x00, 0x00, 0x00, 0x07, 0xdf, 0x00, 0x00, 0x00, 0x00, 
0x00, 0x00, 0x00, 0x3f, 0xfc, 0x00, 0x00, 0x00, 0x0f, 0xdf, 0x80, 0x00, 0x00, 0x00, 
0x00, 0x00, 0x00, 0x3f, 0xfc, 0x00, 0x00, 0x00, 0x1f, 0x9f, 0x80, 0x00, 0x00, 0x00, 
0x00, 0x00, 0x00, 0x3e, 0xfe, 0x00, 0x00, 0x00, 0x1f, 0x8f, 0xc0, 0x00, 0x00, 0x00, 
0x00, 0x00, 0x00, 0x7e, 0x3f, 0x00, 0x00, 0x00, 0x1f, 0x07, 0xc0, 0x50, 0x00, 0x00, 
0x00, 0x00, 0xbf, 0xfe, 0x3f, 0x80, 0x00, 0x00, 0x3f, 0x07, 0xff, 0xff, 0x80, 0x00, 
0x00, 0x05, 0xff, 0xfc, 0x1f, 0xc0, 0x00, 0x00, 0x1f, 0x07, 0xff, 0xff, 0xc0, 0x00, 
0x00, 0x2f, 0xff, 0xff, 0x8f, 0xe0, 0x00, 0x00, 0x3e, 0x03, 0xff, 0xff, 0xf8, 0x00, 
0x00, 0x7f, 0xff, 0xff, 0xc7, 0xf0, 0x00, 0x00, 0x7c, 0x07, 0xff, 0xff, 0xfc, 0x00, 
0x00, 0xff, 0xff, 0xff, 0xe3, 0xf8, 0x00, 0x00, 0x7e, 0x0f, 0xff, 0xff, 0xfe, 0x00, 
0x01, 0xff, 0xd5, 0xff, 0xf1, 0xfc, 0x00, 0x00, 0x7c, 0x1f, 0xfc, 0x07, 0xff, 0x00, 
0x03, 0xff, 0x81, 0xff, 0xf8, 0xfe, 0x00, 0x00, 0xfc, 0x3f, 0xf8, 0x00, 0xff, 0x80, 
0x07, 0xfc, 0x01, 0xf7, 0xfc, 0x7f, 0x00, 0x00, 0xf8, 0x7f, 0x7c, 0x00, 0x1f, 0xc0, 
0x0f, 0xf8, 0x03, 0xf9, 0xfe, 0x3f, 0x80, 0x00, 0xf8, 0xfe, 0xfe, 0x00, 0x0f, 0xe0, 
0x1f, 0xc0, 0x01, 0xf0, 0x7f, 0x1f, 0xc0, 0x01, 0xf1, 0xfc, 0x7c, 0x00, 0x07, 0xf0, 
0x3f, 0xc0, 0x03, 0xe0, 0x7f, 0x8f, 0xe0, 0x03, 0xfb, 0xf8, 0x3e, 0x00, 0x03, 0xf8, 
0x1f, 0x80, 0x03, 0xe0, 0x1f, 0x87, 0xe0, 0x01, 0xf1, 0xf0, 0x1f, 0x00, 0x01, 0xf0, 
0x3f, 0x00, 0x03, 0xe0, 0x1f, 0x87, 0xf8, 0x03, 0xe3, 0xf0, 0x3f, 0x00, 0x01, 0xf8, 
0x7f, 0x00, 0x07, 0xc0, 0x1f, 0xc3, 0xf8, 0x03, 0xe7, 0xe0, 0x1f, 0x00, 0x00, 0xfc, 
0x7e, 0x00, 0x0f, 0xe0, 0x0f, 0xe1, 0xfe, 0x03, 0xef, 0xe0, 0x1f, 0x80, 0x00, 0xfc, 
0x7c, 0x00, 0x07, 0xc0, 0x07, 0xc0, 0x7e, 0x07, 0xc7, 0xc0, 0x0f, 0x80, 0x00, 0x7c, 
0xfe, 0x00, 0x0f, 0x80, 0x07, 0xe0, 0xff, 0x0f, 0xcf, 0xc0, 0x0f, 0xc0, 0x00, 0x7e, 
0x7c, 0x00, 0x0f, 0xc0, 0x07, 0xe0, 0x7f, 0x87, 0xcf, 0xc0, 0x07, 0xc0, 0x00, 0x7c, 
0xfc, 0x00, 0x0f, 0x80, 0x03, 0xe0, 0x3f, 0xef, 0x8f, 0x80, 0x07, 0xe0, 0x00, 0x3e, 
0x7c, 0x00, 0x1f, 0x00, 0x03, 0xe0, 0x1f, 0xdf, 0x8f, 0xc0, 0x07, 0xe0, 0x00, 0x7e, 
0xf8, 0x00, 0x0f, 0x80, 0x03, 0xe0, 0x0f, 0xff, 0xaf, 0x80, 0x03, 0xe0, 0x00, 0x3e, 
0xf8, 0x00, 0x0f, 0x00, 0x03, 0xe0, 0x07, 0xff, 0xff, 0xff, 0xff, 0xf0, 0x00, 0x3e, 
0xf8, 0x00, 0x0e, 0x00, 0x03, 0xe0, 0x03, 0xff, 0xff, 0xff, 0xff, 0xf8, 0x00, 0x3e, 
0xfc, 0x00, 0x00, 0x00, 0x03, 0xe0, 0x01, 0xff, 0xff, 0xff, 0xff, 0xf0, 0x00, 0x7e, 
0xf8, 0x00, 0x00, 0x00, 0x03, 0xe0, 0x00, 0xff, 0xff, 0xff, 0xff, 0xf8, 0x00, 0x3e, 
0x7c, 0x00, 0x00, 0x00, 0x07, 0xe0, 0x00, 0x15, 0x5f, 0xd5, 0x55, 0x50, 0x00, 0x7c, 
0xfe, 0x00, 0x00, 0x00, 0x07, 0xe0, 0x00, 0x00, 0x0f, 0xe0, 0x00, 0x00, 0x00, 0x7e, 
0x7c, 0x00, 0x00, 0x00, 0x07, 0xc0, 0x00, 0x00, 0x07, 0xc0, 0x00, 0x00, 0x00, 0x7c, 
0x7e, 0x00, 0x00, 0x00, 0x0f, 0xe0, 0x00, 0x00, 0x07, 0xe0, 0x00, 0x00, 0x00, 0xfc, 
0x7f, 0x00, 0x00, 0x00, 0x0f, 0xc0, 0x00, 0x00, 0x07, 0xf0, 0x00, 0x00, 0x01, 0xfc, 
0x3f, 0x80, 0x00, 0x00, 0x1f, 0x80, 0x00, 0x00, 0x03, 0xf8, 0x00, 0x00, 0x03, 0xf8, 
0x1f, 0x00, 0x00, 0x00, 0x1f, 0x80, 0x00, 0x00, 0x01, 0xf0, 0x00, 0x00, 0x03, 0xf0, 
0x1f, 0x80, 0x00, 0x00, 0x3f, 0x80, 0x00, 0x00, 0x01, 0xfc, 0x00, 0x00, 0x07, 0xf0, 
0x0f, 0xc0, 0x00, 0x00, 0x7f, 0x00, 0x00, 0x00, 0x01, 0xfc, 0x00, 0x00, 0x0f, 0xe0, 
0x0f, 0xf0, 0x00, 0x00, 0xfe, 0x00, 0x00, 0x00, 0x00, 0xff, 0x80, 0x00, 0x3f, 0xe0, 
0x07, 0xfc, 0x00, 0x01, 0xfc, 0x00, 0x00, 0x00, 0x00, 0x7f, 0xc0, 0x00, 0x7f, 0xc0, 
0x03, 0xfe, 0x00, 0x0f, 0xfc, 0x00, 0x00, 0x00, 0x00, 0x3f, 0xe8, 0x02, 0xff, 0x80, 
0x01, 0xff, 0xd0, 0x7f, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x1f, 0xfd, 0x57, 0xff, 0x00, 
0x00, 0xff, 0xff, 0xff, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x0f, 0xff, 0xff, 0xfe, 0x00, 
0x00, 0x7f, 0xff, 0xff, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x03, 0xff, 0xff, 0xf0, 0x00, 
0x00, 0x3f, 0xff, 0xff, 0x80, 0x00, 0x00, 0x00, 0x00, 0x01, 0xff, 0xff, 0xe0, 0x00, 
0x00, 0x07, 0xff, 0xfc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5f, 0xff, 0xc0, 0x00, 
0x00, 0x02, 0xff, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0xfe, 0x00, 0x00, 
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,};

const unsigned char tree[] PROGMEM = { /* 0X01,0X01,0XC8,0X00,0XC8,0X00, */
0x00, 0x00, 0x00, 0x1f, 0xfe, 0x00, 0x00, 0x00, 
0x00, 0x00, 0x01, 0xff, 0xff, 0xe0, 0x00, 0x00, 
0x00, 0x00, 0x0f, 0xff, 0xff, 0xfc, 0x00, 0x00, 
0x00, 0x00, 0x3f, 0xff, 0xff, 0xff, 0x00, 0x00, 
0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xc0, 0x00, 
0x00, 0x03, 0xff, 0xff, 0xff, 0xff, 0xf0, 0x00, 
0x00, 0x07, 0xff, 0xff, 0xff, 0xff, 0xf8, 0x00, 
0x00, 0x0f, 0xff, 0xff, 0xff, 0xff, 0xfc, 0x00, 
0x00, 0x1f, 0xff, 0xff, 0xff, 0xff, 0xfe, 0x00, 
0x00, 0x3f, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 
0x00, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0x80, 
0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0, 
0x01, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xe0, 
0x03, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf0, 
0x07, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf0, 
0x07, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf8, 
0x0f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfc, 
0x0f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfc, 
0x1f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 
0x1f, 0xff, 0xff, 0xfe, 0x1f, 0xff, 0xff, 0xfe, 
0x3f, 0xff, 0xff, 0xfc, 0x0f, 0xff, 0xff, 0xff, 
0x3f, 0xff, 0xff, 0xf8, 0x07, 0xff, 0xff, 0xff, 
0x3f, 0xff, 0xff, 0xf8, 0x07, 0xff, 0xff, 0xff, 
0x7f, 0xff, 0xff, 0xf8, 0x07, 0xff, 0xff, 0xff, 
0x7f, 0xff, 0xff, 0xf8, 0x07, 0xff, 0xff, 0xff, 
0x7f, 0xff, 0xff, 0xf8, 0x07, 0xff, 0xff, 0xff, 
0x7f, 0xff, 0xff, 0xf8, 0x07, 0xff, 0xff, 0xff, 
0xff, 0xff, 0xff, 0xf8, 0x07, 0xff, 0xff, 0xff, 
0xff, 0xff, 0xff, 0xf8, 0x07, 0xff, 0xff, 0xff, 
0xff, 0xff, 0xff, 0xf8, 0x07, 0xff, 0xff, 0xff, 
0xff, 0xff, 0xff, 0xf8, 0x07, 0xfc, 0x1f, 0xff, 
0xff, 0xff, 0xff, 0xf8, 0x07, 0xf8, 0x0f, 0xff, 
0xff, 0xff, 0xff, 0xf8, 0x07, 0xf0, 0x0f, 0xff, 
0xff, 0xff, 0xff, 0xf8, 0x07, 0xe0, 0x0f, 0xff, 
0xff, 0xff, 0xff, 0xf8, 0x07, 0xc0, 0x0f, 0xff, 
0xff, 0xff, 0xff, 0xf8, 0x07, 0x80, 0x1f, 0xff, 
0xff, 0xff, 0xff, 0xf8, 0x07, 0x00, 0x3f, 0xff, 
0xff, 0xff, 0xff, 0xf8, 0x06, 0x00, 0x7f, 0xff, 
0xff, 0xff, 0xff, 0xf8, 0x04, 0x00, 0xff, 0xff, 
0xff, 0xff, 0xff, 0xf8, 0x00, 0x01, 0xff, 0xff, 
0xff, 0xff, 0xff, 0xf8, 0x00, 0x03, 0xff, 0xff, 
0xff, 0xff, 0xff, 0xf8, 0x00, 0x07, 0xff, 0xff, 
0xff, 0xff, 0xff, 0xf8, 0x00, 0x0f, 0xff, 0xff, 
0xff, 0xff, 0xff, 0xf8, 0x00, 0x1f, 0xff, 0xff, 
0xff, 0xff, 0xff, 0xf8, 0x00, 0x3f, 0xff, 0xff, 
0xff, 0xff, 0xff, 0xf8, 0x00, 0x7f, 0xff, 0xff, 
0xff, 0xff, 0xff, 0xf8, 0x00, 0xff, 0xff, 0xff, 
0xff, 0xff, 0xff, 0xf8, 0x01, 0xff, 0xff, 0xff, 
0xff, 0xff, 0xff, 0xf8, 0x03, 0xff, 0xff, 0xff, 
0xff, 0xff, 0xff, 0xf8, 0x07, 0xff, 0xff, 0xff, 
0xff, 0xff, 0xff, 0xf8, 0x07, 0xff, 0xff, 0xff, 
0xff, 0xff, 0xff, 0xf8, 0x07, 0xff, 0xff, 0xff, 
0xff, 0xff, 0xff, 0xf8, 0x07, 0xff, 0xff, 0xff, 
0xff, 0xff, 0xff, 0xf8, 0x07, 0xff, 0xff, 0xff, 
0xff, 0xff, 0xff, 0xf8, 0x07, 0xff, 0xff, 0xff, 
0xff, 0xff, 0xff, 0xf8, 0x07, 0xff, 0xff, 0xff, 
0xff, 0xff, 0xff, 0xf8, 0x07, 0xff, 0xff, 0xff, 
0xff, 0xff, 0xff, 0xf8, 0x07, 0xff, 0xff, 0xff, 
0xff, 0xfe, 0x1f, 0xf8, 0x07, 0xff, 0xff, 0xff, 
0xff, 0xfc, 0x0f, 0xf8, 0x07, 0xff, 0xff, 0xff, 
0xff, 0xfc, 0x07, 0xf8, 0x07, 0xff, 0xff, 0xff, 
0xff, 0xf8, 0x03, 0xf8, 0x07, 0xff, 0xff, 0xff, 
0xff, 0xfc, 0x01, 0xf8, 0x07, 0xff, 0xff, 0xff, 
0xff, 0xfc, 0x00, 0xf8, 0x07, 0xff, 0xff, 0xff, 
0xff, 0xfe, 0x00, 0x78, 0x07, 0xff, 0xff, 0xff, 
0xff, 0xff, 0x00, 0x38, 0x07, 0xff, 0xff, 0xff, 
0xff, 0xff, 0x80, 0x18, 0x07, 0xff, 0xff, 0xff, 
0xff, 0xff, 0xc0, 0x08, 0x07, 0xff, 0xff, 0xff, 
0xff, 0xff, 0xe0, 0x00, 0x07, 0xff, 0xff, 0xff, 
0xff, 0xff, 0xf0, 0x00, 0x07, 0xff, 0xff, 0xff, 
0xff, 0xff, 0xf8, 0x00, 0x07, 0xff, 0xff, 0xff, 
0xff, 0xff, 0xfc, 0x00, 0x07, 0xff, 0xff, 0xff, 
0xff, 0xff, 0xfe, 0x00, 0x07, 0xff, 0xff, 0xff, 
0xff, 0xff, 0xff, 0x00, 0x07, 0xff, 0xff, 0xff, 
0xff, 0xff, 0xff, 0x80, 0x07, 0xff, 0xff, 0xff, 
0xff, 0xff, 0xff, 0xc0, 0x07, 0xff, 0xff, 0xff, 
0xff, 0xff, 0xff, 0xe0, 0x07, 0xff, 0xff, 0xff, 
0xff, 0xff, 0xff, 0xf0, 0x07, 0xff, 0xff, 0xff, 
0xff, 0xff, 0xff, 0xf8, 0x07, 0xff, 0xff, 0xff, 
0xff, 0xff, 0xff, 0xf8, 0x07, 0xff, 0xff, 0xff, 
0xff, 0xff, 0xff, 0xf8, 0x07, 0xff, 0xff, 0xff, 
0xff, 0xff, 0xff, 0xf8, 0x07, 0xff, 0xff, 0xff, 
0xff, 0xff, 0xff, 0xf8, 0x07, 0xff, 0xff, 0xff, 
0xff, 0xff, 0xff, 0xf8, 0x07, 0xff, 0xff, 0xff, 
0x7f, 0xff, 0xff, 0xf8, 0x07, 0xff, 0xff, 0xff, 
0x7f, 0xff, 0xff, 0xf8, 0x07, 0xff, 0xff, 0xff, 
0x7f, 0xff, 0xff, 0xf8, 0x07, 0xff, 0xff, 0xff, 
0x7f, 0xff, 0xff, 0xf8, 0x07, 0xff, 0xff, 0xff, 
0x3f, 0xff, 0xff, 0xf8, 0x07, 0xff, 0xff, 0xff, 
0x3f, 0xff, 0xff, 0xfc, 0x0f, 0xff, 0xff, 0xff, 
0x3f, 0xff, 0xff, 0xfc, 0x0f, 0xff, 0xff, 0xff, 
0x1f, 0xff, 0xff, 0xfe, 0x1f, 0xff, 0xff, 0xfe, 
0x1f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 
0x0f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfc, 
0x0f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfc, 
0x07, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf8, 
0x03, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf0, 
0x03, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf0, 
0x01, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xe0, 
0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0, 
0x00, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0x80, 
0x00, 0x3f, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 
0x00, 0x1f, 0xff, 0xff, 0xff, 0xff, 0xfe, 0x00, 
0x00, 0x0f, 0xff, 0xff, 0xff, 0xff, 0xfc, 0x00, 
0x00, 0x03, 0xff, 0xff, 0xff, 0xff, 0xf0, 0x00, 
0x00, 0x01, 0xff, 0xff, 0xff, 0xff, 0xe0, 0x00, 
0x00, 0x00, 0x7f, 0xff, 0xff, 0xff, 0x80, 0x00, 
0x00, 0x00, 0x1f, 0xff, 0xff, 0xfe, 0x00, 0x00, 
0x00, 0x00, 0x07, 0xff, 0xff, 0xf8, 0x00, 0x00, 
0x00, 0x00, 0x00, 0xff, 0xff, 0xc0, 0x00, 0x00, 
0x00, 0x00, 0x00, 0x07, 0xf8, 0x00, 0x00, 0x00, 
0x00, 0x00, 0x00, 0x07, 0xf8, 0x00, 0x00, 0x00, 
0x00, 0x00, 0x00, 0x07, 0xf8, 0x00, 0x00, 0x00, 
0x00, 0x00, 0x00, 0x07, 0xf8, 0x00, 0x00, 0x00, 
0x00, 0x00, 0x00, 0x07, 0xf8, 0x00, 0x00, 0x00, 
0x00, 0x00, 0x00, 0x07, 0xf8, 0x00, 0x00, 0x00, 
0x00, 0x00, 0x00, 0x07, 0xf8, 0x00, 0x00, 0x00, 
0x00, 0x00, 0x00, 0x07, 0xf8, 0x00, 0x00, 0x00, 
0x00, 0x00, 0x00, 0x07, 0xf8, 0x00, 0x00, 0x00, 
0x00, 0x00, 0x00, 0x07, 0xf8, 0x00, 0x00, 0x00, 
0x00, 0x00, 0x00, 0x07, 0xf8, 0x00, 0x00, 0x00, 
0x00, 0x00, 0x00, 0x07, 0xf8, 0x00, 0x00, 0x00, 
0x00, 0x00, 0x00, 0x07, 0xf8, 0x00, 0x00, 0x00, 
0x00, 0x00, 0x00, 0x07, 0xf8, 0x00, 0x00, 0x00, 
0x00, 0x00, 0x00, 0x07, 0xf8, 0x00, 0x00, 0x00, 
0x00, 0x00, 0x00, 0x07, 0xf8, 0x00, 0x00, 0x00, 
0x00, 0x00, 0x00, 0x07, 0xf8, 0x00, 0x00, 0x00, 
0x00, 0x00, 0x00, 0x07, 0xf8, 0x00, 0x00, 0x00, 
0x00, 0x00, 0x00, 0x07, 0xf8, 0x00, 0x00, 0x00, 
0x00, 0x00, 0x00, 0x07, 0xf8, 0x00, 0x00, 0x00, 
0x00, 0x00, 0x00, 0x07, 0xf8, 0x00, 0x00, 0x00, 
0x00, 0x00, 0x00, 0x07, 0xf8, 0x00, 0x00, 0x00, 
0x00, 0x00, 0x00, 0x07, 0xf8, 0x00, 0x00, 0x00, 
0x00, 0x00, 0x00, 0x07, 0xf8, 0x00, 0x00, 0x00, 
0x00, 0x00, 0x00, 0x07, 0xf8, 0x00, 0x00, 0x00, 
0x00, 0x00, 0x00, 0x07, 0xf8, 0x00, 0x00, 0x00, 
0x00, 0x00, 0x00, 0x07, 0xf8, 0x00, 0x00, 0x00, 
0x00, 0x00, 0x00, 0x07, 0xf8, 0x00, 0x00, 0x00, 
0x00, 0x00, 0x00, 0x07, 0xf8, 0x00, 0x00, 0x00, 
0x00, 0x00, 0x00, 0x07, 0xf8, 0x00, 0x00, 0x00, 
0x00, 0x00, 0x00, 0x07, 0xf8, 0x00, 0x00, 0x00, 
0x00, 0x00, 0x00, 0x07, 0xf8, 0x00, 0x00, 0x00, 
0x00, 0x00, 0x00, 0x07, 0xf8, 0x00, 0x00, 0x00, 
0x00, 0x00, 0x00, 0x07, 0xf8, 0x00, 0x00, 0x00, 
0x00, 0x00, 0x00, 0x07, 0xf8, 0x00, 0x00, 0x00, 
0x00, 0x00, 0x00, 0x07, 0xf8, 0x00, 0x00, 0x00, 
0x00, 0x00, 0x00, 0x07, 0xf8, 0x00, 0x00, 0x00, 
0x00, 0x00, 0x00, 0x07, 0xf8, 0x00, 0x00, 0x00, 
0x00, 0x00, 0x00, 0x07, 0xf8, 0x00, 0x00, 0x00, 
0x00, 0x00, 0x00, 0x07, 0xf8, 0x00, 0x00, 0x00, 
0x00, 0x00, 0x00, 0x07, 0xf8, 0x00, 0x00, 0x00, 
0x00, 0x00, 0x00, 0x07, 0xf8, 0x00, 0x00, 0x00, 
0x00, 0x00, 0x00, 0x07, 0xf8, 0x00, 0x00, 0x00, 
0x00, 0x00, 0x00, 0x07, 0xf8, 0x00, 0x00, 0x00, 
0x00, 0x00, 0x00, 0x07, 0xf8, 0x00, 0x00, 0x00, 
0x00, 0x00, 0x00, 0x07, 0xf8, 0x00, 0x00, 0x00, 
0x00, 0x00, 0x00, 0x07, 0xf8, 0x00, 0x00, 0x00, 
0x00, 0x00, 0x00, 0x07, 0xf8, 0x00, 0x00, 0x00, 
0x00, 0x00, 0x00, 0x07, 0xf8, 0x00, 0x00, 0x00, 
0x00, 0x00, 0x00, 0x07, 0xf8, 0x00, 0x00, 0x00, 
0x00, 0x00, 0x00, 0x07, 0xf8, 0x00, 0x00, 0x00, 
0x00, 0x00, 0x00, 0x07, 0xf8, 0x00, 0x00, 0x00, 
0x00, 0x00, 0x00, 0x07, 0xf8, 0x00, 0x00, 0x00, 
0x00, 0x00, 0x00, 0x07, 0xf8, 0x00, 0x00, 0x00, 
0x00, 0x00, 0x00, 0x07, 0xf8, 0x00, 0x00, 0x00, 
0x00, 0x00, 0x00, 0x07, 0xf8, 0x00, 0x00, 0x00, 
0x00, 0x00, 0x00, 0x07, 0xf8, 0x00, 0x00, 0x00, 
0x00, 0x00, 0x00, 0x07, 0xf8, 0x00, 0x00, 0x00, 
0x00, 0x00, 0x00, 0x03, 0xf0, 0x00, 0x00, 0x00, 
0x00, 0x00, 0x00, 0x03, 0xf0, 0x00, 0x00, 0x00, 
0x00, 0x00, 0x00, 0x01, 0xe0, 0x00, 0x00, 0x00,};

Thanks


#60

Both Waveshare and Good Display explain how to use image2lcd to create C-arrays from bitmaps. You just need to add PROGMEM for use with GxEPD2. Try this and then compare with results of your converter.

You would need to provide more information to help you analyze your issue, e.g. original bitmap, drawBitmap parameters used, and more.