Black Lion lite
A small, cheap network streamer with a properly isolated, clean-clocked DAC, running squeezelite-esp32 firmware with no custom code.
Where it stands
This is a design on paper, not a finished board. The block diagram, parts list, power tree and floorplan are done. The schematic has not been drawn in KiCad yet, nothing has been ordered from the board house, and the firmware settings below are untested. The next step is a jumper-wired prototype from cheap modules, to prove the firmware, the DAC start-up and Ethernet before paying for circuit boards.
What it does
| Feature | How |
|---|---|
| FLAC, MP3, AAC, ALAC, WAV | Decoded on the ESP32 by squeezelite. FLAC and ALAC top out at 96 kHz. The default build cuts 24-bit to 16-bit; the 32-bit build keeps true 24-bit. |
| Sources | Lyrion (LMS) server on the Mac mini, AirPlay (v1), Spotify Connect, Bluetooth from a phone |
| Network | Wi-Fi, or wired Ethernet through a W5500 |
| Outputs | Dual RCA and a 3.5 mm line out, the same signal in parallel |
| Control | Phone apps or Lyrion, optional IR remote, one button, a status LED |
| Power | One USB-C 5 V supply, which also flashes the firmware |
Left out on purpose: AirPlay 2 grouping with HomePods, and headphone drive on the 3.5 mm jack. It is a line out: fine for powered speakers and amplifiers, wrong for most headphones. (Why.)
Two worlds on one board
The noisy side holds the USB port, the 3.3 V buck converter, the ESP32 with its Wi-Fi and Bluetooth radio, and the Ethernet chip. The quiet side holds the DAC, its clock, its regulators, the op-amps and the output jacks. Each side has its own ground.
Nothing crosses between them except signals passing through digital isolators and power passing through the isolated DC-DC converter's transformer. That keeps Wi-Fi current spikes and charger or computer ground noise away from the audio, and it breaks ground-loop hum with whatever amplifier the streamer plugs into. The Ethernet jack is isolated too, by its own magnetics.
- ESP32squeezelite
- CA-IS3730HNI2S across the barrier
- ES9038Q2M100 MHz clock, its own regulator
- 2 × OPA1656Differential to single-ended
- RCA, 3.5 mmLine out
Why each part
| Block | Choice | Why |
|---|---|---|
| Brain | ESP32-WROVER-E | Only the classic ESP32 has Bluetooth Classic for phone streaming, and squeezelite needs the PSRAM. About $4 with antenna, FCC-certified module. |
| DAC | ES9038Q2M | Top-tier measured performance in a small package. Its built-in DPLL rejects incoming I2S jitter, so jitter from the ESP32 and the isolator mostly does not matter. |
| DAC clock | Crystek CCHD-575, 100 MHz | The DAC retimes everything to this clock, so its quality is the conversion clock's quality. It sits on the quiet side with its own regulator. Nested pads take a $0.51 fallback part, so the two can be compared by ear. |
| Isolation | CA-IS3730HN, ISO1540, isolated ±5 V DC-DC | True galvanic isolation for the audio data, the DAC's control bus and its power. |
| Analog supply | LT3042 to 3.3 V | About 1 µV of noise, and very high rejection at the DC-DC converter's switching frequency. Filtered ±5 V feeds the op-amps. |
| Output stage | OPA1656 | Turns the DAC's balanced output into RCA, cancels common-mode noise, 2 Vrms on ±5 V rails. |
| Ethernet | W5500 over SPI | Uses a handful of pins instead of about ten, and avoids the module's PSRAM pin conflict. |
| Flashing | USB-C, CH340C, auto-reset | Plug in and flash from the web installer. No separate programmer. |
Layout rules
- Four layers: signals and parts on top, solid ground on layer 2, power on layer 3. The ground is split along the barrier with a 2 to 3 mm copper-free gap on every layer. Only the isolators and the DC-DC converter straddle it.
- The 100 MHz clock sits within about 5 mm of the DAC's clock pin, on a short trace over unbroken audio ground.
- The Wi-Fi antenna goes at the board edge with no copper under it, far from the DAC corner.
- Audio-path capacitors are C0G, output-stage resistors 0.1% thin-film.
- The RCA and 3.5 mm grounds tie to audio ground only.
What it costs
From JLCPCB parts-library prices checked on 28 October 2026:
- Parts per board
- About $31 with the basic clock. About $90 with the Crystek at JLC's list price.
- First run of five
- About $260 to $300, or $55 to $60 a board
- Run of twenty
- About $40 a board, as setup fees spread out
Problems found so far
- The DAC is out of stock at the board house. Plan: source it separately and send it in, or redesign around the in-stock ES9018K2M. Sonically the two are not meaningfully different; the trade is redesign time against lead time.
- The premium clock is not stocked either. The nested pads mean every board works with the cheap clock and can be upgraded by hand. Its four large pads are beginner-solderable.
- The isolated ±5 V module and the RCA jack have very low stock. A fallback is chosen: a 5 V to 5 V module plus a charge pump for the negative rail.
- The first isolator picked had the wrong channel directions. Swapped for one with three forward channels, which is also cheaper.
Still open
- Bluetooth and Ethernet at the same time is not documented. Test it on the prototype.
- The DAC's register start-up values come from an open-source Linux driver, not from the chip maker. Confirm on the prototype.
- Output-stage resistor and capacitor values need finishing and simulating before the schematic.
Firmware settings (untested)
Pasted into the squeezelite-esp32 web settings after flashing. All numbers are decimal.
dac_config = model=I2S,bck=26,ws=25,do=22,sda=21,scl=27,i2c=72
spi_config = mosi=23,miso=19,clk=18,host=2
eth_config = model=w5500,cs=5,speed=20000000,intr=34,rst=33,host=-1
set_GPIO = 35=ir:nec,2=green
The DAC will not make a sound until it is told to over I2C: the soft-start bit in register 14 must be set, and volume starts at −40 dB. The start-up writes set 32-bit I2S input, 0 dB volume on both channels (squeezelite handles volume digitally, which is also why the 32-bit build is the one to use) and soft start.
dac_controlset = {"init":[{"reg":1,"val":192},{"reg":15,"val":0},{"reg":16,"val":0},{"reg":14,"val":140}],
"poweron":[{"reg":7,"val":254,"mode":"and"}],"poweroff":[{"reg":7,"val":1,"mode":"or"}]}
A listening experiment is planned: register 7 picks the DAC's built-in filter shape, and the plan is to compare them by ear.
The prototype first
Before any circuit board: an ESP32-WROVER dev board, an ES9038Q2M module that takes I2S on pin headers, a W5500 Ethernet module and jumper wires. It tests the firmware settings, the DAC start-up, and Ethernet with Bluetooth. It also gives the "before" picture: listening for Wi-Fi chirps and hum on a board with no isolation at all.