There is something wrong if you get Busy Timeout. Do you use the suggested wiring? Else you need to change the values in the constructor for your display.
Adafruit_GFX is in Arduino/libraries, else the example would not compile.
You need to select the 3-color display GDEW075Z09 according your first post.
GxEPD2_32_3C display(GxEPD2::GDEW075Z09, /*CS=5*/ SS, /*DC=*/ 17, /*RST=*/ 16, /*BUSY=*/ 4);
In this part of the example you can find direct drawing to controller buffer and/or screen:
#ifdef _GxBitmaps200x200_H_
void drawBitmaps200x200()
{
const unsigned char* bitmaps[] =
{
logo200x200, first200x200, second200x200, third200x200, fourth200x200, fifth200x200, sixth200x200, senventh200x200, eighth200x200
};
if (display.panel() == GxEPD2::GDEP015OC1)
{
// ...
}
else
{
bool mirror_y = (display.panel() != GxEPD2::GDE0213B1);
display.clearScreen(0xFF);
uint16_t x = (display.width() - 200) / 2;
uint16_t y = (display.height() - 200) / 2;
for (uint16_t i = 0; i < sizeof(bitmaps) / sizeof(char*); i++)
{
display.drawImage(bitmaps[i], x, y, 200, 200, false, mirror_y, true);
delay(2000);
}
}
bool mirror_y = (display.panel() != GxEPD2::GDE0213B1);
for (uint16_t i = 0; i < sizeof(bitmaps) / sizeof(char*); i++)
{
int16_t x = -60;
int16_t y = -60;
for (uint16_t j = 0; j < 10; j++)
{
display.writeScreenBuffer(0xFF);
display.writeImage(bitmaps[i], x, y, 200, 200, false, mirror_y, true);
display.refresh();
delay(2000);
x += 40;
y += 40;
if ((x >= display.width()) || (y >= display.height())) break;
}
break; // comment out for full show
}
display.writeScreenBuffer(0xFF);
display.writeImage(bitmaps[0], 0, 0, 200, 200, false, mirror_y, true);
display.writeImage(bitmaps[0], display.width() - 200, display.height() - 200, 200, 200, false, mirror_y, true);
display.refresh();
delay(2000);
}
#endif
For bitmap in RAM set the last parameter to false.