

ButtonBox
Lol im just bored and building a selfmade Mp3 player
- Size
- 42.3 × 13.8 mm
- Copper layers
- 2
- Thickness
- 1.6 mm
- Parts
- 20
- Nets
- 30
- Pads
- 86
- Tracks, vias
- 220, 21
- Pours
- 1
- Routed
- Yes
- KiCad
- KiCad 10.0 (file 20260206)
- Created
- 18 Aug 2026
- Updated
- 7 Nov 2026
Overview
ButtonBox is an open-source printed circuit board by Pertifiatus, from the Pertifiatus/MP3-Player repository on GitHub. It is a 2-layer board of 42.3 × 13.8 mm with 20 parts on 30 nets, routed with 220 tracks and 21 vias.
Its parts include 6 capacitors, 6 connectors, 4 resistors, 3 diodes and 1 IC.
README
README.mdMP3-Player
A compact DIY music player, smaller than an iPod Touch, built around a Raspberry Pi Compute Module 4 on a custom PCB. It syncs your YouTube Music library straight to the device, no home server needed.
Concept
- Front: round GC9A01 display for menus and navigation
- Back: monochrome SSD1306 OLED for music visualizations
- Audio: mainly Bluetooth A2DP, plus a 3.5 mm headphone jack (ES8388 codec)
- Controls: button box (SX1509 GPIO expander) + IMU (QMI8658A) for orientation and shake gestures
- Power: Li-ion battery, USB-C charging (RT9466) with an 80% charge limit, fuel gauge (MAX17048), soft power button
- Lighting: SK6812 status ring
Hardware
| Part | Details |
|---|---|
| Compute | Raspberry Pi CM4 Lite Wireless (boots from microSD), on 2× Hirose mezzanine connectors |
| Power | TPS63020 buck-boost, RT9466 charger, MAX17048 fuel gauge |
| Audio | ES8388 codec over I2S |
| Displays | GC9A01 (SPI0), SSD1306 (SPI4) |
| PCBs | Main board + ButtonBox, designed in KiCad (KiCad/Projekt 1) |
| Case | Fusion 360 (CAD/Player.f3z) |
Software (Software/)
Python on Raspberry Pi OS, running as systemd services:
| File | Purpose |
|---|---|
main.py | Main UI loop (front display, buttons, IMU) |
player.py | Playback |
sync_youtube.py | YouTube Music library sync |
connectivity.py | WiFi / Bluetooth connections |
ui_state.py, ui_render.py | UI state machine and rendering |
ui_views.py, ui_common.py | Screen content as plain data, shared drawing helpers |
themes/ | 8 switchable designs (Einstellungen → Anzeige → Design): Klassik, Cybercore, Y2K, Glas, Neumorph, Bento, Pixelhaus, Cyberpunk |
preview_themes.py | Preview sheet per design (previews/), --bench render timings |
fonts/, assets/ | Bundled OFL fonts, Pixelhaus house image |
buttonbox.py, qmi8658.py, es8388.py, max17048.py, rt9466.py | Hardware drivers |
charge_control.py, power_button.py | Charging logic and soft shutdown |
led_control.py, led_service.py | Status ring LEDs |
setup_pi.sh, *.service, sdcard-boot-* | Pi setup and boot configuration |
test_*.py | Tests |
Status
Work in progress. Board 2 boots reliably; the software bring-up and debugging of battery operation are ongoing. Detailed notes on hardware, pinout, config.txt and lessons learned are in CLAUDE.md and Software/NOTES_FOR_PER.md.
Repository structure
CAD/ Fusion 360 case
KiCad/ Main board + ButtonBox (schematics, PCB, 3D models)
Software/ Python application, drivers, services, tests
docs/ Design specs and plans (status ring, quick connect, design themes)Parts
20| Qty | Value | Footprint | References |
|---|---|---|---|
| 6 | 100nF | EasyEDA_Lib:C0402 | C1, C2, C3, C4, C5, C6 |
| 4 | 5.1kΩ | EasyEDA_Lib:R0603 | R1, R2, R3, R4 |
| 3 | ~ | EasyEDA_Lib:LED-SMD_4P-L3.2-W2.8-LS5.9_SK6812MINI-E | LED1, LED2, LED3 |
| 1 | Conn_02x04_Counter_Clockwise_MountingPin | Piity:8Pin | J7 |
| 1 | Connector | Piity:6Pin | J2 |
| 1 | Pause/Play | Piity:2PinKlick | J4 |
| 1 | Rotary Encoder | Piity:5PinRotary | J3 |
| 1 | Shuffle | Piity:2PinKlick | J5 |
| 1 | Stop | Piity:2PinKlick | J6 |
| 1 | ~ | EasyEDA_Lib:QFN-28_L4.0-W4.0-P0.40-BL-EP | U1 |
Questions
How big is the ButtonBox PCB?
It measures 42.3 × 13.8 mm and has 2 copper layers, 1.6 mm thick.
What parts does the ButtonBox use?
20 parts. The full list of its parts is on this page, with links to each part's symbol and footprint where PCBKit's library has them.
Where can I download the ButtonBox KiCad files?
From the Pertifiatus/MP3-Player repository on GitHub, at the commit this page was made from: the board is KiCad/Projekt 1/ButtonBox/ButtonBox.kicad_pcb and its schematic KiCad/Projekt 1/ButtonBox/ButtonBox.kicad_sch. PCBKit opens the board in the browser, with nothing to install.
Can I use the ButtonBox design in my own project?
Its repository states no licence, so its author keeps all rights: ask Pertifiatus before reusing the design.
More from Pertifiatus/MP3-Player
1- 4 layers46.2 × 89 mm

Similar boards
- 2 layers66.9 × 74.5 mm

- 2 layers86.4 × 64.8 mm

- 2 layers36.2 × 26.8 mm

Esp32 minimal
atopile/atopile
Design circuit boards with code! ✨ Get software-like design reuse 🚀, validation, version control and collaboration in hardware; starting with electronics ⚡️
20 parts4kMIT - 2 layers108.1 × 393.8 mm

Sweep compact ble
davidphilipbarr/Sweep
Sweep - a small promicro based keyboard inspired by the Ferris.
20 parts2.1k - 2 layers26 × 15.9 mm

TPS54340 Buck Regulator
rusefi/rusefi
rusefi - GPL internal combustion engine control unit
20 parts1.2k - 2 layers67.6 × 30.5 mm

Rgb to hdmi
hoglet67/RGBtoHDMI
Bare-metal Raspberry Pi project that provides pixel-perfect sampling of Retro Computer RGB/YUV video and conversion to HDMI
20 parts1kGPL-3.0 - 2 layers44.3 × 28.7 mm

Lin bus adapter esp32
hackclub/OnBoard
💡 Join 1,000 teenagers and make your first PCB with a $100 grant!
20 parts915 - 2 layers89.5 × 61.6 mm

FreeDeck TH 2020-02
FreeYourStream/freedeck-hardware
all the stuff you need to build your own FreeDeck
20 parts772