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

 找回密码
 立即注册
查看: 14096|回复: 95

[智能音箱] 低成本DIY离线语音助手完结【已上传展示视频】

  [复制链接]

46

主题

641

帖子

4394

积分

元老级技术达人

积分
4394
金钱
3723
HASS币
120
发表于 2021-12-15 10:47:25 | 显示全部楼层 |阅读模式
本帖最后由 evantalk 于 2021-12-21 00:23 编辑

先说一下思路:自定义语音命令形成固件——模块烧录固件——执行离线语音命令的同时产生串口信息输出——esphome读取串口信息——在ha中生成Sensor——ha自动化根据sensor值的不同的执行相关操作。
================================================================================
首先是语音模块选择,需要支持自定义语音指令,否则就不能玩下去了,我选择的是下面这款,某宝搜su-03t,模块10块钱一个。

模块.JPG
然后是喇叭和录音咪头,喇叭可以用旧笔记本的拆机件,麦克风谁便找个咪头接上就能用,非常完美。
喇叭咪头.JPG

自定义语音指令需要登录平台注册账号 http://www.smartpi.cn
smartpi.JPG


通过“创建产品”菜单,按照向导填写“产品信息”,产品类别无所谓,场景一定要选择“纯离线方案”
创建产品.JPG

“保存”以后,进入“语音SDK”配置界面,具体配置如下:
        (1)“前端信号处理”不用改动
        (2)"Pin 脚配置" 修改第8行GPIO_B7为“UART1_TX”
pin.JPG
        (3)唤醒词自定义"可以不动,按需修改
        (4)“离线命令词与应答语自定义”,这个是重点,需要多少命令就添加多少个,比如我添加了一个MusicOn,命令词是自己说的“语音指令”,回复语是机器执行命令后答复的话。

基础信息.jpg
           “基本信息”添加完成后,点开“控制详情”,为新命令添加控制方式
控制详情.JPG

