Multirooms with SQUEEZELITE with ESP32 MUSE PROTO

This is a quick tutorial to burn Squeezelite on the ESPMUSE PROTO to do multiroom audio. Multiroom is great at home when you want to have the same music synchronized in you living room, kitchen, bathroom without the need of moving a bluetooth speaker and a phone with you, or worst having a very loud distorted music in one room hoping to hear in every room.

Squeezelite-esp32 is an audio software suite made to run on espressif’s ESP32 wifi (b/g/n) and bluetooth chipset. It offers the following capabilities

  • Stream your local music and connect to all major on-line music providers (Spotify, Deezer, Tidal, Qobuz) using Logitech Media Server - a.k.a LMS and enjoy 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.*
  • Stream from a Bluetooth device (iPhone, Android)*
  • Stream from an AirPlay controller (iPhone, iTunes …) and enjoy synchronization multiroom as well (although it’s AirPlay 1 only)*

then you can directly attach the ESP MUSE PROTO on a passive speaker thanks to its 3.25W amp :slight_smile:

Updated 09/05/22: Method 1 (preferred)
there is a new very easy way to install Squeezlite in to the Muse (Luxe or Proto) from a Chrome browser without the need to install anything.

This as been implemented by Paulus Schoutsen creator of Home Assistant.

Method 2 (obsolete)
It is sometime difficult to start with Squeeze Light so II have made a pre-confirgured .bin file to burn on the ESP PROTO you can download it here

With Linux or ESPTOOLS use the following command : -p /dev/ttyUSB0 write_flash 0x0 my_image_to_burn.bin

UnderWindows, It must be loaded using the ESP32 flash downloading tool :

Unzip it and execute

Choose Developer Mode / ESP32 :

Select the path of the previously downloaded .bin file and set the loading address to “0x0” :

Connect the RASPIAUDIO MUSE PROTO via USB at the bottom select the right com port used by the connected board:

This com port number could change so if you are not sure of the com port go in windows 10 go to Device Manager and in the port section look for the number used by Silicon Lab…

Check that the switch is ON position :

Click on START, it should now take 3mn to load:

Then reboot your MUSE PROTO card, and Squeezlite should start, searh your new audio bluetooth device on a phone or computer you should have a new device called “ESP-32-*****”, connect to it and play.

To really have fun
To enable Airplay and Logitech Media Server you need to set the wifi connection. By default when no credential is setup an access point is created called “Squezelite*****”, connect to it password is “squeezelite”. Using a browser go to then in the wifi section find you network and enter your wifi password. reboot.

Logitech Media Server
Allows you to stream content thru a local server, and many cool stuff lik sync several devices for multi rooms audio.

Install the server on your PC, then your squeezelite device(s) should be found if on the same network, and could be sync :

Out of the box

Here is a cute project

Fusion 3d file is here (credit to Raphael Lherbier)

Yesterday received a Muse Proto Board, I want to use it with squeezelite, but I can not follow the instructions!
I had the bin file, but under windows (10 or 11) the board is not detected by ESP32 flash downloading tool (V 3.9.2), I am unable to find the com port number, because nothing is show under Ports (Com & LPT). The Muse Proto are connected to one USB of the PC, switch is on…an had two ligths are on, one pulsing blue an a bigger one solid white…what am I doing wrong?
I tried also in a Ubuntu laptop previous install of ESPTool (sudo apt install esptool) but the command execution only get “ orden no encontrada”
Can someone help me?
Sorry my bad english.

Problem solved!
I had to install a driver in my windows machine and the card was detected!
Everything working now!

I’m a bit lost here… I have setup the LMS and the squeezelite but even after setting the IP address of the LMS server in the Audio section of the squeezelite configuration, it doesn’t show up on the LMS.

Am I missing something here? Devices are in separate vLANs and I can’t find any documentation on how to configure this properly.

Thanks in advance.

Best to post LMS querioes on LMS forums

For autodiscovery - At player startup, a player will broadcast a UDP packet on port 3483 - all LMS server will reply. Broadcast only works when all devices are on same LAN segment.

For operation - LMS communication uses slimproto over TCP on port 3483. Audio data will be sent to player after HTTP GET from player to LMS.

If devices are on different LAN segments, no autodiscovery - then make sure port TCP 3483 is open.

use telnet to connect to ESP32 to get logging info

Thank you for your reply. I appreciate it. So in case we’re in different LAN segments, how can I tell the Squeezelite where the LMS server is? I’ve tried with setting this up but… no dice.

LMS uses normal IP networking. Nothing special.

Do you use a single DHCP server for all network segements ?

If not then you must make sure then IP address, mask and routing address are all consistent & networkable between LMS server and Squeezelite player AND port 3483 is not blocked by host firewall.

