MUSE LUXE speaker with Squeezlite (Logitech Media server)

This is a quick tutorial to burn a precomplied bin file of SqueezeLite on the ESPMUSE LUXE SPEAKER to do multiroom audio and more. This tutorial below is updated with the latest files version and tries to summarize this long thread below.

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
UPDATE 26/10/2022 : prefer this link as you will have and up to date version of Squeezelite

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

Method 2 (obsolete):
It is sometime difficult to start with Squeeze Light so I have made a pre-confirgured .bin file to burn on the ESPMUSE LUXE SPEAKER you can download the latest bin file here

Edit: Once you have downloaded the Raspiaudio cooked firmware of Squeezelite above you will be able to do an OTA update using the web interface by choosing the Luxe firmware. This is thanks to the integration of the Luxe by Philippe44 in the main branch of his project :pray:

What can you do with it?

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)*

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 “squeezelite”, 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

To Do

  • For now you can’t upgrade using the web interface
  • The buttons are not very resposive to change the volume you have to push and release quickly
  • It seems that if the Luxe is left OFF for a long time and not connected to USB (>12h not confirmed) the device deos not start anymore unless put to charge. under investigation.
  • Need to qualify the real autonomy of a full charged battery.

How to compile the code ?
Our forked GIT version of squeezelite is here what we do in this fork is to add the audio codec that is used in the LUXE. In the future the goal is to ask to the orginal creator of the main branch of squeezligth to merge with our version so we will be able to follow updates easily. All credits for that project goes to the original creators Sle118 and Philippe44.

Similar to the Luxe but more DIY
there is also a tutorial for ESPMUSE PROTO here the small mono version of the LUXE without the case and speaker.


is there a ready made firmware for the MUSE LUXE Speaker for LMS available now? I tried to follow the different forum posts and websites, but I couldn’t find anything apart from the statement on the shop page, that it should support LMS.


I’d also like to know the answer to this. There is a link to a pre-compiled .bin file for Squeezelite on this page, but that’s for the PROTO, and it’s not clear to me whether the PROTO and Luxe binaries are interchangeable. Will all the other features of the Luxe still work if this Squeezelite binary is loaded (e.g. buttons, bluetooth, airplay, SD card etc)?


1 Like

Thank you! Half an hour after my earlier post my Luxe was delivered. First impressions are great! Nice sound quality, and it feels like a quality product - well done guys.

I’m a long-time Squeezebox fan - it was your post in the LMS forum that brought this device to my attention - so I’m excited to be able to add this to my collection. I have also followed the ESP32 developments with interest, and I think it makes perfect sense for you to integrate this hardware with the work of Sle118 and Philippe44.


I can only confirm what chill is saying, and it was the same post in the LMS forum which opened my interest to the MUSE player.
I have followed SqueezeAMP for a while and I also own two, which I have connected to amps in the house. I wanted to use the MUSE as a transportable player, when sitting on the balcony or in the garden… if the wifi can still connect that is, we’ll see.

Regarding the box, it looks and feels really good. I must admit that the price (including freight) was really good. I think you should be able to sell some. Well done!


The bin file is now available in the first message of that theard, enjoy!

Good news, thank you. The download link for the bin file isn’t working for me at the moment though.

This is working here :

Tsk - browser issue, sorry! I switched from Chrome to Safari and I now have the bin file.

I’ve loaded the bin file (easy once I remembered reading that the supplied USB cable is only for charging!), but I’m not getting anywhere with it. Previous experience with a SqueezeAMP made me expect that the Luxe would start broadcasting its own wifi so that I could connect it to my own wifi, but it doesn’t seem to do that. So I don’t see how I can connect it to my wifi, which is a pre-requisite for squeezelite to work. After loading the new bin file it does show up as a bluetooth device, but not as an Airplay device, which is due it not being connected to my wifi.
My apologies if I’ve missed a detail somewhere, but can you advise how to connect the Luxe to my wifi?

No problem. Yes you should have an acces point, turn it off for few seconds and on again :

By default when no credential is setup an access point is created called “muse”, connect to it password is “musemuse”. Using a browser go to then in the wifi section find you network and enter your wifi password. reboot.

If nothing, I advise you to connect your arduino serial console and chack what is happening there.

I got there in the end! I had turned it off and on a few times, but I turned it off for a few seconds longer, and then it showed up as an AP on my phone before it did on my laptop (both in close range of the Luxe). Anyway, I’m now connected, and it shows up as a Squeezelite player in LMS, and seems to be working great. It’s also working fine as an Airplay speaker. I’m happy to see that the graphic equaliser function works as it does with my SqueezeAMPs, and I was able to tweak the sound to my liking.

