Repository navigation
Home
The evo fabric on a microcontroller: a standalone music player on an ESP32 touch panel, built the way an evo device is built. A declared catalogue describes the device; plugins stock its slots and never address each other; one steward owns the state and serves what the panel draws and what a phone or another player reads.
Where the project stands. The fabric runs on the first board. The firmware for the Waveshare ESP32-C5-Touch-LCD-2.8 compiles its catalogue in, mounts the card, and plays FLAC, WAV and MP3 from it through the on-board codec and, on the same frames, through a Raspberry Pi DAC HAT on the headers; the panel draws the face from the steward's projections and takes touch: transport, seek, volume, a library of the card's folders and of the DLNA media servers on the network, the album's cover from its folder, and a Settings page whose theme, style and rotation are kept in a text file on the card, which also names the Wi-Fi network the player joins; over it, internet radio from playlists on the card, with the stations' logos and the songs' titles as they change (see Configuration). 44.1 and 96 kHz play at real time; 192 kHz is beyond the chip and is greyed out in the library (see Hardware). The same fabric runs on the host as an ordinary Rust workspace, where every plugin is tested and the face is rendered to a PNG. It meets the board through the hardware layers of volumio-esp-companion: bring-up, display, touch, the card, the codec and DAC drivers.

| Page | What it is for |
|---|---|
| Face | What the panel shows: Now Playing in the evo family's five themes, two styles, four rotations; renders from the host. |
| Configuration |
evoconfig.txt on the card and the Settings page on the panel: the keys, the status file the player writes back, and where the controls are in each style. |
| Update | New firmware: the first flash over USB, then releases the player finds by itself, or takes from its web page or from the card; what the panel shows meanwhile, the trial minute, the way back. |
| Hardware | The first board, what it has for a player, what it lacks, and what a carrier board adds. |
| Boards | The ESP32 touch panels recorded as targets for the player, by role: the one on the bench, the next to buy, the rest by what they would prove, and the ones that do not fit. |
| Audio out | What the panel gives a DAC, the options recorded against it (Raspberry Pi DAC HATs, bare I2S modules, DAC chips from TI and ESS, a speaker amplifier, digital-out boards, and the Hymnal board), the wiring of a Pi HAT to the panel, the carrier-board shape, the PCM5102A worked through, and what is still to prove on the bench. |
flowchart LR
core["evo-core<br/>the fabric on Linux"]
audio["evo-device-audio<br/>the audio slot shapes"]
esp["evo-esp32<br/>the fabric on an MCU"]
comp["volumio-esp-companion<br/>hal · core · drivers · platform · firmware"]
core -.->|concepts| esp
audio -.->|slot shapes| esp
comp ==>|crates by commit| esp
What carries from evo-core is the shape, not the code: a catalogue resolved when the firmware is built; plugin crates admitted in-process; a steward that owns subjects, emits happenings and serves projections; one network client protocol outward. Processes, Unix sockets and runtime admission have no equivalent on a microcontroller and are replaced by what does.
What this repository does not write: pins, bring-up, display, touch, IO expander, Wi-Fi, configuration store, HTTP, nor the pages themselves. Those are the companion project's crates, consumed by tag where one exists and by commit where the work is ahead of it. One hardware layer, two applications: the Volumio companion and this player. The panel here is a consumer of the steward's projections, drawn by the player's own face crate (see Face) on the companion's display and touch drivers.
flowchart TB
sdk[sdk · no_std · plugin contract, slot contracts]
steward[steward · no_std · the authority]
cat[catalogue · std · the host tool, emits the catalogue as Rust]
plugins[plugins/org.evoframework.* · stock the slots]
host[distributions/host · the fabric on a desktop, panel to PNG]
fw[firmware/waveshare-esp32-c5-touch-lcd-28 · the fabric on the board]
steward --> sdk
plugins --> sdk
host --> steward
host --> plugins
host -.->|build.rs| cat
fw --> steward
fw --> plugins
fw -.->|build.rs| cat
Arrows read "depends on". Plugins never depend on each other, nor on the steward; the steward never names a plugin.
| Volumio companion | evo-esp32 player | |
|---|---|---|
| The engine | Volumio on a Raspberry Pi, over the network | The panel itself |
| Audio | None leaves the panel | I2S to an external DAC or amplifier; see Audio out |
| Needs on the panel | Power | Power, a stereo DAC and a jack on a carrier board |
| Repository | volumio-esp-companion | this one |
evo-esp32 is designed, built and maintained by one developer in his own time. If it has earned a place on your bench:
Provided as-is under the Business Source License 1.1; sponsorship is a thank-you, not a purchase: it buys no priority, no features and no support agreement. evo™ and evoframework™ are trademarks of Just a Nerd.