Pre-order of the Mn Cast! [obsolete available on Amazon]

To avoid confusion this was my original idea: https://esphome.github.io/media-players/. To load this firmware onto the device and get it directly connected and managed in Home Assistant with ESPHome. This new device does not have a firmware for this purpose so I will for now use LMS and see how that works, just as you suggest :slight_smile:

@cOOLio thanks for your super precise review!
To answer to some of your questions :
-Black screen connector was hand re-worked on this batch because it was 3mm higher than the specification, so it was not fitting into the case anymore, althought it does not affect useability it will be fixed on the the production batch.

-The choice to leave a microphone extension port is for my secret plan to one day have the Home Assistant working as an open source vocal assitant.

-The IR and SD costs almost nothing to implement, and it could be usefull in some application other than Squeezelite, but I agree you only see SD on the cheapest mp3 players.

@sbarmen I plan that my intern will do a website where you can load all the last firmware for Squeezelite, HA and others using the Chrome browser.
Also Louis is currently working on adding Wifi Improv to Squeezelite to be able to set wifi credential from the Chrome bowser like the genius of HA did for their software.

My talented contacts at HA told me that they will add the MN cast soon in HA, but I have no date to give you.

1 Like

Ok so now I have tried to follow ur lead in the blog @cOOLio. Flashed the recovery, then the 1.x version and now the player connects and works with bluetooth. Still I cannot get the display to function, and it is unclear to me whether I should upgrade to the 2.x release again. You say the OTA upgrades works again, did you upgrade?

This is my display config in the NVEeditor:

I use V1. 32.1180

Display disappeared after upgrade (many NVS entries were lost) so I changed NVS to same setting as you use.

I found I had to reboot ESP32 for some changes to take effect.

I did a quick test of IR port (configured set_GPIO 12=ir) and I couldn’t get it to work with a SB remote.
Boot log message show IR device is recognised but no log messages (e.g. message sent to LMS) shown when using remote.

current Squeezelite code I think only recognize NEC remote protocol, I have configured my Xiaomi phone that has a IR emitter to NEC and I think got some logs back when pressing the remote.

Sadly reboot does not help here. :frowning:

The README on the GIT hub sites says
‘The IR codes are send “as is” to LMS, so only a Logitech SB remote from Boom, Classic or Touch will work.’
so I assume my SB3 (aka classic) and Boom remotes should work.

I shall look for other issues and see if I can get more log info.

What version of V1 - 32 vs 16 and build.

Can you export your NVS config and post/link it to check - in case there is some other difference - a number of NVS entries were lost in upgrade not just the display config but I can’t remember which ones.
edit
My config
{
“a2dp_ctmt”: “1000”,
“a2dp_ctrld”: “500”,
“a2dp_dev_name”: “Muse”,
“a2dp_sink_name”: “SMSL BT4.2”,
“a2dp_spin”: “0000”,
“actrls_config”: “”,
“airplay_name”: “Muse-Airplay-xxxx”,
“airplay_port”: “5000”,
“ap_channel”: “1”,
“ap_ip_address”: “192.168.4.1”,
“ap_ip_gateway”: “192.168.4.1”,
“ap_ip_netmask”: “255.255.255.0”,
“ap_pwd”: “musemuse”,
“ap_ssid”: “Muse-xxxx”,
“autoexec”: “1”,
“autoexec1”: “squeezelite -o I2S -b 500:2000 -d all=info -C 30 -W -n “Muse-xxxx””,
“bat_config”: “”,
“boutons”: “”,
“bt_name”: “Muse-xxxx”,
“bt_sink_pin”: “1234”,
“bt_sink_volume”: “127”,
“bypass_wm”: “0”,
“dac_config”: “bck=5,ws=25,do=26,sda=18,scl=23,model=Muse”,
“dac_controlset”: “”,
“display_config”: “I2C,width=128,height=64,address=60,driver=SH1106,rotate”,
“enable_airplay”: “N”,
“enable_bt_sink”: “N”,
“equalizer”: “0,0,0,0,0,0,0,0,0,0”,
“eth_config”: “”,
“gpio_exp_config”: “”,
“host_name”: “Muse-xxxx”,
“i2c_config”: “scl=23,sda=18,speed=400000,port=0”,
“jack_mutes_amp”: “n”,
“led_brightness”: “”,
“lms_ctrls_raw”: “n”,
“metadata_config”: “”,
“ota_erase_blk”: “249856”,
“ota_prio”: “6”,
“ota_stack”: “10240”,
“rel_api”: “https://api.github.com/repos/sle118/squeezelite-esp32/releases”,
“release_url”: “https://github.com/sle118/squeezelite-esp32/releases”,
“rotary_config”: “A=32,B=19,SW=0,volume,knobonly”,
“set_GPIO”: “12=ir”,
“spdif_config”: “bck=5,ws=25,do=4”,
“spi_config”: “”,
“stats”: “n”,
“target”: “”,
“telnet_block”: “500”,
“telnet_buffer”: “40000”,
“telnet_enable”: “D”,
“wifi_smode”: “f”
}

