『瀚思彼岸』» 智能家居技术论坛

标题: 一个基于ESP32 + DAC的 WiFi音箱 [打印本页]

作者: livebelive    时间: 2022-1-3 17:16
标题: 一个基于ESP32 + DAC的 WiFi音箱
本帖最后由 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

硬件连线:


[attach]34426[/attach]

配置ESPHome:
  1. esphome:
  2.   name: 改成自己的名字(只能小写字母)
  3.   # platform: ESP32
  4.   # board: esp32dev
  5.   includes:
  6.     - wifispeaker.h
  7.   platformio_options:
  8.     lib_ldf_mode: deep

  9. esp32:
  10.   board: esp32dev
  11.   framework:
  12.     type: arduino
  13.     version: latest
  14.     platform_version: 3.4.0
  15.    
  16. binary_sensor:
  17.   - platform: custom
  18.     lambda: |-
  19.       auto c = new ESPAudioComponent();
  20.       App.register_component(c);
  21.       return {c};

  22.     binary_sensors:
  23.       name: "ESPAudioPlaying"

  24. # Enable logging
  25. logger:

  26. # Enable Home Assistant API
  27. api:

  28. ota:

  29. wifi:
  30.   ssid: 'SonYoung_2.4'
  31.   password: 'wifi密码'
  32.   manual_ip:
  33.     static_ip: 静态IP地址
  34.     gateway: 路由器网关
  35.     subnet: 子网掩码
  36.     dns1: DNS服务器地址
复制代码
刷写固件:
接入HomeAssistant:

构建HomeAssistant中的媒体播发器:

  1. # configuration.yaml配置样例
  2. media_player:
  3.   - platform: universal
  4.     name: DIY-esp-audio
  5.     state_template: >
  6.             {% if is_state('binary_sensor.espaudioplaying', 'off') %}
  7.               idle
  8.             {% elif is_state('binary_sensor.espaudioplaying', 'on') %}
  9.               playing
  10.             {% else %}
  11.               off
  12.             {% endif %}
  13.     commands:
  14.       play_media:
  15.         service: esphome.xxx_play_media
  16.         data:
  17.           url: "{{ media_content_id }}"
复制代码


有待改进的内容:







PS:希望论坛的大神能帮忙看看以上几个问题是什么原因导致的,以及如何修正改良!



[attach]34427[/attach]







作者: 情非殇    时间: 2022-1-3 18:46
坐等后续,我做了个esphome+dfplayer的板子,tts只能通过播放音频文件,没法文字转tts
作者: evantalk    时间: 2022-1-3 18:51
我50元收了一个小爱mini,用node-red控制当作tts,非常好用
作者: dinglifeng    时间: 2022-1-4 07:47
我有的时候用sonos 有的时候用萤石
作者: livebelive    时间: 2022-1-4 22:57
我这个只是结合了 HACHINA的朱老师的课程里面esphome播放器 改装来的 我觉得使用esphome还是很方便的!
作者: livebelive    时间: 2022-1-4 22:59
能够接入HA 作为Play_Media服务 这个是最方便的 否则要用MQTT什么的 要么就是Node-red写流 直接用HA接入的TTS服务直接调用播放 简单

作者: telanx    时间: 2022-1-5 15:16
赞一个,厉害啊。
作者: livebelive    时间: 2022-1-5 22:08
henry2022 发表于 2022-1-5 09:55
esp8266性能会差很多对吧?

8266我没成功哈哈 针脚搞不懂 话说ESP32音质也不行...怎么说呢,解码太垃圾了...没有优秀的解码 I2S输出 也是渣渣...我突然发现 这玩意也就这样了...听个响吧 做TTS可以 播放音乐 就算了吧
作者: livebelive    时间: 2022-1-5 22:10
henry2022 发表于 2022-1-5 09:55
esp8266性能会差很多对吧?

换个MP3的库 可能会好些 但是不想折腾了 太麻烦了 用来做个TTS够了
作者: livebelive    时间: 2022-1-6 19:07
henry2022 发表于 2022-1-6 13:20
我之前用8266做了一个别的固件的,PAM8403的驱动板。音质也烂,只能靠调电容来压一压了。只能听听小文件 ...

我买了个 wrover 有psram的 回来试一下看看 怎么样
现在这个不是只能播放MP3  而是在没有PSRAM的硬件上 只能播放MP3 它这个库有buff机制 如果PSRAM的话 可能会完全不同 我回来试下
作者: xuyang    时间: 2022-1-10 08:13
请问一下:PCM5102上面有SCK/BCK/DIN/LRCK/GND/VIN,与esp32怎么连接?
作者: gmmy1979    时间: 2022-1-11 21:18
正好需要,大佬可以给个esp32怎么连接dac的吗,有图的话最好,
作者: livebelive    时间: 2022-1-12 08:13
xuyang 发表于 2022-1-10 08:13
请问一下:PCM5102上面有SCK/BCK/DIN/LRCK/GND/VIN,与esp32怎么连接?

