Xiao ESP32-C6 and Waveshare 2.9" e-Paper b/w, 296x128 Pixel, Rev2.1

Hi all,

Could sure use some advice and help. I’m not an expert here so bare with me.

I have a Waveshare 2.9inch e-Paper b/w, 296x128 Pixel, Rev2.1. It has a “V3” shiny round sticker on it on the back. It has 8 wires from top to bottom:

BUSY
RST
DC
CS
CLK
DIN
GND
VCC

I managed to get it working via Arduino IDE using an Elegoo Uno R3, which has limited RAM (2048 bytes) so I had to use HEIGHT/16 to compensate. The setup was:

PINS:

Waveshare Pin Uno R3 Pin
VCC 3.3V
GND GND
DIN D11 (MOSI)
CLK D13 (SCK)
CS D10
DC D8
RST D9
BUSY D7

The code used is:

#include <GxEPD2_BW.h>
#include <Fonts/FreeMonoBold9pt7b.h>

// use only 1 page buffer
GxEPD2_BW<GxEPD2_290_T94, GxEPD2_290_T94::HEIGHT / 16>
display(GxEPD2_290_T94(10, 8, 9, 7));

void setup()
{
Serial.begin(115200);

display.init(115200);

display.setRotation(1);
display.setFont(&FreeMonoBold9pt7b);
display.setTextColor(GxEPD_BLACK);

display.firstPage();
do
{
display.fillScreen(GxEPD_WHITE);
display.setCursor(10, 30);
display.println(“Hello Uno! Works!”);
}
while (display.nextPage());
display.hibernate();   // power down display driver
}

void loop()
{
}

Now the challenge is, I also have a Xiao ESP32-C6 microcontroller. I’ve tried all sorts of pin combinations and code but it just refuses to work ! It did manage to work once using the below,

Purple (BUSY) → D2
White (RST) → D0
Green (DC) → D3
Orange (CS) → D1
Yellow (CLK) → D8
Blue (DIN) → D10
Brown (GND) → GND
Grey (VCC) → 3V3

I think the code used was this:

#include “driver.h”
#include “TFT_eSPI.h”

#ifdef EPAPER_ENABLE
EPaper epaper;
#endif

void setup() {
Serial.begin(115200);
delay(1000);
Serial.println(“=== BOOT ===”);

#ifdef EPAPER_ENABLE
Serial.println(“Calling begin…”);
epaper.begin();
Serial.println(“begin done”);

epaper.setRotation(1);
epaper.fillScreen(TFT_WHITE);
epaper.setTextSize(2);
epaper.setTextColor(TFT_BLACK);
epaper.setCursor(10, 40);
epaper.print("Hello Retirement!");

Serial.println("Calling update...");
epaper.update();
Serial.println("update done");

#endif
}

void loop() {}

but when trying again it just wouldn’t work any more.. I tried both

USE_XIAO_EPAPER_BREAKOUT_BOARD
and
USE_XIAO_EPAPER_DRIVER_BOARD,

can’t remember which one worked, but neither do any more.

I also tested unplugging from USB and removing the 3V3 pin for 30s (hard reset).. No change.

I’m at a loss if it is compatible or not..

As per Schematics I tried several different pin layouts. For example

Wire Colour Signal XIAO Pin
Grey VCC 3V3
Brown GND GND
Blue DIN D10
Yellow CLK D8
Orange CS D3
Green DC D2
White RST D1
Purple BUSY D1

I have also tried using BUSY into D6 instead of D1. No change.

I tried different drivers like TxEPD2_290, no difference, The only thing I see in serial monitor is:

Starting…
_PowerOn : 60001
_Update_Full : 2
_Update_Part : 2
_Update_Full : 2
_PowerOff : 2
_PowerOff : 2
Done.

But the screen doesn’t update. BUSY signal does start at 1 then changes to 0 in a loop, so I’m confident it does work.. And like I said this does work on the Arduino Uno R3.

Please help! What am I doing wrong? :frowning: Does it not work with the ESP32-C6?

Thanks.