Thanks, there are differences for sure!

nosb@no-osl-stba diff % diff -y nvs_config_Yamaha-Muse_1664970559982json.txt bpa.txt
{								{
  "a2dp_ctmt": "1000",					      |	“a2dp_ctmt”: “1000”,
  "a2dp_ctrld": "500",					      |	“a2dp_ctrld”: “500”,
  "a2dp_dev_name": "Muse",				      |	“a2dp_dev_name”: “Muse”,
  "a2dp_sink_name": "SMSL BT4.2",			      |	“a2dp_sink_name”: “SMSL BT4.2”,
  "a2dp_spin": "0000",					      |	“a2dp_spin”: “0000”,
  "actrls_config": "",					      |	“actrls_config”: “”,
  "airplay_name": "Yamaha-Muse-Airplay",		      |	“airplay_name”: “Muse-Airplay-xxxx”,
  "airplay_port": "5000",				      |	“airplay_port”: “5000”,
  "ap_channel": "1",					      |	“ap_channel”: “1”,
  "ap_ip_address": "192.168.4.1",			      |	“ap_ip_address”: “192.168.4.1”,
  "ap_ip_gateway": "192.168.4.1",			      |	“ap_ip_gateway”: “192.168.4.1”,
  "ap_ip_netmask": "255.255.255.0",			      |	“ap_ip_netmask”: “255.255.255.0”,
  "ap_pwd": "musemuse",					      |	“ap_pwd”: “musemuse”,
  "ap_ssid": "Yamaha-Muse",				      |	“ap_ssid”: “Muse-xxxx”,
  "autoexec": "1",					      |	“autoexec”: “1”,
  "autoexec1": "squeezelite -o I2S -b 500:2000 -d all=info -C |	“autoexec1”: “squeezelite -o I2S -b 500:2000 -d all=info -C 3
  "bat_config": "",					      |	“Muse-xxxx””,
  "boutons": "",					      |	“bat_config”: “”,
  "bt_name": "Yamaha-Muse",				      |	“boutons”: “”,
  "bt_sink_pin": "1234",				      |	“bt_name”: “Muse-xxxx”,
  "bt_sink_volume": "127",				      |	“bt_sink_pin”: “1234”,
  "bypass_wm": "0",					      |	“bt_sink_volume”: “127”,
  "dac_config": "bck=5,ws=25,do=26,sda=18,scl=23,model=Muse", |	“bypass_wm”: “0”,
  "dac_controlset": "",					      |	“dac_config”: “bck=5,ws=25,do=26,sda=18,scl=23,model=Muse”,
  "display_config": "I2C,width=128,height=64,address=60,drive |	“dac_controlset”: “”,
  "enable_airplay": "1",				      |	“display_config”: 
  "enable_bt_sink": "1",				      |	“I2C,width=128,height=64,address=60,driver=SH1106,rotate”,
  "equalizer": "00,00,00,00,00,00,00,00,00,00",		      |	“enable_airplay”: “N”,
  "eth_config": "",					      |	“enable_bt_sink”: “N”,
  "host_name": "Yamaha-Muse",				      |	“equalizer”: “0,0,0,0,0,0,0,0,0,0”,
  "i2c_config": "",					      |	“eth_config”: “”,
  "jack_mutes_amp": "n",				      |	“gpio_exp_config”: “”,
  "led_brightness": "",					      |	“host_name”: “Muse-xxxx”,
  "lms_ctrls_raw": "n",					      |	“i2c_config”: “scl=23,sda=18,speed=400000,port=0”,
  "metadata_config": "",				      |	“jack_mutes_amp”: “n”,
  "ota_erase_blk": "249856",				      |	“led_brightness”: “”,
  "ota_prio": "6",					      |	“lms_ctrls_raw”: “n”,
  "ota_stack": "10240",					      |	“metadata_config”: “”,
  "rel_api": "https://api.github.com/repos/sle118/squeezelite |	“ota_erase_blk”: “249856”,
  "release_url": "https://github.com/sle118/squeezelite-esp32 |	“ota_prio”: “6”,
  "rotary_config": " A=32,B=19,SW=0,volume,longpress",	      |	“ota_stack”: “10240”,
  "set_GPIO": "",					      |	“rel_api”: 
  "spdif_config": "",					      |	“https://api.github.com/repos/sle118/squeezelite-esp32/releas
  "spi_config": "",					      |	“release_url”: “https://github.com/sle118/squeezelite-esp32/r
  "stats": "n",						      |	“rotary_config”: “A=32,B=19,SW=0,volume,knobonly”,
  "telnet_block": "500",				      |	“set_GPIO”: “12=ir”,
  "telnet_buffer": "40000",				      |	“spdif_config”: “bck=5,ws=25,do=4”,
  "telnet_enable": "",					      |	“spi_config”: “”,
  "wifi_smode": "f"					      |	“stats”: “n”,
}							      \	“target”: “”,
							      >	“telnet_block”: “500”,
							      >	“telnet_buffer”: “40000”,
							      >	“telnet_enable”: “D”,
							      >	“wifi_smode”: “f”
							      >	}

