本文介绍如何使用PYNQ外接语音播报模块
先贴一张实物图:
语音播报模块介绍
选择YS-M3语音播放模块,即下图的这款:
该模块是一个MP3播放模块,集成了MP3 、MAV的硬编码,自带3W功放,可调节音量,支持单键触发和编码触发两种工作模式,最多可触发31首歌曲,支持16G最大内存。使用前,需要先将要播放的歌曲按如图所示的格式放在语音播报模块的TF卡中。
例如我这里是将原先的1-8和第10首换成了要播放的语音。
硬件连接
因为需要使用代码来控制要语音播放,所以选择编码触发模式:
按照语音播报的说明,我们共需要三个GND、一个5V和5个GPIO口,关于PYNQ GPIO口的介绍可以参考这篇博客。这里直接使用PYNQ上的Arduino接口作为GPIO来进行编码触发,当然也可以使用RPI接口。连接方式如下图:
使用一个Pmod的GND和A10相连:
哪些引脚可以配置成GPIO口,PYNQ的用户使用手册里都有提到,我在文末会附上语音播报模块和PYNQ用户手册的资源地址(网上都可以搜到)。
软件调试
我们需要使用上图中的Python类来控制Arduino IO的读和写,参数中index需要注意,因为我使用的是A1-A5这5个引脚,文档中A0-A5引脚对应的是15-19。
接下来启动 jupyter notebook编写代码
运行即可听到想要的曲子(这两块五的喇叭音质居然还不错)
代码编写时有几点注意事项:
- 语音播报模块使用的是反编码,11110对应第一首,11101对应第二首…以此类推
- 在连续播放多首时,将对应引脚写入0后再恢复成1时,中间需要加一点延时,在PYNQ是要这样的,不然会发生错误,而在单片机里就不需要(可能是什么bug)。
如果上述播放第二首的结尾我写成这样:
A[1].write(1)
A[2].write(1)
# 在播放下一首时可能就会遇到错误