为什么要接入Homeassistant?
这是因为最近Musicassitant算是正式接入Homeassistant了,而在我看来Musicassistant算是我这个同时使用spotify和本地音乐库的人的一个好选择,也可以通过自动化来实现全屋音乐和人到哪个房间哪个房间播放音乐的效果。
特别说明
如果文章过久未维护,变的失效,请参照Installation – Music Assistant的教程来实现。
必购清单
(只要规格跟得上就行)
- ESP32-WROVER-E(请一定要注意,要同时有至少4mRAM和4mPSRAM,如果没有但支持I2S协议那么有低音质的方案,但是要特别注意S2,C3系列是不被文章中的方法支持的)
- 杜邦线若干,母对母就行(看个人需求,买个100根其实也无所谓)
- PCM5102A模块或者其它DAC模块(强烈建议买自带滤波电容的)
- 音响(挑个喜欢的就行,如果PCM5102A选购的型号自带3.5mm,那买AUX的音响会更方便)
选配(建议买)
- 电容组合(至少包含10pF-100pF的组合)
- 稳压模块或滤波模块(0-25v即可)
- 电阻套装(至少包含100-300Ω的组合)
安装和配置
安装配置musicassistant
前往加载项——加载项商店,安装Music Assistant Server并启动,推荐固定到侧边栏
前往Music Assistant的设置界面(右上角的齿轮)
添加自己的音乐服务
设置界面翻到底部,点击ADD PLUGIN PROVIDER,选择Home assistant
直接点击SAVE即可
回到设置,配置Squeezebox players,安装完成这个之后才能发现安装squeezelite-esp32的机器。发现是全自动的,无需干预。
回到homeassistant的设置——设备与服务,会发现自动发现了music assitant,正常添加即可,需要注意,这个自动发现的部分是2024.12更新提供的,再往前的版本需要自行前往HACS下载对应插件才可发现(这个部分在music assistant的教程内有详细描述)。
另外单独说一下,如果采用docker在另外的机器上安装musicassistant,记得要打开8
将ESP-32接入homeassitant
总的来说有两个方案
1.通过squeezelite-esp32项目接入(更推荐这个,因为方案二会强制使用低音质流)
2.通过在Esphome或者Arduino之类的软件中自己编写程序接入(建议直接用Esphome就好,能可视化的通过WIFI远程更新固件)
刷入squeezelite-esp32
首先我们来讲讲怎么刷入第一个项目,最简单的方法就是使用Squeezelite-ESP32 Installer来刷入,只要ESP-32接入电脑,点击CONNECT就可以看到ESP-32的COM口。
点击INSTALL,选择INSTALL I2S-4MFLASH-16刷入即可
固件的话github上有提供预编译版本,可以直接下载,或者自己使用ESP-IDF编译,需要注意,我们需要下载的版本是这个2.1681-16#v4.3#I2S-4MFlash#master-v4.3(这是我编写该文档时最新的固件版本)
需要注意的是该网页支持的esp32型号有限,可以自行编译并用ESP-IDF刷写。目前测试过ESP32-S3-WROOM-1-N16R8不被该网页支持,但看参数是满足的,还请自行调整。
配置squeezelite-esp32
当刷入之后,esp32将会自动的打开开启一个wifi热点,WiFi的ssid以squeezelite开头的,密码是squeezelite,连接之后打开浏览器,输入192.168.4.1即可在网页端配置。
选择一个自己的WiFi连接即可。
在Hardware界面选定DAC模块,如果不在列表内,但支持I2S,那么选择I2S即可。接下来的时钟,字选择和数据针脚选择自己喜欢的,和DAC模块的对应针脚连接即可。剩余部分为高级定制,可以设定灯带和按钮,如果没有这方面需求,Hardware界面就算设置完成了。
请记得点击SAVE和APPLY来保存设定,保存后会自动重启。
System界面没有什么好说的,推荐关掉些用不到的功能,体感上可以降低模块超时的概率。在这个界面还可以设定Spotify connect的音质,推荐保持默认即可。通过Spotify connect播放音乐未发现音乐突然中断的情况。
在Audio界面推荐降低Stream and Output buffer sizes (in Kbytes)的大小,实测默认值500:2000可能一首歌都播不完模块就没有声音了,降低到目前值后体感上是4-5首曲子,可能能维持半小时左右的在线。低于该值似乎也不会明显的增加在线时间,我认为这个问题是music assitant本身的问题,或许等待版本更新能解决该问题,当然更有可能是我设置的不对,如果有人有解决方案欢迎告知我。
回到music assistant继续设定
点击右下角的播放器按钮
点击电源按钮激活,点击需要的播放器的电源按钮激活,并选中需要的播放器组,例如图中的bedroom是一个播放器组,可以选定组内需要几个播放器,选中的话会在多个播放器间同时播放,实现全屋音乐。
通过Esphome自编译固件来实现I2S传输
这个方案基本上基于schreibfaul1/ESP32-audioI2S: Play mp3 files from SD via I2S这个项目,而这个项目不支持S2和C3,不过还有另一个项目支持这两个型号winteris/ESPHome-singlecore-i2s-audio: ESPHome I²S Audio Media Player Component for ESP32 single-core chips (ESP32C3),可以试试这个。
使用Esphome编译固件
编写固件(这是配合Chatgpt写出来的示例项目,修改针脚,wifi名字和密码,api的key和ota的password即可)
esphome:
name: bedroom-music
friendly_name: bedroom-music
esp32:
board: esp32dev
framework:
type: arduino
# Enable logging
logger:
# Enable Home Assistant API
api:
encryption:
key: ""
ota:
- platform: esphome
password: ""
wifi:
ssid: ""
password: ""
# I2S Audio output (PCM5102A)
i2s_audio:
id: my_audio
i2s_bclk_pin: GPIO25 # 位时钟(BCLK)
i2s_lrclk_pin: GPIO26 # 左右时钟(LRCK)
# Example configuration entry
media_player:
- platform: i2s_audio
name: ESPHome test Media Player
dac_type: external
i2s_dout_pin: GPIO27
mode: stereo
captive_portal:
选择manual download来生成固件
下载Factory format的版本
通过Web – ESPHome来刷入固件
能在homeassistant的设置——设备与服务——esphome中找到,可以添加仪表盘,我已经弃用该方案,所以没有更进一步的教程。
结语和经验
总体来说我更推荐使用方案一,因为不知为何music assitant和我的esp32连接不稳定,但spotify connect的连接很稳定,可以作为一个替代方案使用。
ps:实际操作上esp32和dac模块的连接不需要接滤波电容,不接的话稍有底噪,但依然能听的非常清楚。但接上之后底噪确实有降低,买那种D类功放波纹干扰抑制模块即可,我买的约2块钱左右。
另外值得一提是如果出现巨大的底噪,大到你觉得完全听不清音乐,请检查音响和dac模块的连接,特别是通过3.5mm的连接,请注意一定要插到底。
请注意一定要插到底!
请注意一定要插到底!!
请注意一定要插到底!!!
请用力捅进去,理论上3.5mm的插头不应该有一部分暴露在外。