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

 找回密码
 立即注册
查看: 7522|回复: 31

[新奇玩法] 一个基于ESP32 + DAC的 WiFi音箱

[复制链接]

5

主题

117

帖子

506

积分

高级会员

Rank: 4

积分
506
金钱
389
HASS币
0
发表于 2022-1-3 17:16:07 | 显示全部楼层 |阅读模式
本帖最后由 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

硬件连线:


DAC.png

配置ESPHome:
  • 将附件中的[color=var(--color-accent-fg)]wifispeaker.h文件放置在EspHome的配置目录中
  • 将附件中的其他文件文件/config/esphome/.esphome/build/wifispeaker/src目录中(此目录需要在第三步建立ESPHome配置文件后才会出现.)
  • 在配置yaml文件中配置一下配置

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, 下载次数: 97)






评分

参与人数 3金钱 +27 收起 理由
kisccc + 5 感谢楼主分享!
hundajdx + 2 论坛有你更精彩!
+ 20 厉害了word楼主!

查看全部评分

回复

使用道具 举报

26

主题

2095

帖子

8503

积分

论坛元老

Rank: 8Rank: 8

积分
8503
金钱
6403
HASS币
30

论坛元老

发表于 2022-1-3 18:46:15 | 显示全部楼层
坐等后续,我做了个esphome+dfplayer的板子,tts只能通过播放音频文件,没法文字转tts
回复

使用道具 举报

46

主题

641

帖子

4394

积分

元老级技术达人

积分
4394
金钱
3723
HASS币
120
发表于 2022-1-3 18:51:09 | 显示全部楼层
我50元收了一个小爱mini,用node-red控制当作tts,非常好用
回复

使用道具 举报

30

主题

526

帖子

2319

积分

金牌会员

Rank: 6Rank: 6

积分
2319
金钱
1788
HASS币
20
发表于 2022-1-4 07:47:36 | 显示全部楼层
我有的时候用sonos 有的时候用萤石
回复

使用道具 举报

5

主题

117

帖子

506

积分

高级会员

Rank: 4

积分
506
金钱
389
HASS币
0
 楼主| 发表于 2022-1-4 22:57:42 | 显示全部楼层
我这个只是结合了 HACHINA的朱老师的课程里面esphome播放器 改装来的 我觉得使用esphome还是很方便的!
回复

使用道具 举报

5

主题

117

帖子

506

积分

高级会员

Rank: 4

积分
506
金钱
389
HASS币
0
 楼主| 发表于 2022-1-4 22:59:49 | 显示全部楼层
能够接入HA 作为Play_Media服务 这个是最方便的 否则要用MQTT什么的 要么就是Node-red写流 直接用HA接入的TTS服务直接调用播放 简单
回复

使用道具 举报

15

主题

636

帖子

2179

积分

金牌会员

Rank: 6Rank: 6

积分
2179
金钱
1543
HASS币
0
发表于 2022-1-5 15:16:43 | 显示全部楼层
赞一个,厉害啊。
回复

使用道具 举报

5

主题

117

帖子

506

积分

高级会员

Rank: 4

积分
506
金钱
389
HASS币
0
 楼主| 发表于 2022-1-5 22:08:25 | 显示全部楼层
henry2022 发表于 2022-1-5 09:55
esp8266性能会差很多对吧?

8266我没成功哈哈 针脚搞不懂 话说ESP32音质也不行...怎么说呢,解码太垃圾了...没有优秀的解码 I2S输出 也是渣渣...我突然发现 这玩意也就这样了...听个响吧 做TTS可以 播放音乐 就算了吧
回复

使用道具 举报

5

主题

117

帖子

506

积分

高级会员

Rank: 4

积分
506
金钱
389
HASS币
0
 楼主| 发表于 2022-1-5 22:10:37 | 显示全部楼层
henry2022 发表于 2022-1-5 09:55
esp8266性能会差很多对吧?

换个MP3的库 可能会好些 但是不想折腾了 太麻烦了 用来做个TTS够了
回复

使用道具 举报

5

主题

117

帖子

506

积分

高级会员

Rank: 4

积分
506
金钱
389
HASS币
0
 楼主| 发表于 2022-1-6 19:07:06 | 显示全部楼层
henry2022 发表于 2022-1-6 13:20
我之前用8266做了一个别的固件的,PAM8403的驱动板。音质也烂,只能靠调电容来压一压了。只能听听小文件 ...

我买了个 wrover 有psram的 回来试一下看看 怎么样
现在这个不是只能播放MP3  而是在没有PSRAM的硬件上 只能播放MP3 它这个库有buff机制 如果PSRAM的话 可能会完全不同 我回来试下
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|Hassbian

GMT+8, 2024-4-20 22:41 , Processed in 3.041406 second(s), 36 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表