具体参数填写如下图,“参数”这里填写的16进制的数字,用于串口输出,后面可以根据输出来识别这个MuiscOn命令。
我的做法是直接将“MusicOn”转化成16进制数字(字母需要大写)(转化可以用在线工具:https://tool.lu/hexstr/),最后在末尾添上“0A”表示结束。

其余的部分每个命令都按照我的选择即可。

         
musicon.JPG



下面再说一下免唤醒词,就是不需要唤醒,直接说出语音指令,模块就会执行,可以从已经配置的命令中跳选,最多10个
免唤醒.JPG

这几步搞作搞完后,拉到屏幕最下面,点击“生成新版本”,会出现下面这个页面

生成SDK.JPG


点击“生成SDK”,系统会后台生成SDK,需要一定的等待事件,不过生成好了会有等消息提醒。
等待生成.JPG

SDK生成后,下载到本地,目录结构是这样的,里面包含了bin固件和相关刷机工具,已经非常nice了
sdk目录.JPG



评分

参与人数 3金钱 +16 收起 理由
dongjianwei + 1 高手,这是高手!
qqxioud + 5 膜拜大神!
diba.qiu + 10 感谢楼主分享!

查看全部评分

回复

使用道具 举报

46

主题

641

帖子

4394

积分

元老级技术达人

积分
4394
金钱
3723
HASS币
120
 楼主| 发表于 2021-12-15 10:47:59 | 显示全部楼层
本帖最后由 evantalk 于 2021-12-15 19:52 编辑

接着一楼更新第二部分,给模块刷固件,需要一个usb-ttl串口烧录工具,这个玩esphome的应该都有吧 usb-ttl.JPG

由于这个模块比较小,用鳄鱼夹不好操作,需要给模块焊接几个排针,便于烧录和接线

模块引脚.JPG

进入下面的目录,打开刷机工具
刷机工具.JPG

刷机工具2.JPG
按照下面的顺序,把模块和串口工具连接起来,串口工具插入电脑
B7引脚 接 串口工具RXD
B6 引脚 接 串口工具 TXD
GND 接 串口工具 GND

正常的话,工具中会显示com接口,我这里是com3
刷机工具3.JPG

什么都不用改,直接点“烧录“,进入等待设备的状态
刷机工具4.JPG


这时候,用另外的杜邦线给模块的Vcc和GND脚上接上5V电源(不能从串口模块取电,切记!!!
刷机工具5.JPG

通电后,会自动刷入程序,百分比进度开始刷新
刷机工具6.JPG

看到变成绿色,说明已经成功
刷机工具7.JPG


刷机注意要点:
1.检查电源是否是单独5V供电
2.B6,B7,GND接线是否正确
3.要点击烧录后,然后再给模块供电
4.以上三点都不行,需要检查一下杜邦线,串口工具,电脑

恭喜你,从此你就有一个属于自己的离线语音助手了。
回复

使用道具 举报

46

主题

641

帖子

4394

积分

元老级技术达人

积分
4394
金钱
3723
HASS币
120
 楼主| 发表于 2021-12-15 10:49:06 | 显示全部楼层

esphome桥接

本帖最后由 evantalk 于 2021-12-20 17:30 编辑

前面固件成功刷入后,接上麦克风和咪头,同上5v电源,模块就可以使用了 组装.JPG

这个时候,如果你把模块的B7和GND接入usb-ttl工具,电脑上打开串口调试软件(波特率9600),对着模块说语音命令,串口可以收到前面配置的16进制字符串
musicon.JPG

接下去我们要做的是利用esphome读取模块的串口输出,重新解析成字符串,然后再集成到HA,就像下面这样
sensor.JPG
这样做有个很大的好处,只要根据字符串变化就能识别动作,再多的命令也不怕。

当然,这个工作用8266刷tasmota也可以完成,只是我喜欢esphome

那么问题就变成esphome如何解析串口数据的问题了,官网有例子


https://esphome.io/cookbook/uart_text_sensor.html?highlight=uart

因为我们的串口数据末尾都添加了0a('\n'),所以非常容易识别,我把例子改进了一下

这是头文件su03t_uart_read.h,放在yaml文件同目录下,作用很简单,串口有信息输出时,读取到('\n')为止。

#include "esphome.h"

class UartReadLineSensor : public Component, public UARTDevice, public TextSensor {
    public: UartReadLineSensor(UARTComponent *parent) : UARTDevice(parent) {}

    void setup() override {
    // nothing to do here
    }


    void loop() override {
        if (available() > 0){
            String line = readStringUntil('\n');
            publish_state(line.c_str());           
        }
        delay(100); 
    }
};

下面时yaml文件中的配置
esphome:
  includes:
    - su03t_uart_read.h

此处省略很多必要的通用配置,详见esphome教程

uart:
  - id: uart_bus_cmd
    rx_pin: GPIO16  #根据实际接线修改gpio
    baud_rate: 9600
   
text_sensor:
  - platform: custom
    lambda: |-
      auto my_custom_sensor = new UartReadLineSensor(id(uart_bus_cmd));
      App.register_component(my_custom_sensor);
      return {my_custom_sensor};
    text_sensors:
      name: "su03t_cmd"

好了,拿出esp8266刷入esphome,试一下吧
回复

使用道具 举报

46

主题

641

帖子

4394

积分

元老级技术达人

积分
4394
金钱
3723
HASS币
120
 楼主| 发表于 2021-12-15 10:50:17 | 显示全部楼层
本帖最后由 evantalk 于 2021-12-21 00:23 编辑

如果ESPhome启用了web功能,浏览器中输入ip地址,应该能打开看到su03t_cmd esphome1.JPG
我这个esp32接的东西比较多,请大家忽略上面的,看最后一项,说出不同的命令,这一项会随之改变
可以利用这个原理接入ha进行控制,ESPHOME接入HA很简单,因为“集成”中原生支持的
esphome.JPG

sensor.JPG

然后既可以愉快的写自动化了,方便起见,我时再node-red中写的
用了一个event:state节点获取sensor的文本变化,然后用switch节点做分支控制
nd2.JPG

用起来非常畅快,尤其是自定义的唤醒命令,明天上传一个演示视频



回复

使用道具 举报

2

主题

37

帖子

284

积分

论坛分享达人

积分
284
金钱
247
HASS币
0
发表于 2021-12-15 11:29:19 | 显示全部楼层
不知道是不是我的问题 好像图挂了
回复

使用道具 举报

14

主题

242

帖子

2017

积分

金牌会员

Rank: 6Rank: 6

积分
2017
金钱
1775
HASS币
0
发表于 2021-12-15 11:32:45 | 显示全部楼层
Midm1aK 发表于 2021-12-15 11:29
不知道是不是我的问题 好像图挂了

多刷新几次就都有了
回复

使用道具 举报

9

主题

174

帖子

1485

积分

金牌会员

Rank: 6Rank: 6

积分
1485
金钱
1311
HASS币
0
发表于 2021-12-15 11:38:25 | 显示全部楼层
图片有点卡住
回复

使用道具 举报

6

主题

95

帖子

1199

积分

金牌会员

Rank: 6Rank: 6

积分
1199
金钱
1104
HASS币
0
发表于 2021-12-15 14:00:03 | 显示全部楼层
牛人啊,厉害。佩服!
回复

使用道具 举报

32

主题

1993

帖子

5069

积分

论坛元老

Rank: 8Rank: 8

积分
5069
金钱
3076
HASS币
50
QQ
发表于 2021-12-15 15:59:56 | 显示全部楼层
大佬牛叉。
我不生产技术,我只是技术的搬运工。
回复

使用道具 举报

26

主题

169

帖子

652

积分

高级会员

Rank: 4

积分
652
金钱
483
HASS币
0
发表于 2021-12-15 19:50:29 来自手机 | 显示全部楼层
请问你买这块语音模块10块钱包邮吗?什么时候买的
回复

使用道具 举报

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

本版积分规则

Archiver|手机版|小黑屋|Hassbian

GMT+8, 2024-4-27 09:51 , Processed in 2.511828 second(s), 35 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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