Great stuff - another excellent addition to the Squeezebox family!

Great don’t hesitate to share pictures! And for the graphic equalizer are you using the grove port on the back to connect a screen?

I’m about to post my success in your thread on the Logitech Squeezebox forum!

The graphic equaliser is the one that’s visible in the ‘ESP32 Settings’ page for the player under LMS, which appears after the SqueezeESP32 plugin is installed.

I’ve yet to play with the grove port - I don’t have a suitable plug yet.

Ho! I did not know that it was possible, thanks !

I found that the volume buttons were not doing anything, so I experimented with the button configuration string in the NVS Editor (actually I made a new string, and put its name in the ‘actrls_config’ parameter). I found that adding “pull”:true to both buttons solved the problem. My complete string is now:

[{“gpio”:32, “type”:“BUTTON_LOW”, “pull”:true,“debounce”:10, “normal”:{“pressed”:“ACTRLS_VOLDOWN”}},{“gpio”:19, “type”:“BUTTON_LOW”,“pull”:true,“debounce”:40, “normal”:{“pressed”:“ACTRLS_VOLUP”}}]

EDIT: Actually, these changes don’t seem to survive a power cycle. Specifically, my new ‘buttons’ string survives, but the ‘actrls_config’ parameter seems to revert to the original ‘boutons’ string after a power cycle. It survives a reboot, but not a power cycle.

The ‘>’ button doesn’t seem to do anything. Does it have a gpio value, so that I can configure it as a play/pause toggle?

On another point, the volume indicator in the default LMS interface seems somewhat misaligned with the actual volume - the speaker is rather quiet even though the volume indicator is only a couple of bars from the top, and I have the impression that the volume can still increase further even when the indicator is at its maximum. I guess this may be because the Luxe uses a hardware volume control behind the scenes. Is there anything that can be done to align it better with the LMS volume display?

Hi Chill, I assumed it was you from the LMS forum, nice to have you onboard. I wanted to deal with the buttons today, but now saw you already did the magic. Thanks!

I had the key “actrls_config” already set to “boutons”, seems to me it wants to point to “boutons” for it’s configuration.

Though I did not get it to work yet. First problem when copying from the website, it replaces all quotes with a different angled quote… so it get’s all messed up. Think I have that solved now, but the buttons do not react yet.

Will have to check tonight, have to prepare for work now :wink:


Yes, it looks like ‘actrls_config’, and the ‘boutons’ string both get over-written by a power cycle. I’d guess this is a deliberate decision, so that we can’t mess it up, but it does mean that any changes we make will only last until the next power cycle. I would suggest that it makes some sense for the ‘boutons’ string to be over-written, so that it’s always there for us to revert to, but we should be free to point ‘actrls_config’ to any string we like (e.g. ‘buttons’). This behaviour should be there in the source code I guess, so I’ll take a look, but that’s not my strong suit, and I’d hope this can be addressed by Raspiaudio.

EDIT: Well that particular behaviour is indeed clear in the source code. But it’s not clear to me why my changes survive a reboot but not a power cycle. Maybe I made a mistake there. Anyway, not my strong suit, so I’m not going to meddle!
//============== Muse ==========================================
ESP_LOGD(TAG,"Registering default Audio control board type %s, value ",“actrls_config”);
strcpy(boutons, “[”);
strcat(boutons, “{“gpio”:32, “type”:“BUTTON_LOW”, “debounce”:10, “normal”:{“pressed”:“ACTRLS_VOLDOWN”}}”);
strcat(boutons, “,{“gpio”:19, “type”:“BUTTON_LOW”,“debounce”:40, “normal”:{“pressed”:“ACTRLS_VOLUP”}}”);
strcat(boutons, “]”);
store_nvs_value(NVS_TYPE_STR,“boutons”, boutons);
config_set_default(NVS_TYPE_STR, “actrls_config”, “boutons”, 0);
store_nvs_value(NVS_TYPE_STR,“actrls_config”, “boutons”);


We are working on it

For your question regarding GPIOS

  • VM (gpio 32) “-”
  • VP (gpio 19) “+”
  • MU (gpio 12) “>”

battery sensor GPIO33
neopixel pin GPIO22

Grove port for screen extension
#define SDA 18
#define SCL 23

Jack aux detect GPIO_NUM_12
SD card detect GPIO_NUM_34

#define SD_CS 13
#define SPI_MOSI 15
#define SPI_MISO 2
#define SPI_SCK 14
#define I2S_DOUT 26
#define I2S_BCLK 5
#define I2S_LRC 25
#define I2S_DIN 35
#define I2SN (i2s_port_t)0

Waiting for a better documentation you could find the GPIOs definitions in the project below: