Skip to content

Waveshare ESP32-S3-Zero

The ESP32-S3-Zero is a thumbnail-sized ESP32-S3 board with USB-C and a single onboard pixel — the board to pick when the electronics have to disappear inside the prop.

Chip ESP32-S3
Flash 4 MB
PSRAM 2 MB
Max LEDs 256
Audio
Display
Touch
Storage On-chip FAT (USB drive)
Network
Update modes Standalone (WiFi/OTA) · Loader (USB-drop)

Tiny hidden installs: a single LED strip inside a wand, a badge, a hilt, or anywhere space is tight. It has one onboard WS2812 pixel on GPIO21 (handy as a status light or a one-pixel effect all by itself) and fourteen more castellated pads for an external strip, a button, or a sensor. Despite its size it’s a full RFX Effects citizen: WiFi, the web dashboard, and the same show.json engine as the bigger boards — just with a 256-pixel LED budget and no screen.

GPIOCan doNotes
0 in / out / PWM BOOT button (strapping pin)
1 in / out / PWM / ADC ADC1_CH0
2 in / out / PWM / ADC ADC1_CH1
3 in / out / PWM / ADC ADC1_CH2
4 in / out / PWM / ADC ADC1_CH3
5 in / out / PWM / ADC ADC1_CH4
6 in / out / PWM / ADC ADC1_CH5
7 in / out / PWM / ADC ADC1_CH6
8 in / out / PWM / ADC ADC1_CH7
9 in / out / PWM / ADC ADC1_CH8
10 in / out / PWM / ADC ADC1_CH9
11 in / out / PWM
12 in / out / PWM
13 in / out / PWM
21 out / PWM Onboard WS2812 pixel — default LED data pin

The onboard WS2812 pixel on GPIO21 is the default LED output — a fresh board lights that pixel with no wiring at all. For an external strip, run its data line to any free pad (GPIO1–13) and name that pin in your show.json. GPIO1–10 are also ADC1 analog inputs, so analog sensors work reliably even with WiFi on. The BOOT button on GPIO0 is usable as a regular button input at runtime.

The ESP32-S3 family supports sound through an external I2S amplifier, but unlike the screen boards, the firmware doesn’t document a factory pin trio for this board — you’d assign three free pads yourself.

Your show.json, config.json, fonts, and sounds live on the board’s on-chip FAT partition, exposed over USB-C as a regular USB drive — drag files on from any computer, or edit them live from the web dashboard’s Files tab. With only 4 MB of flash the drive is small, so keep sound files short and trimmed.

Flash over the USB-C port. If the board doesn’t show up for flashing, hold the BOOT button (GPIO0) while pressing reset, then release BOOT — that puts it in ROM download mode, which always works. Full walkthrough: Flashing your board.

The S3-Zero supports both update modes — pick one per device:

  • Standalone — update firmware over WiFi from the device’s web dashboard. See the standalone quickstart.
  • Loader — no WiFi: tap RESET then press BOOT and the board appears as a USB drive; drag a firmware.uf2 onto it. The loader uses the S3-Zero’s own 4 MB partition layout. See the loader quickstart.

The two modes use different flash layouts, so switching between them is a one-time USB reflash (which erases the on-chip data drive — back up first).

  • The onboard WS2812 pixel on GPIO21 is the default LED output — great for confirming a board is alive before you’ve wired anything.
  • 2 MB of PSRAM is present but left disabled in the stock build: enabling the wrong PSRAM mode on this module blocks boot, so the firmware plays it safe. Shows sized for this board don’t need it.
  • Only 4 MB of flash. It uses the smaller 4 MB partition layout — still dual-slot, so wireless updates keep their safety net — but the data drive is tighter than on the 16 MB boards.
  • GPIO0 is the BOOT strapping pin, but it’s perfectly fine as a button input at runtime — just don’t hold it down through a reset unless you want ROM download mode.