What is the LMS server host ?
If it is a Windows/Linux/Mac box - can you telnet from the host to the squeezelite player ?

Trust me, nothing wrong on my networking segments. I have a few vLANs to separate traffic and a firewall between the ports are open in both sense (from Muse Proto to LMS and vice-versa). I don’t really see how the device is going to know where the server is if I don’t configure the server anywhere…
I see absolutely no traffic going from the device towards the IP of the server nor any other IP for what matters.
The LMS server is a contained docker image in a virtualization host.
I can telnet to the port indeed but… nothing happens regarding the device reaching for the LMS.

Need to know if ESP32 is sendign a message to LMS and with correct details of LMS host.
You can enable logging on LMS host to see if slimproto messages are being received (WebUI Setting/Information/Adavnced/Logging/network.protocol.slimproto set to INFO.

With a LMS Host IP address configured, the player will send slimproto “HELO” message to LMS

The telnet log should tell you if ESP32 is sending a message to LMS host. something like the following (an ESp32 board not a MUSe one)

[00:00:11.356257] discover_server:828 sending discovery
[00:00:11.377695] discover_server:840 got response from:
[00:00:11.378424] slimproto:942 connecting to
[00:00:11.392243] slimproto:989 connected
[00:00:11.392836] sendHELO:153 mac: zz:xx:yy:aa:bb:cc
[00:00:11.393057] sendHELO:155 cap: Model=squeezeesp32,AccuratePlayPoints=1,HasDigitalOut=1,HasPolarityInversion=1,Balance=1,Depth=16,Firmware=v1.0-1023-16,ModelName=SqueezeESP32,MaxSampleRate=192000,alc,aac,ogg,ops,ogf,flc,wav,aif,pcm,mp3
[00:00:11.400431] sendSETD:422 sending dimension 128x32
[00:00:11.411839] notify:223 notified server hport 9000 cport 9090

Can you use wireshark to look for TCP traffic to/ from player ?

Just checked the “optional settings” have to be in the format for squeezelite command line options
so for your settings

If you connect your system using USB and use serialport for logging (Menu System/Services “Telnet and Serial”) - you can see full startup sequences and all attempts to connect to setup Wifi and connect to LMS. Look for slimproto log messages.such as below (from MUSE luxe device)
[00:21:27.064473] register_vorbis:385 using vorbis to decode ogg
[00:21:27.076359] register_opus:328 using opus to decode ops
[00:21:27.077274] register_flac:332 using flac to decode ogf,flc
[00:21:27.088273] register_pcm:468 using pcm to decode wav,aif,pcm
[00:21:27.089147] register_mad:417 using mad to decode mp3
[00:21:27.103357] slimproto:942 connecting to
[00:21:27.104861] slimproto:967 unable to connect to server 0

1 Like

I had done traffic capture and analysis and even at the firewall there was absolutely no traffic logged for the squeezelite IP towards the LMS.

I’ve reflashed the image and changed the option to be -s and… it worked now.

Rebooted the device and the options were gone but the device still shows on the LMS side.

Now just need to figure out why there’s no audio… there’s traffic going back and forth so it is connected. :slight_smile:

Thanks for that link and help! I’ll try to find what is going on now on the audio side and why the option disappears.

How did you flash the proto board ?
What version have you got ? My Muse Lux is on Muse.16.1180
There is a post on slimdevices forum that says the Chrome browser method is not being maintained - so builds may not be latest.

I actually used the browser and it gives me the following version: fw: I2S-4MFlash.32.764.master-cmake , mode: Squeezelite-ESP32

I tried to download and flash with the USB the squeezelite-esp32-master-v4.3-I2S-4MFlash-32-2.1188.bin file but gives me that version as well… So I’m a bit confused. Is that the latest version I’m in?

Right, I’ve managed to flash the device properly with the latest version of ESP32 for Squeezelite. It connects, shows in the LMS and all but no audio again!
Seems more stable on this latest version, need to test and find out why the audio’s not consistent.

The Browser based flash delivers out of date s/w (i.e. v 764 vs 1188) because it was not being maintained.

Up to 1180 are V1 - just recently there is a now a V2 (which I think are build after 1180) - using latest build platform and new features but very new and I’m waiting as there is nothing I need in it.

I’m not sure about the generic build of ESP32 such as I2S and how they work on Muse Proto. This readme may help

For Muse Luxe - I just use the Updates Menu - click on “check for Updates”.

I check the platform as “Muse” and “master-cmake” as FW branch
I use bit depth of 16. Not sure why you need 32 bit - IIRC it used to be marginal for some speeds/codecs . 16 bit is OK and you also get an equaliser.