Skip to content

Hardware

foonerd edited this page Oct 21, 2026 · 10 revisions

Hardware

The first board, what it has for a player, what it lacks, and what a carrier board adds. Facts are from Waveshare's schematic and board repository, Espressif's ESP32-C5 data sheet and technical reference manual, and the ES8311 and PCM5102A data sheets, read 17 and 18 October 2026; sources at the end. The DAC, its wiring and what the firmware does for it are on Audio out.

The first board

Waveshare ESP32-C5-Touch-LCD-2.8, the same board the Volumio companion starts on. Its parts and pin map are on the companion wiki's Boards page, its headers on the Connections page. This page covers only what a player adds to that.

Part What it gives a player What it does not
ESP32-C5-WROOM-1 One RISC-V core at up to 240 MHz, 384 KB SRAM, 8 MB PSRAM, 32 MB flash, dual-band Wi-Fi, one I2S controller A second core or a second I2S. Which codecs and sample rates it decodes in time is the first thing to measure, not assume.
ES8311 codec A 24-bit DAC and ADC, 8 to 96 kHz, on the board's I2S: BCLK GPIO 24, LRCK GPIO 25, data out GPIO 27, data in GPIO 26. Its MCLK pin is not connected, so it runs from BCLK. Stereo: it is a mono codec, one DAC channel. A line output: its OUTP and OUTN go only to the speaker amplifier, and no header carries them.
NS4150B amplifier, speaker header A small speaker, 8 ohm 2 W, in the box. Held off by a pull-down until the IO expander's EXIO3 enables it. A line or headphone output. The header carries the amplifier's bridged output. There is no jack on the board.
TF card slot Local files, up to 64 GB, on the SPI bus shared with the display -
Onboard microphone Voice input through the codec's ADC -
Battery header, charger Portable use -

Audio out

What the board plays

Plays Does not play
Rates 44.1 and 96 kHz, measured at real time on the bench; 48 and 88.2 kHz are under the same ceiling and not yet played on it 176.4 and 192 kHz. A single RISC-V core at 240 MHz decodes 192 kHz/24-bit FLAC at 0.38 of real time with Symphonia's decoder and at about 0.8 with Espressif's; the ES8311 has no mode above 96 kHz either.
Depth 16 and 24 bit (24 is brought to 16 at the sink; the ES8311 and the I2S slots are 16-bit)
Codecs FLAC, MP3 and AAC (AAC-LC, HE-AAC; Espressif's fixed-point decoders), WAV, raw PCM; from the air also Ogg Vorbis, as one stream or as HLS (MPEG-TS segments) AAC takes about 50 KB of internal SRAM while a stream is open, the most of any codec here. Anything else on the card is listed and passed over
Multiroom A room of an Evo group: PCM 48 kHz from the group's source-host over the network, played 200 ms behind its stamp as the Linux receiver does The player is a receiver only; it does not send a group its own audio

The player knows the rate before it opens a file: the listing reads a FLAC's STREAMINFO and a WAV's fmt chunk. A track above the ceiling is shown greyed in the library, a tap on it does nothing, and the shuffle passes it over without a sound. This is a limit of the chip, not of the firmware: the lever would be a second core or a hardware decoder, which this board has not got.

Stereo line out comes from an external I2S DAC on a carrier board, fed from header pins through the ESP32-C5's GPIO matrix. No part is chosen. The options are recorded on Audio out against what this board can give a DAC: three I2S lines, no master clock, I2C only on the board's own bus, one spare GPIO and two slow expander lines, 5 V. Raspberry Pi DAC HATs are built without a host master clock because the Pi header carries none, which is where the register starts; a soldered PCM5102A is worked through as the example of a part the carrier board carries itself.

A mono line out from the ES8311 is not a carrier-board option. The codec's outputs reach only the amplifier, so it would mean a wire soldered to the panel.

Free GPIOs on the board's headers, from the schematic, with what the ESP32-C5 data sheet says about each:

Header Pins Free GPIOs Note
J8, SH1.0 12-pin 1 GND, 2 USB 5 V, 3 USB D-, 4 USB D+, 5 GND, 6 3V3, 7 GPIO 2, 8 GPIO 3, 9 EXIO6, 10 EXIO7, 11 BOOT0, 12 CHIP_PU GPIO 2, GPIO 3 Both are strapping pins, MTMS and MTDI, floating by default (Table 3-1); neither affects SPI boot (Table 3-3). J8 also carries USB and 5 V: the one cable from the panel to a carrier board.
J6, UART 4-pin 1 RXD (GPIO 12), 2 TXD (GPIO 11), 3 3V3, 4 GND GPIO 11, GPIO 12 UART0, the serial console by default, and where the ROM prints its boot messages (3.3). Free once the console moves to the USB port.
J5, I2C 4-pin 1 SCL (GPIO 1), 2 SDA (GPIO 0), 3 3V3, 4 GND none The board's own shared I2C bus, with 2 kohm pull-ups: touch, IO expander, codec, IMU, clock and humidity sensor hang on it. Not available for I2S.

A stereo I2S DAC needs three signals (bit clock, word clock, data), and four free GPIOs are on the headers, so the stereo route fits without touching the board. The firmware uses GPIO 2 for the bit clock, GPIO 3 for the word clock and GPIO 11 for data, leaving GPIO 12 spare; a Raspberry Pi DAC HAT on those pins plays from the card, and the wiring is on Audio out.

One constraint shapes it. The ESP32-C5 has a single I2S controller, and its transmit channel is already wired to the onboard ES8311. An external DAC does not get an I2S of its own: it takes that same transmit channel on header pins, through the GPIO matrix, which allows one peripheral output on several pins at once (TRM 8.5.4). The firmware does this: the codec keeps its clocks on GPIO 24 and 25 and its playback data on GPIO 26 while the header pins carry the same signals, so the speaker and the DAC play the same frames. Whether the codec's microphone can record at the same time is not yet tried; see Audio out.

The carrier board

A carrier board for this panel, for either device on it, carries:

  • 5 V to the panel, and USB from the panel to a jack at the back of the box, both through J8
  • the panel's reset and boot, through J8's CHIP_PU and BOOT0, if buttons are wanted on the box

For the player it adds:

  • a Raspberry Pi header and a six-pin module header on the same three I2S lines, the board's I2C and 5 V, so a DAC HAT or a bare module plugs in
  • the PCM5102A footprint, its low-noise 3.3 V regulator fed from the same 5 V, its output filter and a line-out jack, for the soldered option
  • a second cable to J6 for the data line, and a third to J5 for a DAC that is configured over I2C

Audio out has the register of options, the values and the footprints. Nothing on the carrier board is needed by the Volumio companion beyond power.

Sources

Clone this wiki locally