

JukeboxPanelTwoBoards
Upgrading an actual, old jukebox with Apple Music/Airplay.
- Size
- 156 × 120.5 mm
- Copper layers
- 2
- Thickness
- 1.6 mm
- Parts
- 37
- Nets
- 33
- Pads
- 180
- Tracks, vias
- 271, 1
- Pours
- 2
- Routed
- Yes
- KiCad
- KiCad 10.0 (file 20260206)
- Created
- 28 Apr 2026
- Updated
- 22 Aug 2026
Overview
JukeboxPanelTwoBoards is an open-source printed circuit board by zutroy97, from the zutroy97/jukebox5 repository on GitHub. It is a 2-layer board of 156 × 120.5 mm with 37 parts on 33 nets, routed with 271 tracks and 1 via.
Its parts include 12 connectors, 4 resistors and 2 capacitors.
README
README.mdA 1970s Jukebox, Reborn for AirPlay
My step-father bought a 1970s-era jukebox that, from what we can tell, spent a number of years in service at a Waffle House. We cleaned it up and gutted its electromechanical guts, original lighting, and speakers, replacing them with an early-90s Sony receiver, 6x9 car speakers, a powered subwoofer, and a Raspberry Pi running the fantastic shairport-sync. The jukebox is now an AirPlay speaker, reachable from any iPhone or Mac on the network.
It looked and sounded great — but the two 7-segment displays and the 12-button keypad were just sitting there dark, begging to be used again. This repo is what's driving them: the same Pi now also runs the original control panel, turning it into a "now playing" display and remote control for a Mac running Music.app.
Play something over AirPlay from another room, and the panel picks it up automatically: a rolling "songs played" counter ticks up on the original 3-digit display, and the jukebox's own numeric keypad lets you punch in a 3-digit code to queue a specific track from a shared playlist — the way the machine worked when it actually took quarters. Two 14-segment alphanumeric displays were added alongside the original panel to show artist, title, and album as they scroll by, since the jukebox never had anything capable of showing that on its own.
How it fits together
Mac (Music.app) ──AirPlay──▶ shairport-sync ──MQTT──▶ Raspberry Pi ──▶ panel hardware
▲ │
└──────────────── SSH / JavaScript for Automation ◀──┘- shairport-sync receives the AirPlay stream and publishes track metadata and play/pause/stop events over MQTT.
- The Pi subscribes, drives the physical panel in real time, and turns keypad presses into playback commands — sent back to the Mac either over MQTT or directly via JavaScript for Automation over SSH, whichever proves more reliable at the time.
- A custom PCB and level shifter bridge the panel's original 5V shift-register and keypad-matrix electronics to the Pi's 3.3V GPIO, backed by a small Linux kernel driver that exposes the panel as a character device.
What's in here
| Path | What it is |
|---|---|
src/ | The Python application: MQTT/AirPlay integration, keypad state machine, animated display rendering, playlist lookup |
linux/jukeboxPanelModule/ | Kernel driver exposing the panel over /dev/jukebox_panel (text) and /dev/jukebox_panel_bin (binary, segment-level) protocols |
hardware/ | KiCad schematics/PCB layouts for the panel driver board and level-shifter |
systemd/ | Boot-time services: autostart, and a config-fetch step that pulls settings from the Mac |
docs/ | Wiring diagrams, deployment notes, and a from-scratch functional specification of the whole system's behavior |
Notable bits
- Runs on a read-only root filesystem. The Pi is sandboxed with systemd
(
ProtectSystem=strict), so config changes happen by editing a file on the Mac, which the Pi fetches at boot — seedocs/deployment.md. - Segment-by-segment reveal animations, not just instant text writes — characters materialize one LED segment at a time on both the alphanumeric and 7-segment displays.
- A real hardware protocol, reverse-engineered and reimplemented: the
panel's MM5450/MM5451 shift-register displays and matrix keypad are driven
over a shared clock/data bus with no separate keypad wiring — see
docs/SPECIFICATION.mdfor the full wire-level writeup. - Graceful degradation everywhere: a lost MQTT connection, a Mac that's unreachable at boot, or a corrupt config file each fall back to a safe, visible state instead of crashing.
Credit where it's due
None of this works without shairport-sync, Mike Brady's open-source AirPlay audio receiver. It's what turns the Pi into an AirPlay speaker in the first place, and its built-in MQTT metadata publisher — track info and play/pause/stop events over MQTT — is the signal this entire panel is built to react to. Everything in this repo is downstream of that project.
Parts
37| Qty | Value | Footprint | References |
|---|---|---|---|
| 8 | MountingHole | MountingHole:MountingHole_3.2mm_M3 | H2, H3, H4, H5, H6, H7, H8, H9 |
| 6 | TestPoint | TestPoint:TestPoint_THTPad_D2.5mm_Drill1.2mm | TP_+5V1, TP_+5V2, TP_+5V3, TP_GND2, TP_GND3, TP_GND4 |
| 5 | Quad Alphanumeric | MyParts:Adafruit_1911_QuadAlphaNum | A6, A7, A8, A9, A10 |
| 3 | 8P8C | Connector_RJ:RJ45_Ninigi_GE | J10, J11, J12 |
| 2 | +3.3V | Connector_PinHeader_2.54mm:PinHeader_1x03_P2.54mm_Vertical | J3, J8 |
| 2 | +5V | Connector_PinHeader_2.54mm:PinHeader_1x03_P2.54mm_Vertical | J4, J9 |
| 2 | 100uF | Capacitor_THT:CP_Radial_D4.0mm_P2.00mm | C1, C2 |
| 2 | 10k | Resistor_THT:R_Axial_DIN0204_L3.6mm_D1.6mm_P2.54mm_Vertical | R1, R3 |
| 2 | 18k | Resistor_THT:R_Axial_DIN0204_L3.6mm_D1.6mm_P2.54mm_Vertical | R2, R4 |
| 2 | GND | Connector_PinHeader_2.54mm:PinHeader_1x03_P2.54mm_Vertical | J5, J6 |
| 1 | Display Header | Connector_PinHeader_2.54mm:PinHeader_1x05_P2.54mm_Vertical | J7 |
| 1 | Jukebox Panel | Package_DIP:DIP-10_W7.62mm_Socket | J2 |
| 1 | Raspberry_Pi_2_3 | Connector_IDC:IDC-Header_2x20_P2.54mm_Horizontal | J1 |
More from zutroy97/jukebox5
1- 2 layers164 × 58.5 mm

