Skip to content
foonerd edited this page Oct 18, 2026 · 4 revisions

Boards

The boards the project targets, what each carries, and where each stands. Facts are from the vendors' pages, read on 17 October 2026; sources at the end.

The Waveshare 2.8" siblings

Three boards share one panel, one touch controller and one shape, and differ in the chip behind them. From Waveshare's ESP32 LCD comparison table:

Board SoC PSRAM Flash Display Touch IMU RTC TF Speaker Mic Battery Standing
ESP32-C5-Touch-LCD-2.8 ESP32-C5HR8, RISC-V 8 MB 32 MB ST7789, SPI, 240x320 CST3530 yes yes yes yes yes yes Running: bring-up through the expander, panel, touch, the application, album art, configuration by card, joins on 2.4 or 5 GHz. No audio yet.
ESP32-C6-Touch-LCD-2.8 ESP32-C6, RISC-V none 16 MB ST7789, SPI, 240x320 CST3530 yes yes yes yes yes yes Planned.
ESP32-S3-Touch-LCD-2.8 ESP32-S3R8, Xtensa 8 MB 16 MB ST7789, SPI, 240x320 CST3530 yes yes yes yes no yes Planned.

All three list I2C, UART and an SH1.0 12-pin header as peripheral interfaces.

What the differences mean for the companion:

  • The C5 has 2.4 and 5 GHz Wi-Fi; the C6 is 2.4 GHz only.
  • The C6 has no PSRAM, so album art is decoded differently there, or not at all: the capabilities record says which.
  • The S3 has no microphone, so voice features cannot exist on it.
  • The S3 is Xtensa where the C5 and C6 are RISC-V: a different Rust target and toolchain, which is why each firmware crate pins its own.

Waveshare ESP32-C5-Touch-LCD-2.8

The first board, from Waveshare's product page:

Part What
Module ESP32-C5-WROOM-1: RISC-V 32-bit up to 240 MHz, 384 KB SRAM, 8 MB PSRAM, 32 MB flash
Radio 2.4 and 5 GHz Wi-Fi, Bluetooth 5 (LE), IEEE 802.15.4
Display 2.8" IPS, 240x320, 262K colours, 4-wire SPI, ST7789
Touch Capacitive, CST3530, I2C with interrupt
Audio ES8311 codec, NS4150B amplifier, onboard microphone, MX1.25 speaker header; an 8 ohm 2 W speaker is in the box
Sensors QMI8658 six-axis IMU, SHTC3 temperature and humidity
RTC PCF85063, SH1.0 RTC battery header
Power ETA6098 charger, MX1.25 3.7 V Li battery header, power on/off chip, BAT power button
IO expander CH32V003
Storage TF slot, up to 64 GB
Connectors UART header, I2C header, SH1.0 12-pin, expansion IO pads, USB-C (full-speed USB)
Buttons RESET, BOOT (usable as a general-purpose button)
In the box SH1.0 12-pin cable, two SH1.0 4-pin cables, the speaker, optionally a 1000 mAh battery

Pin map

From Waveshare's schematic and the board-connections table in its repository, read 17 October 2026. Directions are from the ESP32-C5's side.

Function ESP32-C5 pin
I2C, one bus shared by every onboard device and the I2C header SDA GPIO 0, SCL GPIO 1; 2 kΩ pull-ups to 3.3 V on the board
SPI, shared by the LCD and the TF card SCK GPIO 6, MOSI GPIO 7, MISO GPIO 8
LCD (ST7789) DC GPIO 9, CS GPIO 10; reset on the IO expander's EXIO1; backlight on the expander's PWM
TF card CS GPIO 23, SPI mode
Touch (CST3530, I2C 0x58) INT GPIO 5; reset on the expander's EXIO0
IMU (QMI8658) INT1 GPIO 4
I2S to the codec (ES8311) BCLK GPIO 24, LRCK GPIO 25, data in GPIO 26, data out GPIO 27; no external MCLK
USB D− GPIO 13, D+ GPIO 14 (USB Serial/JTAG; also on J8)
UART0 TXD GPIO 11, RXD GPIO 12 (J6); the serial console by default
BOOT button GPIO 28
IO expander (CH32V003, I2C 0x24) EXIO0 touch reset, EXIO1 LCD reset, EXIO2 RTC interrupt, EXIO3 amplifier enable, EXIO4–7 on pads and J8; PWM the backlight; ADC the battery
Free GPIO 2, GPIO 3 (on J8)

The expander owns the resets and the backlight, so the firmware brings it up first, releases the resets, then the panel, then the touch. Its firmware is programmed at the factory.

Headers

J8, J5 and J6 as the schematic numbers them

Header Pins, from pin 1 What it is for
J8, SH1.0 12-pin GND, USB 5 V, USB D−, USB D+, GND, 3V3, GPIO 2, GPIO 3, EXIO6, EXIO7, BOOT0, CHIP_PU Power, USB and a few lines on one cable, to a case or a dock
J5, I2C 4-pin SCL, SDA, 3V3, GND The board's own I2C bus, for adding a peripheral; see Connections
J6, UART 4-pin RXD, TXD, 3V3, GND UART0; the serial link to a Pi; see Connections

Pin 1 is as the schematic numbers it; check the silkscreen before wiring.

The Raspberry Pi panel it descends from

Waveshare SKU 27579, the panel rpi-waveshare28 drives on a Raspberry Pi: ST7789V (ST7789T3) over 4-wire SPI, 240(H) x 320(V) native portrait; Hynitron CST328 capacitive touch over I2C at 0x1A; no MISO on either connector. The same display controller family as the ESP32 boards; a different touch controller, which is why the CST3530 gets a driver of its own.

Other boards

Any vendor's ESP32 display board is in scope after the three siblings, SPI panels before QSPI, RGB and MIPI. A board joins as one crate under firmware/; a controller chip it carries that the project has not met joins as one crate under drivers/. The repository's firmware/README.md and drivers/README.md say what each crate must contain.

Sources

Clone this wiki locally