A kid-friendly jukebox powered by the ESP32, inspired by Phoniebox. Unlike the original Raspberry Pi–based version, phoniesp32 is designed to be battery-operated, low-power, and ultra-portable.
⚠️ Work in Progress — Contributions, ideas, and wiring tips are very welcome!
Download Firmware (download the
firmware artifact from the latest run on main)
- ESP32-based jukebox: replaces the Raspberry Pi with an ESP32-C6.
- Low-power & battery-ready: runs on a Li-ion cell with TP4056 charging and MT3608 boost converter.
- Bare-metal Rust firmware: built on the
embassyasync embedded framework. - Rust-powered Web UI: implemented with Dioxus and served directly from the ESP32.
- Audio transcoding & upload: convert music files via the web frontend to IMA ADPCM, upload to device, and play back instantly.
- RFID support: scan S50 fobs with a MFRC522 module to trigger playlists.
- Affordable: target build cost under 15 CHF.
- MCU: ESP32-C6
- Charging/Power: TP4056 (Li-ion charger), MT3608 (boost converter)
- Battery: Li-ion cell (e.g. 18650)
- Audio: MAX98357 (I2S DAC + amplifier)
- Storage: SD card adapter
- RFID: MFRC522 module + S50 RFID fobs
Current
work-in-progress prototype
- Hardware
- Prototype on breadboard
- Soldered Prototype
- Battery charger
- Schematics
- Custom PCB
- Design and 3D print case
- UI (Dioxus)
- File transcoding
- Served from device
- Show last scanned RFID tag ID
- Switch to Bluma CSS
- Playback control
- Store RIFF INFO chunk for artist/title
- Associate file with RFID tag
- Configure Wi-Fi settings
- Playlists
- List known tags
- List uploaded files
- Continue file upload
- Styling
- Do not use CDN
- Update to stable Dioxus 0.7
- Firmware (Embassy)
- Fallback to Wi-Fi AP mode
- Audio pipeline (I2S → MAX98357)
- SD card access
- Playback control via buttons
- Playback control via RFID tags
- Pause playback
- Playlists
- Use RIFF INFO chunk for artist/title
- Fix concurrent access to file system
- mDNS responder
- Turn off Wi-Fi when on battery power
- Battery status with LED indicator
- Speed up SD access/upload
- Playback control via BLE
- Update to stable esp-hal 1.0
- Web API (picoserve)
- Associate file with RFID tag
- Playback control
- Playback status
- Last scanned RFID tag ID
- Configure Wi-Fi settings
- List known tags
- List uploaded files
- Playlists
- Command line utility
- Transcode
- Upload
- Playback control
- Associate
- Build system
- Build and bundle all components
- Build via GitHub actions
- Upstream fixes
-
dioxus: Support sass:color.channel() -
embedded-fatfs: SD card partitioning support -
mfrc522: async / IRQ support implemented in mfrc522-async
-
- Documentation
- API Documentation
- Full build instructions
- Video tutorial
Want to help build the cheapest, most fun, and hackable jukebox for kids?
- Review my code! I bet there are many possibilities to optimize power/memory usage
- Create schematics & PCB in KiCad
- Implement any of the missing features
- Share your ideas
PRs, issues, and ideas are always welcome!
MIT License — free to use, hack, and share.