Build details for DIY multi-room hifi system
Find a file
Jeremy Kidwell 0f70d6d2ae updated LR
2022-08-13 18:51:33 +01:00
build1_esp32-audio-kit updated 2022-08-11 19:38:00 +01:00
build2_raspi_coreplayer updated 2022-08-11 19:38:00 +01:00
images updated 2022-08-11 19:38:00 +01:00
.gitignore updated 2022-08-11 19:39:10 +01:00
README.md updated LR 2022-08-13 18:51:33 +01:00

Howto Multi-room HiFi

Following are (work in progress!) build details for my DIY multi-room hifi system. I've tried a fair number of possible builds and settled on the following:

Software:

To get a sense of the broader setup I'm runing, you can read about it here.

It's worth noting that this isn't my final server configuration. I don't have a good solution for audiobooks, and I'll likely switch to Roon when I can afford to purchase the software. In the meantime, I am watching the jellyfin project closely to see if it can become as viable as Plex is for many people as a media server sharing music.

Devices:

Server

Music library and server-side applications are on a debian server running inside a Proxmox hypervisor

Kitchen (total cost = £20)

Music is playing on a Roberts Radio via an a1s model esp32-audio-kit (£16) board which is running esp32-squeezelite which provides digital to analog conversion and output to the Roberts radio using a 3.5mm stereo plug and gets power from the Roberts radio via the hidden USB port inside. This device supports direct streaming via airplay, bluetooth or as an LMS client.

Roberts now sells units which support bluetooth streaming, but this is fairly limited functionality and unnecessarily expensive. Rather than getting a new unit, I "upgraded" this old radio and it works great!

Installation process:

h/t to Damian Darfdas for writing up a howto that I followed for this process.

Possible prerequisite steps:

  1. Install python3
  2. Install esptool
  3. Erase the flash memory on your device: esptool.py erase_flash with a h/t for tip here: (https://esp32.com/viewtopic.php?t=11439).

Note: the manufacturer seems to shift hardware on these boards without notice, so you may need to experiment with flashing different images. I had to switch from 32 to 16 bit image after much frustration. You can find details of my initial failure here: [https://www.reddit.com/r/esp32/comments/wh0ash/esp32audiokit/].

Now for the main event

  1. Download binary for ESP32-audio-kit device. I used 2.I2S-4MFlash.16.1023.master-cmak
  2. Flash your esp32 device with the Squeezelite binary. You can use a command line tool like esptool or a GUI tool like esphome-flasher or [https://raspiaudio.github.io/] (selecting 'i2s' as the product).

Dining Room (total cost = £110)

Music plays on a Raspberry Pi which cost £36 and an IQAudio DigiAmp+ board which cost £30. This device runs piCorePlayer which runs as an LMS client. The device also has a rotary encoder (KY-040), 128X64 Pixel OLED display (SSD1306) and an IR receiver which I use with an old apple remote. This is a pretty nice little Class D amplifier, running full-HD 192kHz / 24bit audio at 2x35w, which powers a set of Wharfedale 9.1 speakers I picked up used for £50

  • I've tried running this device using Volumio 3 and Mopidy (in June-July 2022). I found both of these platforms to be overly complex and unstable as music players so eventually settled on LMS friendly piCorePlayer.

Living Room (total cost = £26.50 + case)

For our front room, I've built a DIY sonos-style player. This uses a 35W TDA8932 BTL Mono Amplifier Board (this cost £5) which powers a single Cambridge Audio S20 speaker which I got used for £10 running in mono (for obvious reasons).

We stream audio to this amplifier using a simple ESP32 WROVER Development Board (an Lilygo TTGO T8 v1.8 board) running esp32-squeezelite client software which connects to the amp using a £4 PCM5102 DAC. The reason I've gone for separate DAC/Amp boards in this setup is because there are very few amplifier boards with a build-in DAC chip, and this really limits your overall options. I'm aware that there are many projects out there using a board like the 3W MAX98357 (like here and here), but at this point I think going with separate boards is the best approach. I've drawn on the terrific SqueezeAMP project for some elements of my design.

For this build, I found @schreibfaul1's repository quite helpful. There are a fair few youtube videos out there detailing the build as well.

Wiring the device

Connect the following pins between the TTGO T8 ESP32 board and your I2S DAC:

ESP pin PCM5102 I2S signal
GPIO25 LCK
GPIO26 DATA IN (DIN)
GPIO27 BCK
GND SCK, GND
5V VIN

Schematic for wiring

Next wire up the amplifier (TDA8932). This is a bit simpler:

  1. The power pins can go to a DC converter. I re-used one from an old laptop. Optimum is 24V at 2amp. See note below re: DC power.
  2. I wired input via (just) two short wires to the PCM5102 board which has spaces for wired out labelled "G R G L" (or sometimes just R G L with a shared Neutral wire). Note I'm not using the 3.5mm adapter here because I need mono for this amplifier board, this also means that I've skipped the G/R connection points. *
  3. Then I soldered on two wires which connect to speaker terminals from the amplifier audio out points.

Note: I've drawn a lot of this information from a really helpful discussion amidst experts on diyaudio forums.*

Adding DC Power for the amplifier

Sourcing, hacking and making power supplies (PSU) for audio devices is a whole art unto itself. I usually keep a box full of discarded AC adapters from old electronics around the house. This is sifted by voltage, there are low voltage 3.3 or 5V adapters for cell phones and the like with similarly low amperage/wattage ratings. Then there are the bigger "bricks" taken from laptop power adapters, which range up to 90V or even 110V in some cases. There is a whole community around repurposing old computer power supplies as well. This amplifier is small, but it does require some power, so I went with the laptop power brick. This has more power than the amp needs, with the Lenovo PSU I found supplying 90W at 20V or about 4.5A. I only need 2A at 20V, so was wondering if I could bridge over another power wire to USB micro for my ESP32 and save myself a cord. This isn't current sharing, strictly speaking, because I want two different voltages: 3.3V for the ESP32 and as close to 24V as I can get for the amp. So I've aquired a couple DC-DC converters to connect to this PSU (via a barrel adapter). There are two ways to wire up this setup:

(1) Simply wire your 20-24V laptop PSU straight to the amplifier AND run a separate power lead via a USB charger to the ESP32

(2) Split the power coming in from your PSU to both.

This second option is more elegant, but also a lot more complicated. You need to reduce the voltage for your ESP32 carefully so you don't fry it. I haven't run this solution yet, but you can view the conversation on DIY Audio if you want to get a sense of how it will probably go.

Software Installation:

Flash your ESP32 using the same process detailed above, and you're all set!

Future plans:

  • Buy and deploy a Roon server
  • Deploy HQPlayer
  • Get a used Denon receiver with Ethernet connectivity to swap in on the Living Room

Resources:

As I've been going along, I've found some pretty helpful resources on the internet. So if you're also planning on diving into DIY Audio, here are the sources I'd recommend:

  • The DIYAudio Forum
  • Slimdevices Forum (for Logitech Squeezebox originally, but now with lots of DIY and home to Squeezelite-ESP32 developers)
  • Github - run a search for your part names and discover previous builds like this one!
  • Hackaday - same as above. Lots of interesting builds documented on here
  • AVForums - not as much hacking on here as DIYAudio, but still lots of interesting notes about components and quality
  • AudioScience Review Forums - seriously exacting standards in terms of audio quality, good discussion on the underlying factors in device performance
  • DIY Budget Audio blog
  • R/Selfhosted reddit feed - discussion of software and home servers