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) |
What it’s good for
Section titled “What it’s good for”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.
Wiring
Section titled “Wiring”| GPIO | Can do | Notes |
|---|---|---|
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.
Storage & your data
Section titled “Storage & your data”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.
First-time flashing
Section titled “First-time flashing”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.
Update modes
Section titled “Update modes”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.uf2onto 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).
Quirks
Section titled “Quirks”- 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.