21 Star 73 Fork 24

Walkline / MicroPython with Aligenie Voice Skill

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
克隆/下载
README.md 7.03 KB
一键复制 编辑 原始数据 按行查看 历史
Walkline 提交于 2020-08-17 22:09 . 更新说明文档

MicroPython with Aligenie Voice Skill

项目介绍

通过天猫精灵语音技能控制 MicroPython ESP32 开发板

简单说,就是在ESP32 开发板上运行一个Web Server,用于接收语音技能平台(以下简称平台)发送过来的请求,经过分析处理执行相应的操作,最后发送反馈内容给平台,通过天猫精灵语音播报反馈

计划目标

  • 打开电脑,原理是通过WOL远程唤醒局域网内的电脑
  • 获取环境情况,比如当前的温湿度情况
  • 控制开发板,比如控制继电器开关等
  • 打开单元门门禁(私人用途)

项目文件说明

  • config.py:项目用到的一些配置参数(需要自行修改config.sample.py文件名)
  • boot.py:完成开发板上电联网操作
  • microWebSrv.py:提供Web Server服务的模块(已集成在 ESP32 自定义固件 中)
  • utils/wifihandler.py:Wifi 连接助手模块
  • utils/wol.py:局域网唤醒模块
  • utils/acs.py:门禁开启模块
  • utils/log.py:打印带当前时间的调试信息
  • aligenie/aligenie.py:Aligenie 类模块,用于解析平台请求数据
  • aligenie/*.txt:语音技能认证文件

平台配置说明

平台配置流程可以参考 天猫精灵语音技能 项目的说明,不再赘述,这里只说重点部分

  • 平台新建如下实体

  • 分别编辑刚刚新建的自定义实体并填写相应实体值,公共实体由公共实体库引入

    可以使用批量导入功能导入实体值,实体值文件位于/res/csv/文件夹内

    实体名称 实体值
    开关
    电脑种类
  • 再新建 4 个意图

  • 分别编辑 4 个新建的意图并填写相应的单轮对话

    可以使用批量导入功能导入单轮对话,单轮对话文件位于/res/csv/文件夹内

    意图名称 单轮例句 参数
    天气查询
    远程唤醒
  • 认证文件保存到/aligenie文件夹内,认证文件文件获取路径为:回复逻辑逻辑集合默认逻辑WEBHOOK详情

    默认逻辑WEBHOOK列出的是上边创建的意图意图标识,选择其中一个下载认证文件即可,无需下载多次

config.py 配置文件说明

  • 参数对应表

    config.py 平台 说明
    SKILL_NAME
    INTENT_* 对应意图标识
    ENTITY_* 对应实体标识名
  • 其它参数说明

    • WIFI_*开发板要连接的 Wifi
    • IS_MULTI_DEVICES:如果你的账号绑定了多个天猫精灵设备并且它们不在同一个物理位置(公司一个家里一个),为了避免误操作(在家里打开公司的电脑),参数值应设置为True
    • VALID_DEVICE_IDS:如果IS_MULTI_DEVICES设置为True,那么还需要填写合法的天猫精灵设备 ID
    • WOL_MAC_LISTS:需要被远程唤醒的电脑的 MAC 地址列表

路由器设置说明

如果不方便设置路由器,或者不想使用这个方法的话可以使用 MQTT 方式进行操作

由于每个路由器的管理页面不尽相同,所以这里只列出设置方法,请自行对照

路由器需要支持以下功能:

  • MAC 地址绑定
  • DDNS
  • 虚拟服务器(端口转发)
  • 在设置路由器之前,先填写config.pyWIFI_*的参数,然后上传相关文件到开发板并重新上电,使开发板连接到路由器

    开发板成功联网后板载蓝灯会常亮,120 秒后仍无法连接外网蓝灯会闪烁 10 次并重启开发板,重复联网动作

  • 从路由器设备管理页面找到开发板,绑定它的MAC 地址并设置固定 IP

  • 打开DDNS 管理页面,登录 DDNS 账号并记录域名

  • 打开虚拟服务器管理页面,新建一个虚拟服务器,任意选取一个可用的外部端口,内部端口为80,内部 IP 填写开发板固定 IP

这是最后的设置了

上边罗里吧嗦说了那些我也是很崩溃的。。。。但是这都是必要操作,没办法省掉的(衰)

  • 路由器正确设置完毕后给开发板重新上电,观察它获取到的 IP 地址是否为刚刚设置的固定 IP

  • 回到平台回复逻辑页面,在每个意图标识详情页里(下载认证文件的页面)填写URL地址:

     # ddns-domain:DDNS 域名
     # port:外部端口
     http://ddns-domain:port/skill

    如果想查看开发板运行状态,可以用浏览器访问 http://ddns-domain:port,如果网页正常打开说明开发板运行正常

  • 点击提交按钮,如果操作无误的话会提示保存成功

  • 对天猫精灵说:“天猫精灵,小助手”,观察REPL输出内容,[device]后边的内容即为天猫精灵设备 ID,将设备 ID斜杠之前的内容复制到config.pyVALID_DEVICE_IDS列表中 (实际应用中发现这个设备 ID后半段会改变,所以只能截取斜杠之前不变的部分),如:

     VALID_DEVICE_IDS = ['9N6LQX6msXOdq']

完整的REPL输出内容如下

>>> Connected
>>> ('192.168.0.240', '255.255.255.0', '192.168.0.1', '192.168.0.1')
>>> Web Server Started
>>> [2020-07-23 17:31:26] [device]: 9N6LQX6msXOdq/xxxxxxxxxx, [skill]: 小助手, [intent]: weather, [ut]: 小助手

如何使用语音技能

唤醒天猫精灵后可以这样说

# 天气相关的技能并没实现,只是作为测试语料之用
小助手
小助手今天天气
小助手北京天气
小助手查询上海明天天气

# 要唤醒局域网内的电脑,需要在 config.py 文件中的 WOL_MAC_LISTS 列表中设置电脑网卡 MAC 地址
# MAC 地址为 12~17 位字符串,分隔符可以使用任意英文字符
小助手打开我的电脑
小助手服务器开机
小助手开启台式机

合作及交流

走线物联扇贝物联

Python
1
https://gitee.com/walkline/MicroPython-with-Aligenie-Voice-Skill.git
git@gitee.com:walkline/MicroPython-with-Aligenie-Voice-Skill.git
walkline
MicroPython-with-Aligenie-Voice-Skill
MicroPython with Aligenie Voice Skill
master

搜索帮助

53164aa7 5694891 3bd8fe86 5694891