Similar boards
- 2 layers40 × 34 mm

- 2 layers53.9 × 23.2 mm

Analog
hoglet67/RGBtoHDMI
Bare-metal Raspberry Pi project that provides pixel-perfect sampling of Retro Computer RGB/YUV video and conversion to HDMI
37 parts1kGPL-3.0 - 2 layers52 × 51.8 mm

Esp32-homeassistant rf bridge
hackclub/OnBoard
💡 Join 1,000 teenagers and make your first PCB with a $100 grant!
37 parts915 - 2 layers87.8 × 59.8 mm

FreeDeck SMD 2020-02
FreeYourStream/freedeck-hardware
all the stuff you need to build your own FreeDeck
37 parts772 - 2 layers65 × 28 mm

BMS Cell Module
stuartpittaway/diyBMS
Do it yourself battery management system for Lithium ion battery packs/cells
37 parts676GPL-3.0 - 2 layers48 × 32 mm

FlatSat
Pwnsat/FlatSat
Flatsat v1.0 is a hardware based platform for aerospace cybersecurity research
37 parts575GPL-2.0 - 2 layers38.1 × 153.7 mm

- 2 layers47.8 × 27.4 mm

Vsf stm32h7b0
vsfteam/vsf
Versaloon Software Framework -- a tiny preemptive-capable event-driven incremental software framework for embedded systems
37 parts341Apache-2.0
Questions
How big is the JukeboxPanelTwoBoards PCB?
It measures 156 × 120.5 mm and has 2 copper layers, 1.6 mm thick.
What parts does the JukeboxPanelTwoBoards use?
37 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 JukeboxPanelTwoBoards KiCad files?
From the zutroy97/jukebox5 repository on GitHub, at the commit this page was made from: the board is hardware/JukeboxPanelTwoBoards/JukeboxPanelTwoBoards.kicad_pcb and its schematic hardware/JukeboxPanelTest/JukeboxPanelTest.kicad_sch. PCBKit opens the board in the browser, with nothing to install.
Can I use the JukeboxPanelTwoBoards design in my own project?
Its repository states no licence, so its author keeps all rights: ask zutroy97 before reusing the design.