Hardware

The firmware runs on any ESP32-S3 board with at least 4 MB of Octal PSRAM. The reference build targets the ESP32-S3-WROOM-1-N16R8 dev kit.

Bill of materials

Component Part Notes
MCU ESP32-S3-WROOM-1-N16R8 16 MB flash, 8 MB Octal PSRAM
DAC PCM5102A I²S stereo DAC (we feed L=R mono)
Mic INMP441 I²S MEMS mic, left channel
Display 2.4″ TFT ILI9341 240×320, SPI
Buttons 23× 6 mm tact 16 in a 4×4 scan matrix + 7 PO-33 modifiers
Status LEDs 2× 3 mm LED REC + PLAY indicators
Power USB-C 5 V Or single-cell LiPo + TP4056
Optional amp MAX98357A I²S class-D amp for built-in speaker

Pin map

All pins below are configured in main/config.h. Edit there if your board differs.

Audio (PCM5102A + INMP441)

DAC BCLKGPIO9
DAC LRCKGPIO10
DAC DINGPIO8
Mic BCLKGPIO15
Mic LRCKGPIO16
Mic DOUTGPIO17

2.4″ TFT (ILI9341 SPI)

MOSIGPIO6
SCKGPIO7
CSGPIO5
DCGPIO4
RSTGPIO48
BL (PWM)GPIO47

Buttons — matrix + modifiers

23 buttons: 16 step buttons on a 4×4 scan matrix (btn_id = BTN_STEP1 + row × 4 + col) plus 7 PO-33 modifier keys on their own GPIOs. Internal pull-ups everywhere.

Matrix rowsGPIO35, 36, 37, 38
Matrix colsGPIO33, 34, 39, 40
SOUNDGPIO11
PATTERNGPIO44
BPMGPIO13
RECGPIO41
FXGPIO12
PLAYGPIO42
WRITEGPIO43

Knobs (ADC)

Two 10 kΩ linear pots, read on ADC1 and debounced in software.

Knob AGPIO20 / ADC1_CH9
Knob BGPIO46 / ADC1_CH5

Sync + LEDs

Sync OUTGPIO18
Sync INGPIO19
LED RECGPIO21
LED PLAYGPIO14

Power

The firmware draws ~10 µA in deep sleep, so a 1500 mAh LiPo will last ~6 months on standby. Active power depends on which voice engine is running; expect 60–120 mA at moderate polyphony.

The 5-minute idle timer drops the chip into deep sleep automatically. Any button press wakes it back up — via a GPIO interrupt on the matrix column pins or on any of the seven modifier GPIOs.