currently using Arduino IDE: v2.3.10
esp32 Version: 3.3.12
Just downloaded the SEEED_GFX2 zip library to make sure. Removed the previous zip from October 2026.
Hardware:
I believe the XIAO-ESP32C6 is from last year. I recently bought a few more a week ago.
ePaper monochrome 4.26 from SEEED, SKU:114993631; Bought November 2025
4.26" Monochrome ePaper Display with 800x480 Pixels, SPI interface, Support XIAO/Arduino/STM32
ePaper Driver Board for Seeed Studio XIAO, SKU:114993558; Bought November 2025
Turned on Verbose and received the following:
FQBN: esp32:esp32:XIAO_ESP32C6
Using board 'XIAO_ESP32C6' from platform in folder: C:\Users\gesch\AppData\Local\Arduino15\packages\esp32\hardware\esp32\3.3.12
Using core 'esp32' from platform in folder: C:\Users\gesch\AppData\Local\Arduino15\packages\esp32\hardware\esp32\3.3.12
Here the code to get started:
#include <Seeed_GFX.h>
#include "board/boards/XIAO_ePaper_Boards.h"
#include "panel/configs/Seeed_Panel_Configs.h"
#include "driver/epaper/Driver_SSD1677.h"
#include "panel/Panel_EPaper.h"
//#define Board_XIAO_ePaper_Driver //Board_XIAO_EPAPER_DRIVER_BOARD
Seeed_GFX display;
// Global Variables
#define spacing 35
#define xPos 8
#define tTop 15
#define lSpace 15
// Redeine BLACK and WHITE. SOmehow they are reversed!
#define COLOR_BLACK 0xFFFF //NORMAL TFT_BLACK VALUE == 0x0000
#define COLOR_WHITE 0x0000 //NORMAL TFT_WHITE VALUE == 0xFFFF
const char* myText;
int myValue;
int x, y, aLine, n, xPosR;
int qWidth, qHeight, vLine, xe, ye;
// (0, 0) ; (qWidth/2, 0) ; qWidth, 0)
// (0, qHeight /2) ; (qWIdth /2, qHeight /2 ) ; (qWidth, qHeight /2)
// (0, qHeight ) ; (qWIdth /2, qHeight ) ; (qWidth, qHeight)
void setup() {
Serial.begin(115200);
Serial.println("before Begin Display");
// Board_XIAO_ePaper_Breakout original
if (!display.begin<Board_XIAO_ePaper_Driver, Config_Seeed_ePaper_4inch26_BW_SSD1677>()) { Serial.println(display.lastResult().message); return; }
display.setRotation(2); // Had to rotate display 180 degrees for my display stand!
display.setTextSize(3);
display.fillScreen(COLOR_WHITE);
/** Set display rotation (0-3)
default == 0 landscape
setRotation(2) rotates 180 degrees
*/
const int16_t w = display.width(); // 800
const int16_t h = display.height(); // 480
// 4 Quadrants
qWidth = display.width();
qHeight = display.height();
xPosR = (qWidth /2) + xPos; //For Right side of Middle (qWidth /2)
x = 0;
y = 0;
display.drawRect(x, y, qWidth /2, qHeight /2, COLOR_BLACK); //X, y, w, H
display.fillRect(x, y, qWidth /2, qHeight /2, COLOR_WHITE);
y = qHeight /4;
//epaper.drawString("Quadrant 1", x, y);
x = qWidth /2;
y = 0;
display.drawRect(x, y, qWidth /2, qHeight /2, COLOR_BLACK);
display.fillRect(x, y, qWidth /2, qHeight /2, COLOR_WHITE);
// draw bottom 2 quadrants
x = 0;
y = qHeight /2;
display.drawRect(x, y, qWidth /2, qHeight /2, COLOR_BLACK); //X, y, w, H
display.fillRect(x, y, qWidth /2, qHeight /2, COLOR_WHITE);
x = qWidth /2;
y = qHeight /2;
display.drawRect(x, y, qWidth /2, qHeight /2, COLOR_BLACK);
display.fillRect(x, y, qWidth /2, qHeight /2, COLOR_WHITE);
// Convert integer to string and combine
char buffer[50]; // Ensure buffer is large enough
myText = "ePaper Width: ";
myValue = display.width();
aLine = tTop;
snprintf(buffer, sizeof(buffer), "%s%d", myText, myValue);
// Draw combined string at coordinates x=10, y=20
display.drawString(buffer, xPos, aLine );
//
myText = "ePaper Height: ";
myValue = display.height();
snprintf(buffer, sizeof(buffer), "%s%d", myText, myValue);
//Quadrant 1
display.drawString(buffer, xPos, aLine += spacing);
display.drawString("Q1 Line Three", xPos, aLine += spacing );
display.drawString("Q1 Line Four", xPos, aLine += spacing );
display.drawString("123456789A123456789B12", xPos, aLine += spacing );
display.drawString("Quadrant 1", xPos, aLine += spacing );
//Quadrant 3
//xPos = 6; spacing 35
aLine = (qHeight /2) + tTop;
display.drawString("Q3 Line One", xPos, aLine );
display.drawString("Q3 Line Two", xPos, aLine += spacing );
display.drawString("Q3 Line Three", xPos, aLine += spacing );
display.drawString("Q3 Line Four", xPos, aLine += spacing );
display.drawString("Q3 Line Five", xPos, aLine += spacing);
display.drawString("Quadrant 3", xPos, aLine += spacing );
// Quadrant 2:
aLine = tTop;
display.drawString("Q2 Line One", xPosR, aLine );
display.drawString("Q2 Line Two", xPosR, aLine += spacing );
display.drawString("Q2 Line Three", xPosR, aLine += spacing );
display.drawString("Q2 Line Four", xPosR, aLine += spacing );
display.drawString("Q2 Line Five", xPosR, aLine += spacing);
display.drawString("Quadrant 2", xPosR, aLine += spacing );
//Quadrant 4
// drawFastVLine(int32_t x, int32_t y, int32_t h, uint32_t color)
x = qWidth /2;
vLine = 30;
y = qHeight /2; //Middle down
ye = qHeight;
xe = x;
//lSpace = 15
display.drawLine(x += vLine, y, xe += vLine, ye, COLOR_BLACK);
display.drawLine(x += vLine, y, xe += vLine, ye, COLOR_BLACK);
display.drawLine(x += vLine, y, xe += vLine, ye, COLOR_BLACK);
display.drawLine(x += vLine, y, xe += vLine, ye, COLOR_BLACK);
display.drawFastVLine(x += vLine, y, qHeight /2, COLOR_BLACK);
display.drawFastVLine(x += vLine, y, qHeight /2, COLOR_BLACK);
display.drawFastVLine(x += vLine, y, qHeight /2, COLOR_BLACK);
display.drawFastVLine(x += vLine, y, qHeight /2, COLOR_BLACK);
display.drawFastVLine(x += vLine, y, qHeight /2, COLOR_BLACK);
display.drawFastVLine(x += vLine, y, qHeight /2, COLOR_BLACK);
display.drawFastVLine(x += vLine, y, qHeight /2, COLOR_BLACK);
display.drawFastVLine(x += vLine, y, qHeight /2, COLOR_BLACK);
display.drawFastVLine(x += vLine, y, qHeight /2, COLOR_BLACK);
// 13*30 = 390
display.update();
}
void loop() { delay(1000); }