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

 找回密码
 立即注册
查看: 123800|回复: 71

[新奇玩法] 好玩!惊呆!成为HA的喉舌,ESP-01S竟然还能干这事儿?!

  [复制链接]

105

主题

2954

帖子

1万

积分

超级版主

智能家居&单板滑雪痴迷爱好者

Rank: 8Rank: 8

积分
12103
金钱
9084
HASS币
460

教程狂人突出贡献

发表于 2020-7-20 10:16:03 | 显示全部楼层 |阅读模式
本帖最后由 XCray 于 2021-10-8 21:51 编辑

偶然间发现一个让我感到非常惊艳的项目,可以让ESP-01S模块成为HA的喉舌,完成发声的任务!应该是让HA发声的最低成本解决方案!

可以播放mp3,可以是本地TTS(当然,只能支持英文),可以播放古典的诺基亚 RTTTL 铃音。还可以播放网络电台~

你只需要用mqtt指挥它即可,也就是说,什么HA啦,Node-Red啦,都可以直接使用。

你所需要的,就是找一根线,把你的音箱输入口连接到ESP-01S模块(当然,别的ESP8266也没问题,ESP32更不是问题)。

考虑到esp8266只有几十k的内存,什么立体声啦无损啊啥的就不要想了好吧?
至于码率,我播放Windows自带的Sleep Away.mp3没有任何问题,音质远超出我的预期!192kbps的码率,3:20时长、文件大小4.73MB

这是原作者的文章,英文的:
https://www.instructables.com/id/MQTT-Audio-Notifier-for-ESP8266-Play-MP3-TTS-RTTL/

这是源码:
https://gitlab.com/MrDIYca/mrdiy ... _local_notifier.ino

这是原作者在ha官方论坛开的帖子:
https://community.home-assistant.io/t/turn-an-esp8266-wemosd1mini-into-an-audio-notifier-for-home-assistant-play-mp3-tts-rttl/211499

不愿意看英文的,就继续看这个贴子吧,步骤其实很简单。

1、下载作者已经编译好的固件

https://gitlab.com/MrDIYca/mrdiy ... /MrDIY_notifier.bin
这个站点速度还比较快,我就不搬运了

2、连线(根据自己的情况,烧写、配网后再接线也没啥问题)

只用两根线:地线、声音信号线。地线接到GND引脚这没啥说的,使用串口的RX就是声音信号输出(原来认识不准确以为这个引脚可以更改,其实是乐鑫在芯片层面就指定的,I2S输出)。
conn.png
这是我接的线(手上没有富裕的电源模块,暂时借用继电器模块的供电)。因为只是单声道,所以把左右声道都接在一起了。其实我也是烧写、配网后才接到继电器模块上的,开始打算直接连着电脑在USB转TTL的小板上进行测试,发现输出的电流声太大根本无法使用。改用继电器模块后一点噪音也没有,这个小模块真是良心啊。改用手机充电器给USB转TTL小板供电,也是一点噪音也没有。懒得补充照片了~~

                               
登录/注册后可看大图

这是作者的连接图,用的是另一种模块,不过没啥本质区别。

3、烧写

由于固件比较大,596k,所以像ESP-01这种模块就不能用OTA的方式写入了,那种flash只有512k的更是不用考虑了。
随便一种烧写工具都可以,推荐ESPHome的(看我之前的帖子),tasmota的也不错。

4、配网


重启后连接模块提供的临时热点 "MrDIY Notifier",密码是 "mrdiy.ca"(没有双引号哈)。和其他固件一样,会自动弹出配网页面(没弹出的话手工指定地址192.168.4.1)。
需要注意的是,除了你自己的WiFi名称、密码,MQTT服务器地址用户名密码之外,这儿必须输入一个新的配网AP密码才行。
另外,作者没有提供指定mqtt端口号的输入框。如果你的mqtt用的不是默认端口的话,要么改成默认端口,要么自己编辑编译固件。

5、测试和使用

固件支持以下命令:
     - Play MP3,播放mp3:              MQTT topic: "/mrdiynotifier/play"
                             MQTT load: http://url-to-the-mp3-file/file.mp3

     - Play Icecast Stream:   MQTT topic: "/mrdiynotifier/stream"
                             MQTT load: http://url-to-the-icecast-stream/file.mp3

     - Play Ringtone,播放铃音 : MQTT topic: "/mrdiynotifier/tone"
                             MQTT load: RTTTL formated text, example: Soap:d=8,o=5,b=125:g,a,c6,p,a,4c6,4p,a,g,e,c,4p,4g,a

     - Say Text,文本转语音:              MQTT topic: "/mrdiynotifier/say"
                             MQTT load: Text to be read, example: Hello There. How. Are. You?

     - Change Volume,设置音量:         MQTT topic: "/mrdiynotifier/volume"
                             MQTT load: a double between 0.00 and 1.00, example: 0.7

     - Stop Playing,停止播放:         MQTT topic: "/mrdiynotifier/stop" 


同时,模块在MQTT主题"/mrdiynotifier/status"里发布自己的工作状态,分别为:
"playing"       either paying an mp3, streaming, playing a ringtone or saying a text
                  "idle"          waiting for a command
                  "error"         error when receiving a command: example: MP3 file URL can't be loaded
                  "connected"     device just connected to MQTT server