一样的 只要连 bck din lrck gnd vin就可以了
作者: livebelive    时间: 2022-1-12 08:14
xuyang 发表于 2022-1-10 08:13
请问一下:PCM5102上面有SCK/BCK/DIN/LRCK/GND/VIN,与esp32怎么连接?

有连接图的啊 照图连 设置好PIN就行
作者: sasukebinbin    时间: 2022-1-12 15:19
情非殇 发表于 2022-1-3 18:46
坐等后续,我做了个esphome+dfplayer的板子,tts只能通过播放音频文件,没法文字转tts ...

文字转tts也是生成MP3文件再播放MP3文件啊
作者: 情非殇    时间: 2022-1-12 15:45
sasukebinbin 发表于 2022-1-12 15:19
文字转tts也是生成MP3文件再播放MP3文件啊

如果这样的话,应该是有延迟的吧,毕竟生成也要时间
作者: sasukebinbin    时间: 2022-1-12 22:54
本帖最后由 sasukebinbin 于 2022-1-12 22:56 编辑
情非殇 发表于 2022-1-12 15:45
如果这样的话,应该是有延迟的吧,毕竟生成也要时间

嗯 我之前帮别人测试的时候发现,网速不够快的话,国内用百度TTS应该是没有问题的. 我在国外, 百度,微软,谷歌都是秒生成的可以用NR读取文本,然后用rest api的tts_get_url. 就能获取到生成的tts的mp3路径,然后直接播放就好了,我的延迟可能只有1秒

作者: cxw    时间: 2022-1-14 13:43
厉害。学习一下
作者: maxpc    时间: 2022-1-16 13:04
情非殇 发表于 2022-1-3 18:46
坐等后续,我做了个esphome+dfplayer的板子,tts只能通过播放音频文件,没法文字转tts ...

有办法播放本地网络的mp3吗
作者: 情非殇    时间: 2022-1-16 20:20
maxpc 发表于 2022-1-16 13:04
有办法播放本地网络的mp3吗

dfplaer模块+tf储存卡,不太灵活
作者: livebelive    时间: 2022-1-18 14:27
sasukebinbin 发表于 2022-1-12 22:54
嗯 我之前帮别人测试的时候发现,网速不够快的话,国内用百度TTS应该是没有问题的. 我在国外, 百度,微软,谷 ...

TTS如果用于问答 对延迟还是有要求的 但大多数家庭使用场景 设置自动化的角度来看 延迟还是可以接受的
作者: xuyang    时间: 2022-1-18 15:12
PCM5102和esp32连接
BCK-->G27
DIN-->G25
LCK-->G26
GND-->GND
VIN-->VIN

一次性测试成功。非常感谢。

作者: jackyzrk    时间: 2022-1-19 17:24
请教如果使用esp32内置的dac或者干脆不使用dac,需要怎么修改?
谢谢。
作者: jackyzrk    时间: 2022-1-20 00:02
已经用esp32 内置dac测试成功,谢谢。
作者: xuyang    时间: 2022-1-26 21:22
jackyzrk 发表于 2022-1-20 00:02
已经用esp32 内置dac测试成功,谢谢。

能指点一下,如何配置吗?
作者: 花落花空    时间: 2022-1-30 18:29
海鲜市场有品胜的那种音乐路由,看了下38不包邮,可以实现dlan和airplay,通过3.5和莲花座好像还有光纤输出音频,成本和你这个比如何
作者: 花落花空    时间: 2022-1-30 18:35
花落花空 发表于 2022-1-30 18:29
海鲜市场有品胜的那种音乐路由,看了下38不包邮,可以实现dlan和airplay,通过3.5和莲花座好像还有光纤输出 ...

dlan可以直接接入ha做播放器,airplay好像通过插件也能
作者: liantianji    时间: 2022-1-31 16:08
本帖最后由 liantianji 于 2022-2-1 11:33 编辑

感谢楼主提供的方案,折腾了1天,ESP32连接PM1502成功了,解决了docker无法使用tts的问题。docker版的HA升级到2021.6.3,完美运行。
就是偶尔播放影间会有卡顿现象。


作者: xuyang    时间: 2022-2-13 12:51
每次声音会开头卡顿一下,有办法解决吗?
作者: telanx    时间: 2022-2-13 13:12
最近想把一个老的2.1音响改造成无线的,发现苹果的airport extream路由有一款带3.5mm耳机插孔,并且支持airplay2,可以几个音响同步无线播放,结果现在这早就淘汰了的东西被炒到150一个….这东西应该内置dac的

要是能用esp32来实现平价替代就好了….
作者: nbxzl    时间: 2023-10-6 17:24
学习了
作者: kisccc    时间: 2023-12-11 22:41
只可惜我一直用arduino的,也想做到这个功能




欢迎光临 『瀚思彼岸』» 智能家居技术论坛 (https://bbs.hassbian.com/) Powered by Discuz! X3.5