Skip to main content

Wiring the E-ink Display

The GDEY042T81-FL02 is a 4.2" e-ink display with a built-in front light. It connects to the ESP32 via SPI and requires three additional control GPIO pins.

The display uses a 24-pin FPC (flexible printed circuit) ribbon connector. You must use the ESP32-FTS02 adapter board to break out these signals to standard 2.54 mm pin headers. Order the adapter from the same supplier as the display.


Adapter Board Setup

  1. Gently lift the FPC connector latch on the adapter board
  2. Insert the display ribbon cable with the contacts facing down
  3. Press the latch down to lock the cable in place
  4. Connect pin headers to the adapter board's output pads

Pin Table

Adapter board pinWire colourESP32-S3 pin labelGPIO #Notes
VCCRed3V33.3 V
GNDBlackGND
MOSI (SDI)BlueGPIO1111SPI bus (display only)
MISO (SDO)BlueGPIO1313SPI bus; display rarely sends data
SCLKYellowGPIO1212SPI bus (display only)
CSWhiteGPIO1010Display chip select — active LOW
DCWhiteGPIO55LOW = command, HIGH = data
RSTWhiteGPIO44Active LOW; pulse LOW for ≥10 ms on init
BUSYOrangeGPIO33HIGH while display is refreshing; wait until LOW
FL_PWM (front light)GreenGPIO22PWM brightness control via LEDC

Circuit Diagram

The schematic shows the SPI bus (MOSI, MISO, SCLK), the display-specific control lines (CS, DC, RST, BUSY, frontlight PWM), and power connections.

E-ink display circuit diagram


Wiring Diagram

E-ink display wiring diagram


Verification

Flash minimal display init code to confirm the wiring before adding more components:

// After SPI bus init and device add (see SPI concepts doc)
// Pulse RST
gpio_set_level(GPIO_NUM_4, 0);
vTaskDelay(pdMS_TO_TICKS(15));
gpio_set_level(GPIO_NUM_4, 1);
vTaskDelay(pdMS_TO_TICKS(100));

// Wait for BUSY to go LOW (display ready)
while (gpio_get_level(GPIO_NUM_3) == 1) {
vTaskDelay(pdMS_TO_TICKS(10));
}
printf("Display ready\n");

If Display ready never prints, BUSY is stuck HIGH. Check:

  • RST is connected (not floating) — a floating RST can hold the controller in reset
  • VCC is actually reaching the adapter board (measure with multimeter)
  • CS is not floating — if unconnected, the SSD1683 may not initialise

Gotchas

BUSY polarity — the SSD1683 holds BUSY HIGH while busy and LOW when ready (active HIGH busy). Do not confuse this with other e-ink controllers that use active-LOW.

RST pulse width — the SSD1683 datasheet specifies ≥10 ms for the reset pulse. 15 ms is reliable.

Do not power-cycle during a refresh — removing power while a refresh is in progress can permanently damage individual pixels. Always wait for BUSY to go LOW before cutting power.

Full refresh takes ~2 seconds — this is normal for e-ink. Do not interpret a 2-second delay as a hang. Partial refresh (~0.3 s) is faster but accumulates ghosting — run a full refresh at least every 10 partial refreshes.

GxEPD2 and PSRAM — the GxEPD2 library allocates a ~15 KB frame buffer. The ESP32-S3 The DevKitC-1 N16R8 (8 MB PSRAM) and WROOM-2 N32R16 (16 MB PSRAM) both handle this, but on a classic ESP32 without PSRAM you may see OOM panics. Use partial window mode (setPartialWindow) if PSRAM is unavailable.