文章目录
-
- 语音识别模块是在一种基于嵌入式的语音识别技术的模块,主要包括语音识别芯片和一些其他的附属电路,能够方便的与主控芯片进行通讯,开发者可以方便的将该模块嵌入到自己的产品中使用,实现语音交互的目的。 模块实物图如下:
- 这款模块常用的IO口有7个分别为: PA25、PA26、PA27、PB2、PB3、PB6、PB7 模块出厂内置的固件命令词如下: -----这些都可以进行自己定制的。 (1) 唤醒词:你好,小智(2) 命令词及其控制引脚(3.3V)(高低电平输出)打开空调:PA25 输出高电平关闭空调: PA25 输出低电平打开插座: PA26 输出高电平关闭插座: PA26 输出低电平打开开关:PA27 输出高电平关闭开关:PA27 输出低电平(PWM输出)打开风扇:PB2高电平有效起始档位50%关闭风扇:PB2输出低电平﹐档位0%调高一档:PB2档位增加30%调低一档:PB2档位减小30%(PWM输出)打开灯光:PB3高电平有效亮度档位50%关闭灯光:PB3输出低电平,亮度0%调亮一点:PB2亮度增加30%调暗一点:PB3亮度减小30%
- 为方便扩展更加灵活的语音控制,可以把B2(UART1_TX)和B3(UART1_RX)做为与其他MCU的通信的接口。 (0) 语音控制模块与STM32单片机接线的方式GND--------GND 地VCC--------VCC 电源(3.3V)STM32的PA10(RX)---语音模块SU-03T的PB2(UART1_TX) STM32的代码里接收语音模块串口返回的响应指令进行对应的处理: OneNet云端控制界面:
- //实时接收语音模块返回的数据 if(USART1_RX_FLAG) { printf("语音模块响应:%d\r\n",USART1_RX_CNT); //向串口打印服务器返回的数据 for(i=0;i<USART1_RX_CNT;i++) { printf("%#X ",USART1_RX_BUFFER[i]); } printf("\r\n"); //手动模式 if(mode==0) { //说明: 这里的cmd_x_on 和 cmd_x_off 与语音模块匹配的。 //具体可以根据自己情况修改命令词语 //正常情况下,语音模块返回的十六进制 //空调开 if(USART1_RX_BUFFER[0]==0xA0) { printf("语音-空调已打开.\r\n"); ON_AirConditioner(); sw3=1; } //空调关 else if(USART1_RX_BUFFER[0]==0xA1) { printf("语音-空调已关闭.\r\n"); OFF_AirConditioner(); sw3=0; } //卧室灯开 if(USART1_RX_BUFFER[0]==0xB0) { printf("语音-卧室灯已打开.\r\n"); sw1=1; } //卧室灯关 else if(USART1_RX_BUFFER[0]==0xB1) { printf("语音-卧室灯已关闭.\r\n"); sw1=0; } //客厅灯开 if(USART1_RX_BUFFER[0]==0xC0) { printf("语音-客厅灯已打开.\r\n"); sw2=1; } //客厅灯关 else if(USART1_RX_BUFFER[0]==0xC1) { printf("语音-客厅灯已关闭.\r\n"); sw2=0; } //如需要其他指令,接着增加即可 } memset(USART1_RX_BUFFER,0,sizeof(USART1_RX_BUFFER)); USART1_RX_CNT=0; USART1_RX_FLAG=0; } STM32串口收到语音模块的指令如下:
- 网站: http://www.smartpi.cn/#/。
- 这些引脚可以配置为普通的输出引脚,直接连接外部电路,或者单片机的输入引脚配合完成一些逻辑控制。 SU-03T语音模块引出的GPIO口数量有限,为了扩展更加灵活的控制方式,可以配置串口引脚,通过串口与单片机进行通信,完成更灵活更多的语音控制。
- 唤醒词自定义规则~只支持中文,3-6个字,4个字为最佳;~避免使用敏感词:包含政治,伟人名字、脏话,黄赌毒等;~避免使用口语化的词汇,口语词汇日常使用频率很高,容易导致误唤醒,如“你好啊”;~唤醒词发音应选择易开口,响度大,发音清晰易分辨的词;~避免使用多音字,唤醒词的音节覆盖应尽量多,差异大;~避免使用叠字,避免连续使用零声母的词,如“安”;~如因使用市面上已存在的唤醒词而产生纠纷,由开发者自行承担,请慎重选择。~唤醒词加上免唤醒的命令词,总数不能超过10条。
- 命令词和回复语自定义规则~命令词是想要定义的语音话术,用户必须按照定义的话术说出才有效。如用户可以使用“设置十五度”“十五度”来实现同一个设置温度15度的控制。~一个行为的命令词允许填多条,多条命令词之间用“|”隔开。当设置多条命令词时,说每个命令词都能触发该行为。~回复语是针对该条控制指令的设备回复播报。~单条回复语不得超过500个字符,支持中英文、逗号、句号、问号,不要使用阿拉伯数字,可以用中文数字来代替。~回复语中支持标签<py></py>,来指定某些多音字播报时的读音。~例:已调<py>tiao2</py>至中<py>zhong1</py>风档,~注:拼音声调范围为 1 - 5,1 - 4 对应一声到四声,5对应轻声。~播报为:已调(tiao2)至中(zhong1)风档。~一个行为的回复语允许填多条,多条回复语之间用“|”隔开。当设置多条回复语时,行为被触发后,系统会随机选择一条回复语进行播报。 下面是我定制的几个命令词。 模块识别到命令词之后可以做出一些响应,点击后面的 >> 图标进行设置。 点击 《添加控制》按钮,配置响应的方式。 设置 控制类型为串口输出,输出的参数我填的A0,主要是为了方便区分而已。这里可以自己定义的。 也就是当语音模块识别到 《打开空调》 指令之后,会通过串口1发送一个串指令出去,单片机收到这条指令就可以进行判断,完成对应的逻辑控制。 发出的指令是这样的: (十六进制的指令)。 A0 下面的其他命令依次配置即可。
- 非重点,根据自己习惯爱好配置即可。
- 非重点,根据自己习惯爱好配置即可。
- 生成需要等待一段时间,生成成功会有手机短信提醒的,生成之后就可以下载了。
- SDK生成之后,点击后面 《编译固件》按钮,添加固件进行编译。 编译成功后,点击下载固件。
- SDK包里包含了烧录工具套装。
- 下载的SDK解压后的文件夹为 uni_hb_m_solution。 注意: 解压的目录不能出现中文。 解压后打开烧录工具:UniOneUpdateTool.exe 准备一个USB-TTL模块,将模块与电脑的USB口连接,准备烧录程序。 连线如下: VCC--->5VGND--->USB转TTL的模块B6(UART1_RX)--->USB-TTL模块的TXDB7(UART1_TX)--->USB-TTL模块的RXD 待升级的固件选择:uni_app_release_update.bin。 SDK包里也带了PDF说明文档,详情看文档即可。 想了解更多关于开源的内容,请访问: 51CTO 开源基础软件社区 https://ost.51cto.com。