另外,模块连接到 Wifi 和 MQTT 时还会播放一段2秒长的提示音,别把音箱的声音开太大,免得吓着自己~~~


6、HA和Node-Red
既然是mqtt,啥都不用说了吧?
如果会python,可以弄一个定制组件,把它转变成一个HA标准的媒体播放器,这样就可以更加方便地使用TTS、播放音乐了。


7、扩展

- 改造固件,增加GPIO控制,利用继电器控制音箱电源、或者刷到sonoff智能开关/插座上,都可以达到控制音箱电源开关节能/免打扰的目的。

- 搞个几块钱的USB小音箱、把ESP8266模块塞到里面(注意供电电压),很实用的方案(感谢21楼koranayle的主意,很有价值)。

- 搞个电源模块、三极管和电阻,加入一个最小的功放电路,形成一个独立的、低成本的HomeAssistant发声单元。

- 如果熟悉音响电路,了解如何保证音质的话,换个更强大的ESP32,打造成智能背景音乐单元、智能音箱之类的。

评分

参与人数 3金钱 +35 HASS币 +20 收起 理由
sorrypqa + 5 感谢楼主分享!
yuqiuyi99 + 10
+ 20 + 20 纳尼,还有这种操作?

查看全部评分

回复

使用道具 举报

40

主题

2176

帖子

8286

积分

元老级技术达人

积分
8286
金钱
6095
HASS币
110
发表于 2020-7-20 11:16:06 | 显示全部楼层
有意思  用的什么喇叭?推力有限吧
期待上个视频看看
回复

使用道具 举报

5

主题

161

帖子

3994

积分

论坛元老

Rank: 8Rank: 8

积分
3994
金钱
3828
HASS币
30
发表于 2020-7-20 11:21:43 | 显示全部楼层
这个有意思,谢谢
回复

使用道具 举报

105

主题

2954

帖子

1万

积分

超级版主

智能家居&单板滑雪痴迷爱好者

Rank: 8Rank: 8

积分
12103
金钱
9084
HASS币
460

教程狂人突出贡献

 楼主| 发表于 2020-7-20 11:33:34 | 显示全部楼层
ghostist 发表于 2020-7-20 11:16
有意思  用的什么喇叭?推力有限吧
期待上个视频看看

电路方面我是一窍不通~~

我接的是一个有源音箱。无源的话,我瞎猜,推力应该也不会太差吧?
据说不接限流电阻的话,烧LED都是常事儿,这么猛的电流推个小喇叭应该不在话下吧?

期待电路方面的大神给解惑。

对了源码里有一个简单功放的电路:
    Connect your audio jack to Rx and GND - an external amplifier if required. You can build a simple amp
    with a single 1kΩ resistor and an NPN 2N3904 transistor, like this:


                                        2N3904 (NPN)
                                       +---------+
                                       |         |     +--|
                                       | E  B  C |    / S |
                                       +-|--|--|-+    | P |
                                         |  |  +------+ E |
                                         |  |         | A |
           ESP8266-GND ------------------+  |  +------+ K |
                                            |  |      | E |
           ESP8266-I2SOUT (Rx) -----/\/\/\--+  |      \ R |
                                     1kΩ       |       +--|
           USB 5V -----------------------------+
回复

使用道具 举报

6

主题

226

帖子

3723

积分

论坛元老

Rank: 8Rank: 8

积分
3723
金钱
3497
HASS币
0
发表于 2020-7-20 12:22:39 | 显示全部楼层
牛~~~~~~~~~~~~~~~~~~~~~  找个时间玩玩
回复

使用道具 举报

0

主题

60

帖子

1357

积分

金牌会员

Rank: 6Rank: 6

积分
1357
金钱
1297
HASS币
0
发表于 2020-7-20 13:37:50 | 显示全部楼层
这个有意思,谢谢分享
回复

使用道具 举报

40

主题

2176

帖子

8286

积分

元老级技术达人

积分
8286
金钱
6095
HASS币
110
发表于 2020-7-20 13:58:54 | 显示全部楼层
XCray 发表于 2020-7-20 11:33
电路方面我是一窍不通~~

我接的是一个有源音箱。无源的话,我瞎猜,推力应该也不会太差吧?

这个电路就是为了小电流推不动而弄的

LED可能30mA就烧了,5V的话也才0.15W  也就推个小喇叭吧
回复

使用道具 举报

6

主题

743

帖子

5954

积分

论坛元老

Rank: 8Rank: 8

积分
5954
金钱
5206
HASS币
20
发表于 2020-7-20 15:31:05 | 显示全部楼层
不是一般的牛!!!!!
回复

使用道具 举报

6

主题

95

帖子

1199

积分

金牌会员

Rank: 6Rank: 6

积分
1199
金钱
1104
HASS币
0
发表于 2020-7-20 15:46:49 | 显示全部楼层
膜拜
回复

使用道具 举报

2

主题

109

帖子

3586

积分

论坛元老

Rank: 8Rank: 8

积分
3586
金钱
3477
HASS币
0
发表于 2020-7-20 22:49:48 | 显示全部楼层
这个好,谢谢分享
回复

使用道具 举报

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

本版积分规则

Archiver|手机版|小黑屋|Hassbian

GMT+8, 2024-11-23 13:08 , Processed in 0.060653 second(s), 36 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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