本帖最后由 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输出)。
这是我接的线(手上没有富裕的电源模块,暂时借用继电器模块的供电)。因为只是单声道,所以把左右声道都接在一起了。其实我也是烧写、配网后才接到继电器模块上的,开始打算直接连着电脑在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,打造成智能背景音乐单元、智能音箱之类的。