语音识别模块是在一种基于嵌入式的语音识别技术的模块,主要包括语音识别芯片和一些其他的附属电路,能够方便的与主控芯片进行通讯,开发者可以方便的将该模块嵌入到自己的产品中使用,实现语音交互的目的。
模块实物图如下:


这款模块常用的IO口有7个分别为: PA25、PA26、PA27、PB2、PB3、PB6、PB7
模块出厂内置的固件命令词如下: -----这些都可以进行自己定制的。
(1) 唤醒词:你好,小智
(2) 命令词及其控制引脚(3.3V)
(高低电平输出)
打开空调:PA25 输出高电平
关闭空调: PA25 输出低电平
打开插座: PA26 输出高电平
关闭插座: PA26 输出低电平
打开开关:PA27 输出高电平
关闭开关:PA27 输出低电平
(PWM输出)
打开风扇:PB2高电平有效起始档位50%
关闭风扇:PB2输出低电平﹐档位0%
调高一档:PB2档位增加30%
调低一档:PB2档位减小30%
(PWM输出)
打开灯光:PB3高电平有效亮度档位50%
关闭灯光:PB3输出低电平,亮度0%
调亮一点:PB2亮度增加30%
调暗一点:PB3亮度减小30%
为方便扩展更加灵活的语音控制,可以把B2(UART1_TX)和B3(UART1_RX)做为与其他MCU的通信的接口。
(0) 语音控制模块与STM32单片机接线的方式
GND--------GND 地
VCC--------VCC 电源(3.3V)
STM32的PA10(RX)---语音模块SU-03T的PB2(UART1_TX)
STM32的代码里接收语音模块串口返回的响应指令进行对应的处理:

OneNet云端控制界面:

//实时接收语音模块返回的数据
if(USART1_RX_FLAG)
{
printf("语音模块响应:%d\r\n",USART1_RX_CNT);
//向串口打印服务器返回的数据
for(i=0;i<USART1_RX_CNT;i++)
{
printf("%#X ",USART1_RX_BUFFER[i]);
}
printf("\r\n");
//手动模式
if(mode==0)
{
//说明: 这里的cmd_x_on 和 cmd_x_off 与语音模块匹配的。
//具体可以根据自己情况修改命令词语
//正常情况下,语音模块返回的十六进制
//空调开
if(USART1_RX_BUFFER[0]==0xA0)
{
printf("语音-空调已打开.\r\n");
ON_AirConditioner();
sw3=1;
}
//空调关
else if(USART1_RX_BUFFER[0]==0xA1)
{
printf("语音-空调已关闭.\r\n");
OFF_AirConditioner();
sw3=0;
}
//卧室灯开
if(USART1_RX_BUFFER[0]==0xB0)
{
printf("语音-卧室灯已打开.\r\n");
sw1=1;
}
//卧室灯关
else if(USART1_RX_BUFFER[0]==0xB1)
{
printf("语音-卧室灯已关闭.\r\n");
sw1=0;
}
//客厅灯开
if(USART1_RX_BUFFER[0]==0xC0)
{
printf("语音-客厅灯已打开.\r\n");
sw2=1;
}
//客厅灯关
else if(USART1_RX_BUFFER[0]==0xC1)
{
printf("语音-客厅灯已关闭.\r\n");
sw2=0;
}
//如需要其他指令,接着增加即可
}
memset(USART1_RX_BUFFER,0,sizeof(USART1_RX_BUFFER));
USART1_RX_CNT=0;
USART1_RX_FLAG=0;
}
if(USART1_RX_FLAG)
{
printf("语音模块响应:%d\r\n",USART1_RX_CNT);
//向串口打印服务器返回的数据
for(i=0;i<USART1_RX_CNT;i++)
{
printf("%#X ",USART1_RX_BUFFER[i]);
}
printf("\r\n");
//手动模式
if(mode==0)
{
//说明: 这里的cmd_x_on 和 cmd_x_off 与语音模块匹配的。
//具体可以根据自己情况修改命令词语
//正常情况下,语音模块返回的十六进制
//空调开
if(USART1_RX_BUFFER[0]==0xA0)
{
printf("语音-空调已打开.\r\n");
ON_AirConditioner();
sw3=1;
}
//空调关
else if(USART1_RX_BUFFER[0]==0xA1)
{
printf("语音-空调已关闭.\r\n");
OFF_AirConditioner();
sw3=0;
}
//卧室灯开
if(USART1_RX_BUFFER[0]==0xB0)
{
printf("语音-卧室灯已打开.\r\n");
sw1=1;
}
//卧室灯关
else if(USART1_RX_BUFFER[0]==0xB1)
{
printf("语音-卧室灯已关闭.\r\n");
sw1=0;
}
//客厅灯开
if(USART1_RX_BUFFER[0]==0xC0)
{
printf("语音-客厅灯已打开.\r\n");
sw2=1;
}
//客厅灯关
else if(USART1_RX_BUFFER[0]==0xC1)
{
printf("语音-客厅灯已关闭.\r\n");
sw2=0;
}
//如需要其他指令,接着增加即可
}
memset(USART1_RX_BUFFER,0,sizeof(USART1_RX_BUFFER));
USART1_RX_CNT=0;
USART1_RX_FLAG=0;
}
STM32串口收到语音模块的指令如下:

网站: http://www.smartpi.cn/#/。





这些引脚可以配置为普通的输出引脚,直接连接外部电路,或者单片机的输入引脚配合完成一些逻辑控制。

SU-03T语音模块引出的GPIO口数量有限,为了扩展更加灵活的控制方式,可以配置串口引脚,通过串口与单片机进行通信,完成更灵活更多的语音控制。

唤醒词自定义规则
~只支持中文,3-6个字,4个字为最佳;
~避免使用敏感词:包含政治,伟人名字、脏话,黄赌毒等;
~避免使用口语化的词汇,口语词汇日常使用频率很高,容易导致误唤醒,如“你好啊”;
~唤醒词发音应选择易开口,响度大,发音清晰易分辨的词;
~避免使用多音字,唤醒词的音节覆盖应尽量多,差异大;
~避免使用叠字,避免连续使用零声母的词,如“安”;
~如因使用市面上已存在的唤醒词而产生纠纷,由开发者自行承担,请慎重选择。
~唤醒词加上免唤醒的命令词,总数不能超过10条。
~只支持中文,3-6个字,4个字为最佳;
~避免使用敏感词:包含政治,伟人名字、脏话,黄赌毒等;
~避免使用口语化的词汇,口语词汇日常使用频率很高,容易导致误唤醒,如“你好啊”;
~唤醒词发音应选择易开口,响度大,发音清晰易分辨的词;
~避免使用多音字,唤醒词的音节覆盖应尽量多,差异大;
~避免使用叠字,避免连续使用零声母的词,如“安”;
~如因使用市面上已存在的唤醒词而产生纠纷,由开发者自行承担,请慎重选择。
~唤醒词加上免唤醒的命令词,总数不能超过10条。

命令词和回复语自定义规则
~命令词是想要定义的语音话术,用户必须按照定义的话术说出才有效。如用户可以使用“设置十五度”“十五度”来实现同一个设置温度15度的控制。
~一个行为的命令词允许填多条,多条命令词之间用“|”隔开。当设置多条命令词时,说每个命令词都能触发该行为。
~回复语是针对该条控制指令的设备回复播报。
~单条回复语不得超过500个字符,支持中英文、逗号、句号、问号,不要使用阿拉伯数字,可以用中文数字来代替。
~回复语中支持标签<py></py>,来指定某些多音字播报时的读音。
~例:已调<py>tiao2</py>至中<py>zhong1</py>风档,
~注:拼音声调范围为 1 - 5,1 - 4 对应一声到四声,5对应轻声。
~播报为:已调(tiao2)至中(zhong1)风档。
~一个行为的回复语允许填多条,多条回复语之间用“|”隔开。当设置多条回复语时,行为被触发后,系统会随机选择一条回复语进行播报。
~命令词是想要定义的语音话术,用户必须按照定义的话术说出才有效。如用户可以使用“设置十五度”“十五度”来实现同一个设置温度15度的控制。
~一个行为的命令词允许填多条,多条命令词之间用“|”隔开。当设置多条命令词时,说每个命令词都能触发该行为。
~回复语是针对该条控制指令的设备回复播报。
~单条回复语不得超过500个字符,支持中英文、逗号、句号、问号,不要使用阿拉伯数字,可以用中文数字来代替。
~回复语中支持标签<py></py>,来指定某些多音字播报时的读音。
~例:已调<py>tiao2</py>至中<py>zhong1</py>风档,
~注:拼音声调范围为 1 - 5,1 - 4 对应一声到四声,5对应轻声。
~播报为:已调(tiao2)至中(zhong1)风档。
~一个行为的回复语允许填多条,多条回复语之间用“|”隔开。当设置多条回复语时,行为被触发后,系统会随机选择一条回复语进行播报。
下面是我定制的几个命令词。

模块识别到命令词之后可以做出一些响应,点击后面的 >> 图标进行设置。

点击 《添加控制》按钮,配置响应的方式。

设置 控制类型为串口输出,输出的参数我填的A0,主要是为了方便区分而已。这里可以自己定义的。
也就是当语音模块识别到 《打开空调》 指令之后,会通过串口1发送一个串指令出去,单片机收到这条指令就可以进行判断,完成对应的逻辑控制。
发出的指令是这样的: (十六进制的指令)。
A0

下面的其他命令依次配置即可。

非重点,根据自己习惯爱好配置即可。

非重点,根据自己习惯爱好配置即可。




生成需要等待一段时间,生成成功会有手机短信提醒的,生成之后就可以下载了。


SDK生成之后,点击后面 《编译固件》按钮,添加固件进行编译。



编译成功后,点击下载固件。


SDK包里包含了烧录工具套装。

下载的SDK解压后的文件夹为 uni_hb_m_solution。
注意: 解压的目录不能出现中文。
解压后打开烧录工具:UniOneUpdateTool.exe

准备一个USB-TTL模块,将模块与电脑的USB口连接,准备烧录程序。
连线如下:
VCC--->5V
GND--->USB转TTL的模块
B6(UART1_RX)--->USB-TTL模块的TXD
B7(UART1_TX)--->USB-TTL模块的RXD
待升级的固件选择:uni_app_release_update.bin。

SDK包里也带了PDF说明文档,详情看文档即可。