Skip to content

butzist/phoniesp32

Repository files navigation

phoniesp32 🎶🔋

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 Latest Firmware

Download Firmware (download the firmware artifact from the latest run on main)

✨ Features

  • 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 embassy async 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.

🛠 Components

  • 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

🚧 Project Status

Screenshot of current prototype 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

🤝 Contributing

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!


📜 License

MIT License — free to use, hack, and share.

About

A kid-friendly jukebox powered by the ESP32

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors