Skip to content

sonocotta/esparagus-media-center

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

44 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Esparagus Media Center

Open Source Hardware Open Source Software I sell on Tindie
Dev Chat

DSC_0724

Esparagus Media Center is a series of ESP32-based media center devices. They all run Squeezelite-ESP32 software and have similar media capabilities, but are aimed at different use cases. They share a similar look, and compared to my earlier designs, they have a great-looking aluminum case.

Our Crowd Supply campaign for backing the manufacturing of Esparagus series boards recently has finished with success, and I'm eternally grateful to every backer for that support.

Table of Contents

Why Esparagus

ChatGPT made me call it that way. I only asked if there is a fruit or vegetable that is phonetically close to ESP32, which is the heart of this device.

Motivation

I did few audio projects in the past, some using ESP32, some using larger Orange Pi and Raspberry Pi devices. Each has its pros and cons, and with each iteration, I'm trying to focus on the details that were working best for me, while actually using them.

What I like about ESP32 is how lightweight it is. It barely draws power, so you may not care to turn it off at all. It boots in seconds and is ready for use in a snap. Still, it is capable and works at par with Linux SBC solutions for audio applications, while costing a fraction of their price. Combined with a proper Hi-Fi DAC you would not tell a difference to commercial devices standing side by side and costing much more.

Over the last few years, I have seen a few amazing software products created to deliver audio on the ESP32, like squeezelite-esp32 or  euphonium. Esparagus media center devices are designed specifically to run these great pieces of software and bring a new life into aging audio equipment that most of us have at home but do not use that much these days, since it is not working with Spotify and the family.

Esparagus HiFi MediaLink

Esparagus HiFi MediaLink is a handy low-cost media device that will upgrade your legacy audio system with cutting-edge internet streaming capabilities and enhance your audio experience. It exposes line-level output that you can plug into a stereo amplifier. It uses the legendary PCM51 series DAC with supreme audio quality.

DSC_0702

Loud Esparagus

Loud Esparagus is aimed to be paired with small-to-medium-sized speakers in a small room. It uses a dual MAX98357 Hi-Fi DAC that will output 3W per speaker. Admittedly not much, but well enough for a kid's room or workplace. Due to the D-class amp, it barely uses power and can be paired with a standard USB wall charger.

DSC_0689

Louder Esparagus

Louder Esparagus is a top-of-the-range model that uses modern highly capable TAS5805M DAC and is aimed to be paired with medium-to-large speaker systems. With 25W per channel stereo output, it packs a punch and can easily enlive living quarters or dorm rooms. It is highly efficient, but much more demanding for power when cranked, therefore it uses USB-C Power Delivery to pull up to 65W from the wall power adapter. It can be used both with Wi-Fi and Ethernet (to make sure bad Wi-Fi would not interrupt the stream)

The latest update allows a direct power through barrel jack as an alternative to the USB-PD to provide an alternative and allow more precise control over the power source for your audio

USB-PD NOPD
DSC_0719 DSC_0085

Features

HiFi-ESP32 HiFi Esparagus Loud-ESP32 Loud Esparagus Louder-ESP32 Louder Esparagus Louder Esparagus NOPD
Image DSC_0002 DSC_0709 DSC_0002 DSC_0706 DSC_0013 DSC_0713 DSC_0087
MCU ESP32-WROVER-N16R8 ESP32-WROVER-N16R8 ESP32-WROVER-N16R8 ESP32-WROVER-N16R8 ESP32-WROVER-N16R8 ESP32-WROVER-N16R8 ESP32-WROVER-N16R8
DAC PCM5100A 32bit Stereo DAC -100 dB typical noise level PCM5100A 32bit Stereo DAC -100 dB typical noise level Dual I2S DAC (MAX98357) with built in D-Class amp Dual I2S DAC (MAX98357) with built in D-Class amp Stereo I2S DAC (TAS5805M) with built in D-Class amp Stereo I2S DAC ( TAS5805M ) with built in D-Class amp Stereo I2S DAC ( TAS5805M ) with built in D-Class amp
Power 5V over USB-C, 2x LP5907 3.3 V Ultra-Low-Noise LDO for analog section 5V over USB-C, 2x LP5907 3.3 V Ultra-Low-Noise LDO for analog section 5V from USB-C 5V from USB-C Up to 26V from external PSU Up to 20V from USB-C PD Up to 26V from external PSU
Output, 4Ω Non-amplified stereo output, 2.1V RMS Non-amplified stereo output 2x 3W 2x 3W 2x 32W (4Ω, 1% THD+N) 2x 32W (4Ω, 1% THD+N) 2x 32W (4Ω, 1% THD+N)
Output, 8Ω - - 2x 5W 2x 5W 2x 22W (8Ω, 1% THD+N) 2x 22W (8Ω, 1% THD+N) 2x 22W (8Ω, 1% THD+N)
PSRAM 8MB PSRAM (4MB usable) 8MB PSRAM (4MB usable) 8MB PSRAM (4MB usable) 8MB PSRAM (4MB usable) 8MB PSRAM (4MB usable) 8MB PSRAM (4MB usable) 8MB PSRAM (4MB usable)
Peripheral IR reader (optional)
RGB strip (optional)
SSD1306 128x64 OLED screen (optional)
WS2812B RGB Led
SSD1306 128x64 OLED screen (optional)
IR reader (optional)
RGB strip (optional)
SSD1306 128x64 OLED screen (optional)
WS2812B RGB Led
SSD1306 128x64 OLED screen (optional)
IR reader (optional)
RGB strip (optional)
SSD1306 128x64 OLED screen (optional)
WS2812B RGB Led
SSD1306 128x64 OLED screen (optional)
WS2812B RGB Led
SSD1306 128x64 OLED screen (optional)
Connectivity WiFi
BT4.2
BLE
Ethernet (optional module)
WiFi
BT4.2
BLE
WiFi
BT4.2
BLE
Ethernet (optional module)
WiFi
BT4.2
BLE
WiFi
BT4.2
BLE
Ethernet (optional module)
WiFi
BT4.2
BLE
Ethernet (optional module)
WiFi
BT4.2
BLE
Ethernet (optional module)
Size 86 x 56 x 20mm 80 x 50 x 20mm 86 x 56 x 20mm 80 x 50 x 20mm 86 x 56 x 20mm 100 x 80 x 38mm 100 x 80 x 38mm
Software support Arduino samples, squeezelite-esp32, snapcast, ESPHome config Arduino samples, squeezelite-esp32, snapcast, ESPhome config Arduino samples, squeezelite-esp32, snapcast, ESPHome config Arduino samples, squeezelite-esp32, snapcast, ESPhome config Arduino samples, squeezelite-esp32, snapcast, ESPHome config Arduino samples, squeezelite-esp32, snapcast, ESPhome config Arduino samples, squeezelite-esp32, snapcast, ESPhome config

Onboard PSRAM

Audio streaming requires proper buffering to work, even with ESP32 500K of RAM it is a challenging task. All Esparagus boards are based on WROVER modules that have an onboard PSRAM chip.

Board Pinout

Common to every board

I2S CLK I2S DATA I2S WS PSRAM CE PSRAM CLK DAC EN (MAX98357A)
ESP32 26 22 25 16 17 13

Peripheral (Loud Esparagus & Esparagus HiFi MediaLink )

SPI HOST SPI CLK SPI MOSI SPI MISO OLED DC OLED CS OLED RST WS2812 RGB LED RELAY EN
ESP32 2 18 23 19 4 5 32 33 21

TAS5805M DAC (Louder Esparagus)

I2C CLK I2C DATA PWDN FAULT
ESP32 27 21 33 34

Peripheral - OLED Screen and W5500 Ethernet (Louder Esparagus)

SPI HOST SPI CLK SPI MOSI SPI MISO LAN RES LAN CS LAN INT OLED DC OLED CS OLED RST
ESP32 2 18 23 19 14 5 35 4 15 32

Other Peripheral (Louder Esparagus)

USB-PD EN USB-PD POWER GOOD IR INPUT WS2812 RGB LED
ESP32 13 36 39 12

Software samples