Now my display is back on! Not sure what settings changed it but I added the spdif_config, set_GPIO, changed the equalizer I think. At least that lit the display back up :smiley: Thanks!

Check this NVS backup

There are also backups of others players I own already. So choose the right one.

It’s only the config of the hardware of the Mn Cast, noting else will changed.

@NVS Editor

  1. [ Load file ] (choose NVS json backup file)
  2. [ Commit ]
  3. [ Reboot ]

Then all the hardware should work again.

Additional enhancements I added to NVS Backup file:

  • Volume Control +Long Press > Play/Pause Prev./Next | Long press again to get back to volume control
  • Display is flipped so that the IR holes are at front and the display can still be read normally.
  • Medieval IR enabled :wink:

@Raspiaudio
THX for those background info. Don’t know which fabric your partner is, but it seems they have some quality issues. Maybe Makerfabs (Open Hardware OEM is there main business) could be an alternative, or to make more pressure to your current partner. :wink:

Regarding the faulty display, I still have to think what could be the best solution,
so that the environment is not unnecessarily polluted because of such a small OLED display.
Maybe you can think of a solution on this for the environment as well.

But I’ll send you an email about that when I have more time and after the white one has arrived and been briefly tested.

Cheers

cOOLio

I think the missing setting was i2c_config. The i2c bus can use different ESP32 pins. This tells the ESP32 which pins are to be connected to device SDA & SCL. I think the DAC and display share the bus on Mn Cast.

The i2c config settings usually change with different boards depending on how the board has been designed.

@bpa this dac does not need i2c, it is only using I2s

@cOOLio do you refer as “quality issue” the shorter than expected screen connector it is not, just a specification of a component that differs from what you receive, it happens. This is why I’m doing pre-serie. Thanks for your help.

No No, that’s fine for me. I mean the faulty screen itself only. All the rest is fine for me.

you are both right @pba @Raspiaudio but IMHO you are talking on different things. :wink:

Yes, the DAC does not need any additional settings to get activated, send via I2C (dac_controlset).
And Yes, the OLED Display needs also the right I2C settings (i2c_config) to work.

Regarding IR anyone have a Logitech remote to see if you have any logs when pressing a button?

Using an a simple Arduino sketch I can receive any code from any remote, so I think the hardware is fine. But in Squeezelite (quoting Philippe git) “only a Logitech SB remote from Boom, Classic or Touch will work. I think the file Slim_Devices_Remote.ir in the “server” directory”

So on the server side maybe the key is to add new codes if you don’t have a Logitech remote.
I need to try.

I’ve got an -quite- old squeezbox radio with its remote. Probably not the same sets of IR signal than Boom, Classic or Touch. Made some tests : no action on Mn Cast

Regarding IR, I’ve made some test it seems that by default the Squeezelite software is activating an internal pull down on the Gpio 12, so the IR signal coming to the ESP32 is attenuated. Compared to a test arduino sketch I’m using for infra red that is at the right level and decodes it right.

tried in the editor to activate the intenal pull up but still no change on the gpio :

is it the correct syntax?