ESP8266与语音控制的集成

智能家居或商业环境中,通过语音控制设备是一种便捷的方式。例如,可以在床上通过语音控制灯光、音乐或加热系统。ESP8266是一个低成本的微控制器,非常适合用于此类项目。本文将介绍如何使用ESP8266和EasyVR模块实现语音控制功能。

ESP8266的功能有限,因此需要一个额外的模块来执行热词检测的复杂任务。最近,在《制作》杂志上看到了一篇关于使用Arduino和不同语音识别板进行热词检测的文章。想知道是否可以将这个功能移植到ESP上,使用Micropython来实现。

硬件准备

使用的是Wemos D1 mini,因为桌子上有一些。接线非常简单,因为Easy VR可以接受5V和3.3V的电源。除了电源,还需要RX/TX进行串行通信。

Wemos需要刷入Micropython(1.12分支)。建议将两个模块放在面包板上,并连接USB电源到Wemos。如果更喜欢焊接,也可以选择这种方式。

编程和测试

为了编程和测试,启用了repl,并使用webrepl连接到192.168.4.1,这是加入Wemos提供的热点后的操作。EasyVR的通信协议在互联网上提供的手册中有非常详细的说明。

语音命令

EasyVR接受两种类型的语音命令。一种是说话者独立的(SI)命令,需要一个特殊的工具(在制造商的网站上可用,但不是免费的)来创建。另一种是说话者依赖的(SD)命令,可以使用EasyVR的麦克风录制。语音命令在EasyVR中以组的形式组织,其中组0应该包含热词,其他组应该包含语音命令。组16保留用于密码。可以在文档中查看技术细节。

代码使用

集成了三个Python代码文件(train.py、recognition.py和manage.py),可以将它们复制到ESP上,并通过以下语法在Micropython shell中导入它们。

Python import train import recognize import manage

在一些ESP8266上,可能会注意到它在导入一个模块后抱怨内存不足,当想导入另一个模块时。这是因为一些8266的内存非常小。为了避免这个问题,可以使用ESP32,或者按下Ctrl-D,重新连接webrepl会话,然后导入。这将进行软重置,释放大部分已使用的内存。

功能详情

模块中的大多数函数都是自解释的。导入train模块:

  • 显示每个组中定义的命令数量
  • 显示每个组中每个命令的详细信息(编号、训练次数、标志、冲突命令、命令标签)
  • 将语言设置为英语(对于内置单词很重要)
  • 将语言设置为德语(对于内置单词很重要)
  • 将麦克风灵敏度距离设置为非常短(直接在嘴前)
  • 将麦克风灵敏度距离设置为大约1-2米
  • 将麦克风灵敏度距离设置为超过2米(全房间)
  • 在组中添加(插入)一个新命令并定义其标签。该组中的所有现有命令将向上移动一步。
  • 训练特定组和命令编号的语音命令。(应该做两次以提高命中率)

识别菜单

recognize菜单有这些功能:

  • 将语言设置为英语(对于内置单词很重要)
  • 将语言设置为德语(对于内置单词很重要)
  • 将麦克风灵敏度距离设置为非常短(直接在嘴前)
  • 将麦克风灵敏度距离设置为大约1-2米
  • 将麦克风灵敏度距离设置为超过2米(全房间)
  • 开始特定组的语音识别。尝试一次。
  • 结果将是识别到的命令编号或错误编号。
  • 开始特定组的语音识别。尝试十次识别。
  • 结果将是识别到的命令编号或错误编号。

管理菜单

manage菜单提供这些功能:

  • 显示每个组中每个命令的详细信息(编号、训练次数、标志、冲突命令、命令标签):
  • 从特定组中移除定义的命令(后续命令将移动到该位置)。

注意事项

一个需要注意的点是,基本的ESP8266只有一个UART,这也被REPL接口使用,用于与设备(USB或WIFI)通信。在运行时环境中,这可能不是问题,因为通常不会频繁使用(web)repl。但在开发和调试过程中,(web)repl是监控设备上发生的事情的重要方式,所以寻找了解决这个问题的方法。在互联网上的某个论坛帖子上,找到了正确的方向。诀窍是在与EasyVR(或其他串行设备)通信的那一刻禁用webrepl。但必须确保在错误情况下再次启用它,否则将失去与设备的连接。

Python try: uos.dupterm(None, 1) # 关闭repl uart=UART(0, 9600) uart.init(9600, bits=8, parity=None, stop=1) *** 在这里做串行通信 *** except Exception: print("Error occured") finally: uos.dupterm(machine.UART(0, 115200), 1) # 启用repl
沪ICP备2024098111号-1
上海秋旦网络科技中心:上海市奉贤区金大公路8218号1幢 联系电话:17898875485