Xiao-Ukulele
A compact MIDI and HID instrument interface using XIAO RP2040, a 3x3 key matrix, capacitive touch pads, and NeoPixel feedback.
Fabrication Files
PCB Overview
Trace Export (pending)
Cut Export (pending)
Bill of Materials (BOM)
Core parts used in the Xiao-Ukulele build.
| Item # | Ref. | Comp # | Description | Package | Link |
|---|---|---|---|---|---|
| 1 | U1 | XIAO RP2040 | Main microcontroller board | Seeed module | Seeed |
| 2 | K1-K9 | MX switches | 3x3 key matrix for note/command input | Through-hole | - |
| 3 | TP1-TP4 | Touch pads | Capacitive pads for string-like interactions | PCB pads | - |
| 4 | LED1 | WS2812 strip | 7-LED RGB strip for state feedback | Addressable LEDs | Adafruit |
Assembly
Assembly starts with soldering low-profile components and matrix routing first, followed by the XIAO headers and NeoPixel strip connection.
After soldering, check continuity row-by-row and column-by-column for the key matrix and validate touch-pad isolation before powering the board.
Programming Process
The firmware supports multiple interaction modes including MIDI chord output and HID keyboard behavior. The XIAO RP2040 can be flashed via CircuitPython or Arduino depending on the build you want to run.
Capacitive thresholds were tuned using step-response readings so each string pad remains responsive without accidental triggering.
Project Demo
Example Code (CircuitPython)
import board
import digitalio
import time
led = digitalio.DigitalInOut(board.LED)
led.direction = digitalio.Direction.OUTPUT
while True:
led.value = True
time.sleep(0.2)
led.value = False
time.sleep(0.2)

