本帖最后由 livebelive 于 2022-1-5 22:09 编辑
bilibili高清链接:ESP32 WIFI播放器 - 通过ESPHOME接入homeassistant_哔哩哔哩_bilibili
背景(废话 可以不看)
首先我自己的情况是,家里的homeassistant安装在虚拟机上,使用的是HASSOS的方式,在音频这块本身就存在很多不便,主要是TTS方面,没办法愉快的使用!
为什么这么说呢?
1、客厅用的回音壁,不可能24小时待机,1是耗电,2是空闲时他自己就关了。。。
2、使用蓝牙连接音箱也存在上面的问题,最主要是在HASSOS上很难实现。。。
3、要么就要单独部署一个KODI、MPD、Mopify、Dlna之类的,家里有安卓的盒子Z9x,如果用kodi的话,要在盒子里面安装kodi并且要一直运行。。。当我看电影时,就没办法TTS了。。。然后就是盒子里面带的DLNA,安卓的DLNA没那么好用,推送音乐这种是可以,TTS这类的即时播放的音频,不太行,还没等推过来,这边就关闭了。。。要推送很长的语音才行。。。也不知道是安卓的dlna机制问题还是我这个Z9X的dlna机制问题。综合问题,最后放弃Z9X作为TTS终端。
家里还有个天猫精灵,其实最好的方式是用esp32的蓝牙连接天猫精灵,但是蓝牙这个东西吧,也不稳定!看很多人用蓝牙都会有断联的情况!而且天猫精灵那个音质吧。。。
最后,就用家里限制的一个JBL的音箱来完成这件事!首先把音箱的电池供电改成了5V直接供电,这样就可以一直开机了。
正文(假)
程序是基于HAChina教程中的WiFi播放器,结合了GitHub上的Audio i2S的库而来。
https://github.com/schreibfaul1/ESP32-audioI2S
库支持FLAC,AAC,MP3,WAV,M4A,OGG,M3U播放列表。但网络推送只支持 MP3和 MP3的 播放列表
看了坛子里面有人发ESP32 结合MQTT来播放音乐,也是不错的,但是那个库年久失修了。。。想拿过来改一下I2S DAC输出在编译烧录,发现很多引用的库都更新了。。。要做大量的修改最后放弃了。。。
而且我觉得使用ESPHOME的方案更好一些,这样就可以将设备作为HA系统的播放器来使用了,可以通过调用service来播放音乐、TTS,很方便
正文(真)
---------------------------------------------------------------------------------------
你也可以选择不使用外置DAC功能,直接使用ESP32内置DAC或干脆不使用DAC,直接输出模拟信号,这样的话可以直接连接喇叭,但需要接个电容,具体没测试了,有兴趣的直接参考
参考项目:https://github.com/earlephilhower/ESP8266Audio
硬件连线:
配置ESPHome:
esphome:
name: 改成自己的名字(只能小写字母)
# platform: ESP32
# board: esp32dev
includes:
- wifispeaker.h
platformio_options:
lib_ldf_mode: deep
esp32:
board: esp32dev
framework:
type: arduino
version: latest
platform_version: 3.4.0
binary_sensor:
- platform: custom
lambda: |-
auto c = new ESPAudioComponent();
App.register_component(c);
return {c};
binary_sensors:
name: "ESPAudioPlaying"
# Enable logging
logger:
# Enable Home Assistant API
api:
ota:
wifi:
ssid: 'SonYoung_2.4'
password: 'wifi密码'
manual_ip:
static_ip: 静态IP地址
gateway: 路由器网关
subnet: 子网掩码
dns1: DNS服务器地址
刷写固件:
接入HomeAssistant:
实体binary_sensor.ESPAudioPlaying 状态表示ESPAudio是否正在播放 服务esphome.xxxx_play_media 参数:url 播放指定位置的音频媒体文件(支持 MP3、WAV、FLAC、AAC、OGG、M4A、M3U播放列表)
构建HomeAssistant中的媒体播发器:
# configuration.yaml配置样例
media_player:
- platform: universal
name: DIY-esp-audio
state_template: >
{% if is_state('binary_sensor.espaudioplaying', 'off') %}
idle
{% elif is_state('binary_sensor.espaudioplaying', 'on') %}
playing
{% else %}
off
{% endif %}
commands:
play_media:
service: esphome.xxx_play_media
data:
url: "{{ media_content_id }}"
有待改进的内容:
- 音质并不是很理想,这个是个大问题,因为初衷就是想要个音质好的音箱...没找到问题所在...
- 声音偶尔会开头卡顿一下,很少...没找到问题所在...
- 播放48000的MP3会有卡顿...没找到问题所在...
- 音箱有底噪,接耳机没有。。。接我另外一款桌面音箱也没有,这个音箱之前是电池供电的,我改成了USB 5V供电,所以感觉问题应该在我这个音箱上...没确定问题所在...
PS:希望论坛的大神能帮忙看看以上几个问题是什么原因导致的,以及如何修正改良!
wifispeaker.zip
(203.29 KB, 下载次数: 115)
|