In the software section two firmware examples are provided.

  • esp32-i2s-bare is base I2S implementation based on ESP-IDF implementation directly.
  • esp32-i2s-esp8266audio is based on excellent ESP8266Audio library (it works with the whole ESP range, don't get fooled by the name), providing minimum code implementation.
  • esp32-i2s-web-radio is based on the same library, providing minimum web-readio stream player. It expects a playlist as an input in the 'data' folder.

Platformio IDE

All samples are provided as Plarformio IDE projects. After installing it, open the sample project. Select the proper environment based on your dock. Run the Build and Upload commands to install necessary tools and libraries, and build and upload the project to the board. Communication and proper upload method selection will be handled by IDE automatically.

Arduino IDE

Follow the ESP8266Audio library guide.

Using Esparagus Media Center with the Home Assistant

There is a number of ways Esprargus Media Center devices can be integrated into the Home Assistant setup. Each of them gives a unique feature, losing some other in return. As usual, there is no perfect solution for everyone, but perhaps there is one for you. Below is the summary table of the methods known to me and tested by me.

Integration type Tested Description Pros Cons
LMS/Airplay Yes Connect to Music Assistant as external protocol device. Can play your media library and internet radio Still can use squeezelite, i.e. use Spotify Connect and Apple Airplay when HA is not using the device No native integration into HA, only works with Music Assistant
ESPHome way Yes Connect as HA media device. Can be used with any HA integration, including Music Assistant, Text-to-Speach announcements, alarms, etc More integrations with HA, more flexibility in use case No longer works as Spotify, Airplay, etc.
Snapcast way Yes Connect to Music Assistant as snapcast protocol device. Can play your media library and internet radio. Perfect for multiroom sync (Sonos-like, perhaps even better). Can be used with other Snapcast servers around the house No longer works as Spotify, Airplay, etc. No native integration into HA only works with Music Assistant

Below are specific steps that you need to follow to spin up Esprargus Media Center in the Home Assistant

Configuring Home Assistant

I prefer to use HA with the Music Assistant. This way you can integrate both your media library and internet radio and have a nice UI/UX at the same time (including mobile).

Generally, you need to have supported HA (native) installation and follow these steps. I will place here a short version to have a reminder for future myself

Install instructions
Step Screenshot
Add SSH Addon

Navigate to Settings > Addons > Add Addon
Search for SSH and install it.
Enable Show in sidebar switch while you there
image
Start SSH Addon

SSH addon won't start until you add at least one SSH public key to it. So navigate to SSH Addon Settings and add a key (or password) to the config
It should be able to start now
image
Install Community Store

Run this command in the Terminal session
wget -O - https://get.hacs.xyz | bash -
You need to restart your HA after that
image
Add HACS

Navigate to Settings > Devices as Services > Integrations > Add Integration, search for HACS, and add it to the HA
You'll need to authorize your extension to your GitHub account
image
Install Music Assistant via HACS

From the HACS menu search for Music Assistant and press the Download button
You need to restart HA again
In the Settings > Addons you should be able to see MA and enable sidebar navigation for it.
image
Configure Music Assistant

Before you enable Integration (that will in turn add speaker devices) you need to enable MA providers
Go to MA > Settings > Providers and enable both Music providers and Player providers that interests you. If not sure, enable all of them, you can disable them later on.
image
Add Music Assistant Integration

Navigate to HA Settings > Devices & services > Integrations. Click the big + ADD INTEGRATION button, look for Music Assistant, and click to add it.
It should discover and add media devices based on the providers you're enabled in the previous step
image
Add Music Devices discovered by MA

You should be able to add and use discovered devices. More details in below sections
image

LMS or Airplay

gh://sle118/squeezelite-esp32

When you have squeezelite-esp32 installed on your Esparagus device (either stock or manually going through steps), it will announce itself by multiple protocols in the network:

  • Bluetooth
  • LMS or slimproto - auto-discovered by HA
  • Apple Airplay - auto-discovered by HA
  • Spotify Connect

The power of this method is that you can use all four ways outside of HA, for example using your smartphone and Spotify app, and still have it integrated into HA at the same time.

Install instructions

Native HA integration

Make sure your MA Slimproto provider is disabled, it will conflict with the native HA integration

Step Screenshot
Add SlimProto Integration

Navigate to HA Settings > Devices & services > Integrations. Click the big + ADD INTEGRATION button, look for SlimProto, and install it.
image
Add HA MediaPlayers provider to MA image

Integrate into Music Assistant directly

Disable SlimProto integration in the HA if you want to go the MA way. If you enabled SlimProto and AirPlay providers in the MA, you should find your device as both a Slimproto device and an Airplay device. It is up to you which protocol to use, generally, they both work perfectly well.

ESPHome way

Louder-ESP32 running ESPHome

Install instructions
Step Screenshot
Add ESPHome Addon

Navigate to HA Settings > Addons > Add Addon
Search for SSH and install it.
Enable Show in sidebar switch while you there
image
Prepare Esparagus for ESPHome onboarding

Use Web Flasher to flash stock ESPHome into device
image
Onboard Esparagus ESPHome device into HA

Go to the HA ESPHome page and you should be able to find a new device. You need to onboard it with the below config (feel free to change names)
This will take a moment or two
image
Validate device in the ESPHome image
Add ESPHome Integration

Navigate to HA Settings > Devices & services > Integrations. Click the big + ADD INTEGRATION button, look for ESPHome, and click to add it.
It should discover and add ESPHome media devices based on the previous step
image
Use your media device in the HA image
Use your media device in the MA

Add Music Assistant HA MediaPlayers provider to discover new Media device
image

Esparagus HiFi and Loud Esparagus ESPHome config

substitutions:
  name: esphome-web-e002d0
  friendly_name: loud-esparagus
  long_devicename: "Loud Esparagus"

esphome:
  name: "${friendly_name}"
  name_add_mac_suffix: false
  comment: "${long_devicename}"
  on_boot:
    priority: 800
    then:
    - media_player.volume_set:
        id: loudesp32
        volume: 10%

esp32:
  board: esp32dev
  framework:
    type: arduino

# Enable logging
logger:

# Enable Home Assistant API
api:

# Allow Over-The-Air updates
ota:

wifi:
  ssid: !secret esphome_wifi_ssid
  password: !secret esphome_wifi_password
  ap:
    ssid: "$name"
    password: password

captive_portal:

psram:
  mode: octal
  speed: 80MHz

i2s_audio:
  i2s_lrclk_pin: GPIO25
  i2s_bclk_pin: GPIO26

media_player:
  - platform: i2s_audio
    name: $long_devicename
    id: loudesp32
    dac_type: external
    i2s_dout_pin: GPIO22
    mode: stereo

Louder Esparagus ESPHome config

substitutions:
  name: esphome-web-e002d0
  friendly_name: louder-esparagus
  long_devicename: "Louder Esparagus"

esphome:
  name: "${devicename}"
  name_add_mac_suffix: false
  comment: "${long_devicename}"
  includes:
    - louderesp32.h
  platformio_options:
    lib_deps: "Wire"
  on_boot:
    priority: 800
    then:
    ## Set a volume limit just to be safe...
    - media_player.volume_set:
        id: louderesp32
        volume: 10%

esp32:
  board: mhetesp32minikit

wifi:
  ssid: !secret esphome_wifi_ssid
  password: !secret esphome_wifi_password
  ap:
    ssid: "$devicename Fallback Hotspot"
    password: !secret esphome_ap_password

captive_portal:
### Optional if you want ethernet (then remove all wifi config) ###
#ethernet:
#  type: W5500
#  clk_pin: GPIO18
#  mosi_pin: GPIO23
#  miso_pin: GPIO19
#  cs_pin: GPIO05
#  interrupt_pin: GPIO35
#  reset_pin: GPIO14

logger:
  level: DEBUG

api:
  encryption:
    key: !secret esphome_api_key

ota:
  password: !secret esphome_ota_password

psram:
  mode: octal
  speed: 80MHz

switch:
  - platform: custom
    lambda: |-
      auto tas5805 = new TAS5805();
      App.register_component(tas5805);
      return {tas5805};
    switches:
      name: "Enable Amp"

i2c:
  sda: GPIO21
  scl: GPIO27
  scan: True
  id: i2c_component

i2s_audio:
  i2s_lrclk_pin: GPIO25
  i2s_bclk_pin: GPIO26

media_player:
  - platform: i2s_audio
    name: $long_devicename
    id: louderesp32
    dac_type: external
    i2s_dout_pin: GPIO22
    mode: stereo

For the last one to work you also need to place this file under /config/esphome/louderesp32.h

//###########################################################################
//## ESPHome custom component for the Louder ESP32                         ##
//## Get it here: https://www.tindie.com/products/sonocotta/louder-esp32/  ##
//## Check the blog article on https://www.espthings.io/louder-esp32       ##
//###########################################################################
#include "esphome.h"
#include <Wire.h>
#define DEVICE_CTRL_2_REGISTER 0x03
#define PWDN_PIN 33
#define I2C_ADDR 0x2D
class TAS5805 : public Component, public Switch  {
  public:
    void setup() override {
      pinMode(PWDN_PIN, OUTPUT);
      digitalWrite(PWDN_PIN, LOW);
      delay(200);
      digitalWrite(PWDN_PIN, HIGH);
      Wire.begin();
      Wire.beginTransmission(I2C_ADDR);
      if (Wire.endTransmission() != 0) {
        ESP_LOGE("TAS5805", "TAS5805 not found at address 0x2D");
        return;
      }
      Wire.beginTransmission(I2C_ADDR);
      Wire.write(DEVICE_CTRL_2_REGISTER);
      Wire.write(0x02);
      Wire.endTransmission();
      delay(50);
      Wire.beginTransmission(I2C_ADDR);
      Wire.write(DEVICE_CTRL_2_REGISTER);
      Wire.write(0x03);
      Wire.endTransmission();
      ESP_LOGI("TAS5805", "TAS5805 initialized.");
    }
 
    void write_state(bool state) override {
      uint8_t value = state ? 0x03 : 0x00;
      Wire.beginTransmission(I2C_ADDR);
      Wire.write(DEVICE_CTRL_2_REGISTER);
      Wire.write(value);
      Wire.endTransmission();
      publish_state(state);
    }
};

Snapcast way

Snapcast is a multi-room audio player that synchronizes playback across multiple devices, ensuring that audio streams play simultaneously in perfect sync. It consists of a server, which distributes audio streams, and clients, which receive and play the audio. There is a snapcast fork that was created to implement Esparagus specific configuration on top of the ESP32 Snapcast client. This allows us to build flexible and extendable setups connected to various sources, like Mopidy, MPD or Home Assistant.

Install instructions
Step Screenshot
Flash Snapcast to the Esparagus board using web-flashing tool
image
Enable Snapcast in the MA

Got to the Ma and enable Snapcast provider. Your speaker will be discovered automatically, as long as it is running
image
Use your media device in the MA

Play your audio into new device
image
Use a group of speakers for multi-room setup

In the MA settings > Players create a new group player and add as many Eparagus players as you need. Use that group speaker to get a synced audio
image

Squeezelite-ESP32

Squeezelite-ESP32 is a multimedia software suite, that started as a renderer (or player) of LMS (Lyrion Music Server, formerly Logitech Media Server). Now it is extended with

  • Spotify over-the-air player using SpotifyConnect (thanks to cspot)
  • AirPlay controller (iPhone, iTunes ...) and enjoy synchronization multiroom as well (although it's AirPlay 1 only)
  • Traditional Bluetooth device (iPhone, Android)

And LMS itself

  • Streams your local music and connects to all major online music providers (Spotify, Deezer, Tidal, Qobuz) using Lyrion Music Server - a.k.a LMS with multi-room audio synchronization.
  • LMS can be extended by numerous plugins and can be controlled using a Web browser or dedicated applications (iPhone, Android).
  • It can also send audio to UPnP, Sonos, Chromecast, and AirPlay speakers/devices.

All Esparagus boards are tested with Squeezelite-ESP32 software. It can be flashed using nothing but a web browser. You can use Squeezelite-ESP32 installer for that purpose.

How to flash and configure

Use Esparagus Squeezelite-ESP32 installer to flash the firmware. It has been preconfigured to work with Esparagus boards and will configure all hardware automatically.

Install instructions
Select correct device first image
Connect the device to USB port and select it from the list image image
Press Flash and wait around 2 minutes image
(Optional) You may enter the serial console to get more information, like device IP and boot logs image
Device is in recovery mode. Connect to squeezelite-299fac wifi network with squeezelite password (your network name suffix will be different) image
When redirected to the captive portal let the device scan wifi network and provide valid credentials
You can use provided IP address (http://192.168.1.99/ on the screenshot) to access settings page image
(Optional) You may change device names to something close to your heart image
Exit recovery image

You can use it now

Bluetooth Spotify Connect AirPlay LMS Renderer
image image image image

Squeezelite Bug causing boot loop

Before version 1681 squeezelite-esp32 had a bug that caused a boot loop with certain LMS servers when RGB LED was used for visualizations. It seems to be fixed in 1681, but the quick workaround is to clear led_vu_config NVS setting.

Hardware

Esparagus HiFi MediaLink Loud Esparagus Louder Esparagus Louder Esparagus NOPD
DSC_0711 DSC_0702 DSC_0712 (copy 1) image

Please visit hardware section for board schematics and PCB designs. Note that PCBs are shared as multi-layer PDFs as well as Gerber archives.

Boxed

Esparagus HiFi MediaLink Loud Esparagus Louder Esparagus Louder Esparagus NOPD
image image DSC_0717 (copy 1) JPG-mh image

PCB

Esparagus HiFi MediaLink Loud Esparagus Louder Esparagus
image image DSC_0712 (copy 1) JPG-mh (1)

BTL and PBTL mode (TAS5805M DAC)

TAS5805M DAC Allows 2 modes of operation - BTL (stereo) and PBTL (parallel, or mono). In Mono amp will use a completely different modulation scheme and basically will fully synchronize output drivers. Jumpers on the board allow both output drivers to connect to the same speaker. The most important step is to inform the Amp to change modulation in the first place via I2C comman. In the case of sqeezelite DAC controlsset value is the following:

dac_controlset: `{"init":[{"reg":3,"val":2},{"reg":3,"val":3},{"reg":2,"val":4}],"poweron":[{"reg":3,"val":3}],"poweroff":[{"reg":3,"val":0}]}`

compared to default:

dac_controlset: `{"init":[{"reg":3,"val":2},{"reg":3,"val":3}],"poweron":[{"reg":3,"val":3}],"poweroff":[{"reg":3,"val":0}]}`

One can test audio with a single speaker connected between L and R terminals (plus on one side and minus on the other). Optionally, jumpers on the board will effectively connect the second driver in parallel doubling the current capability.

Important point, this will send only one channel to the output, that’s just how the DAC works. True mono as (L+R)/2 is possible via more in-depth configuration (very poorly documented), but I haven’t managed to configure that on the stand. I’m still working on that. (Along with a few more really cool DSP features that this DAC has, like EQ, subwoofer mode and tone compensation settings)

BTL PBTL
Descriotion Bridge Tied Load, Stereo Parallel Bridge Tied Load, Mono
Rated Power 2×23W (8-Ω, 21 V, THD+N=1%) 45W (4-Ω, 21 V, THD+N=1%)
Schematics image image
Speaker Connection image image

Starting from Rev E, an additional header is exposed to allow datasheet-specced connectivity

Image Legend
Stereo Mode - leave open image
Mono (PBTL) Mode, close horisontally image

TAS5805M DSP capabilities

The TAS5805M DAC has a very powerful DSP, that allows doing lots of data processing on the silicon, that otherwise would take a considerable part of your CPU time. As of the moment of writing it is mostly an undiscovered part of the DAC, since unfortunately, TI is not making it very easy for developers. (A minute of complaint) To be more specific, you need to be (A) a proven hardware manufacturer to get access to the configuration software, namely PurePath. (B) you need to apply for a personal license and go through an approval process, and after a few weeks of waiting you get access to one DAC configuration you asked for. (C) You find out that it will work with TI's own evaluation board that will set you back $250 if you'd be able to find one. Otherwise, all you have is a list of I2C commands that you need to transfer to the device on your own cost. No wonder no one knows how to use it.

But moanings aside, what do you get after:

  • Flexible input mixer with gain corrections
  • 15 EQ with numerous filter configurations
  • 3-band Dynamic Range Compression with flexible curve configuration
  • Automatic Gain Limiter with flexible configuration
  • Soft clipper
  • and a few other things

At this moment it is very experimental. In the perfect world, you should be able to adjust all of those settings to make your speaker-enclosure setup work the best it can, and even apply your room factors into the equation. But with above disclaimer I can only deliver limited set of configurations corresponding to the most common use cases:

  • Stereo mode with enabled DRC (Loudness) and AGL settings
  • Full range Mono mode with DRC (Loudness) and AGL settings
  • Subwoofer Mono mode with few filter frequency options
  • Bi-Amp configuration with few crossover frequency options

All of the above are available right now for experimentation. I'm keen to hear your feedback while I moving forward with porting this to other software options

Louder Esparagus power considerations

The Louder Espragus can be quite a power-hungry device, simply using 5V over the USB-C is clearly not an option. The intention for using a PD-enabled power adapter to run the board is simplicity and ease of use for customers. Ideally, you should supply a 20V 3.25 Amp capable power source, which is common for modern laptops (Dell, HP, and Lenovo have all tested and work perfectly). However, pretty much any 9V/12V/20V PD-enabled power adapter will work, most typically phone chargers with a quick charge option. The smallest of the family is a 25W model, which is plenty enough for a living space.

The interesting part was all the phone and laptop chargers I used for the test (around five different makes of each), sounded great, with no hissing, no popping. (Apart from the Apple ones, they didn’t work. Likely they have Apple-specific PD protocol). This is probably because modern devices have become so noise-sensitive that manufacturers have been forced to do good work on noise levels.

Tested and perfectly working models are (others may be available)
Model Image
65W USB-C Lenovo ThinkPad Laptop Charger Replacement Power Adapter image
65W 45W 20V 3.25A Type-C PD Laptop Charger image
Belkin BoostCharge Pro 65W Dual USB-C GaN Wall Charger, Multi-Port Charger w/ 2X USB-C PD 3.0
(Reported by customer, not tested myself)
image
120W Gan Type-C PD Charger image
45W Type-C PD Mobile Phone Wall Adapter image
Tested, but NOT wroking
Model Image
Amazon Basics 65W One-Port GaN USB-C Wall Charger with Power Delivery PD for Laptops, Tablets & Phones image

Because USB-PD is a bit of a Wild West in terms of standards, sometimes not everything goes as designed. Some people have run into this with power adapters that aren’t fully PD-standard compliant. In most cases, the worst that happens is the PD chip doesn’t trigger the 20V mode, so the Esparagus runs at around 5W per channel (which you might not even notice). One person reported that an older adapter somehow triggered just 1V on the USB-C power line, shutting down the Esparagus shortly after plugging in. Thankfully, we’ve confirmed that it works correctly with newer laptop adapters.

Louder Esparagus NOPD

The “hammer-style” solution I came up with is a new NOPD version of the Louder Esparagus that lets you use a barrel power jack to supply raw voltage directly. The catch? Standard 2mm pins can’t handle high currents, so I’ve gone with a 2.5mm pin instead — it’s a bit unusual but still common enough in the laptop world.

image

With this setup, you can supply more than the 20V limit of PD, giving you a bit more power for the speakers. You probably won’t hear much difference (thanks to the way human hearing works), but it could help larger speakers that need a bit more to really “open up." Other than that, the NOPD version works just like the PD version — no software changes are needed.

External voltage selection

The power adapter specs depend on the speaker you're planning to use. DAC efficiency is close to 100%, so just take the power rating of your speaker (say 2x10w), and impedance (say 8 ohms) and you'd need at least 9 volts rated at 1.2 amps per channel, round up to 3 total amps.

It is not recommended to go beyond the voltage your speakers can take, otherwise, the amp will blow your speakers in no time.

The absolute maximum voltage for the TAS5805M DAc is 30V, but it is not guaranteed to be thermally stable in this condition.

OLED screen

All boards have an OLED screen header. Originally I had plans to have it as a feature (It is quite nice when using squeezelite since you can get quite a lot with existing plugins and settings). Later on, I disregarded this as a generally available feature, since it is quite a time-consuming task to solder it in place, and I had no really good idea how to fix the screen in place. Despite that, the header is present on every board revision and it works.

At this moment one can solder the compatible OLED screen and use it with the transparent front panel as a bedside clock or to display the current track (I prefer smoked glass for the final look of it). It takes a few minutes for a skilled engineer to solder it in place and a small strap of double-sided adhesive to fix it mechanically.

A B C
DSC_0107 DSC_0109 DSC_0111

The final result is a nice and finished look

DSC_0101

OLED models

Most of the 64x128 pixel OLED screen models that are very common among hobbyists will use compatible 30-pin ribbon connector with 0.7mm pin spacing, and they are really easy to desolder.

image

You can also find bare screens if you spend a minute. Below are the tested models, although there are plenty more out there.

Model Image
0.96" OLED Display 128X64 SSD1306 image
1.3" OLED Display 128X64 SH1106 image

Software side

Although you're free to use it your way using the pinout above, I'd expect the most common case to be squeezelite, thus here are the steps you'd need to do

# Description Image
1 Update NVS settings in the Web UI (switch to recovery mode first)
display_config = SPI,width=128,height=64,cs=15,reset=32,driver=SH1106,HFlip,VFlip
spi_config = mosi=23,clk=18,host=2,miso=19,dc=4
You may need to replace SH1106 with SSD1306 depending on your model.
image
2 In the LMS settings install the SqueezeESP32 plugin image
3 Update each speaker's settings in the LMS, and navigate to Display settings image

Relay Driver

The early design of the Esparagus series has an internal driver for external relays. It has a back-facing diode to shunt any coil-inducted currents. Driver is an open-drain output with the following states

More details
Driver Pin State (IO21) Output state Relay connected between OUT and +5V
Floating (pulled low with 100K resistor) or
LOW
High impedance INACTIVE (switched OFF)
HIGH Pulled to GND ACTIVE (switched ON)

Schematics: image

External relay can be connected directly between OUT and +5V pins (1st and 3rd pins, mid pin being GND)

Errata

CH340C 5V level issue

Description:

Some units suffer from bad wifi connectivity (low wifi RSSI, -10..-20Db compared to expected level) when the device has no Serial monitor attached. Connectivity is fine however when the Serial monitor is attached

Impact:

Affected units will stutter and break audio streaming even in close proximity to the WiFi router. As soon as the Serial monitor is attached, connectivity is restored and the unit works as expected, making debugging very difficult.

Affected Products:

  • HiFi-Esparagus, Rev D
  • HiFi-Esparagus, Rev E
  • Loud Esparaus, Rev D
Detailed Description

Issue Details:

Due to a mistake in the schematics, the VCC pin on the CH340C USB-Serial bridge is connected to the +5V line. This causes it to generate 5V on the control lines RTS and DTR. This in turn causes +4.2V level on the RST and IO0 pins of the ESP32, which is way above the allowed pin voltage limit. Although many units are capable of working with no measurable impact on the operation, some suffer from bad radio connectivity. Based on the known cases no permanent damage is caused by high voltage, which allows applying permanent hardware fix.

Detection:

Users may notice that the WiFi or Bluetooth perception is poor, causing audio to break and stutter.

Workaround/Temporary Solution

You can use the unit with a serial monitor attached over the USB-C port. This causes low levels on the serial control lines, thus keeping the RST pin on the +3.3V level, equivalent to normal unit operation.

Resolution/Corrective Action

Status:

The next revision of the board has a permanent schematics fix. Specifically fixed in

  • HiFi-Esparagus, Rev F
  • Loud-Esparagus, Rev E

Permanent Solution:

Customers can apply a permanent fix by following the steps below. It will require moderate soldering skills and a piece of thin copper wire.

Step Description HiFi-Esparagus Loud-Esparagus
1 Disconnect the VCC pin from the 5V line. Use a sharp tip with your soldering iron and a sharp tool. You lose the ability to flash the unit using the USB-C port at this time. image image
2 Connect the lifted pin to 3,3V line. The flashing capability is restored. image image

Optionally secure the wire in place with hot glue or Kapton tape.

Additional Notes:

I apologize for any inconvenience caused by this issue. I am committed to fix this issue as soon as discovered and guiding those who need help fixing it themselves.

Where to buy

You may support our work by ordering this product at Tindie