手把手从0到1教你做STM32+FreeRTOS智能家居--第10篇之ASR-PRO语音识别模块

本文主要是介绍手把手从0到1教你做STM32+FreeRTOS智能家居--第10篇之ASR-PRO语音识别模块,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

前言

先看实验效果,通过ASR-PRO语音智能识别控制模块,来控制STM32单片机实现对应的控制功能。因为后台好多小伙伴私信问用的是什么语音模块,并且很少在网上看到如何使用此模块相关的文章,所以我将会在本篇文章详细介绍一下此模块相关的信息和具体的操作流程和应用代码。

stm32语言识别


一、硬件设计

本篇文章用到的语音识别模块是信泰微电子的ASR-PRO语音智能识别模块,有需要的小伙伴可以直接在某宝直接搜索店铺就可以看到,本项目用到的是店铺中的ASRPRO开发板+喇叭的套餐,大家可以根据自己的需求去选配即可。ASR-PRO语音智能语音识别控制模块 AI离线识别开发板 自定义词条-淘宝网 (taobao.com)

 

模块简介

1)内置脑神经网络处理器。
2)支持 DNN\TDNN\RNN 等神经网络及卷积运算硬件运算,非软件运算。
3)支持语音识别、声纹识别、语音增强、语音检测、单麦克风降噪增强、单麦克风回声消除、360度全方位拾音等功能。

此开发板自带3路UART、6路PWM、10个IO口,支持连接众多外设,可以连接蓝牙模块、温湿度传感器、WIFI模块、电机、继电器等等模块。

语音模块可以通过配套的软件来进行编程,烧录程序只需要一条Type-C数据线,支持入门模式、标准模式和专业模式三种编程方式来进行编程,简单的应用使用入门和标准模式就足够了,只需要动动手指、打打字就能配置完成我们所需要的语音控制方式,使用起来还是比较方便的。如果涉及到比较复杂的使用的话,此软件还支持C++开发。

功能其实是十分强大的,但是由于我们的重点放在了学习STM32上面,所以本项目只是把它当成一个语音识别模块来使用。

 

连接方式

本项目通过stm32单片机的串口4与ASRPRO语音识别模块进行通讯,对应的引脚是串口4接收引脚(PC11) 和 串口4发送引脚(PC10),语音模块通过5V进行供电。


二、软件设计 

ASR-PRO语音模块使用方法

ASR-PRO语音模块的购买链接中,有对应的百度网盘资料,下载后会看到里面会有一个名为天问Block的exe文件,点击安装下载到自定义文件目录下即可。

打开后是这个界面,选择对应的主板,我们用到的是ASRPRO开发板,所以选择ASRPRO。

以下为本项目用到的语音模块控制模版,我将根据此模版来进行介绍(我会将模版放在百度网盘链接中)。

1)点击进入专业模式,然后在左边的栏中入门模式中拉出上电初始状态的模版进行修改。

2)语音播报人:用于修改不同的播报音色(清新女生、浑厚男声等等),音量和语速也可以根据需求进行修改。

3)上电播报语音和退出播报语音同样可以自定义,唤醒退出时间是指当我们没有进行语音控制,语音模块进入睡眠的时间。

4)STM32单片机的串口4连接到ASRPRO开发板的PA5和PA6引脚对应到串口2,波特率配置为9600,此处根据硬件的引脚连接进行配置即可。

5) 修改为以下配置即可。

 

6)以下的命令词同样在入门模式中可以看到,语音唤醒框填的内容:当我们对语音模块进行语音控制时,语音模块识别到对应的输入后,就会通过对应的串口发送16进制数据给STM32单片机,然后我们只需要在STM32串口接收到数据后,对数据进行处理即可。

操作也十分的简单,只需要通过拖拉命令词简单的叠加即可。

7)烧录程序:通过Type-C数据线将电脑和ASR-PRO开发板进行连接,然后选择对应的COM口,注意先生成模型后,再点击2M编译下载将Bin文件烧录到开发板中即可。


CubeMX串口配置

在cubemx中对串口进行配置,将串口4配置为异步收发模式、波特率为9600,然后点击GENERATE CODE生成代码即可。

/*** @brief UART4 Initialization Function* @param None* @retval None*/
static void MX_UART4_Init(void)
{huart4.Instance = UART4;huart4.Init.BaudRate = 9600;huart4.Init.WordLength = UART_WORDLENGTH_8B;huart4.Init.StopBits = UART_STOPBITS_1;huart4.Init.Parity = UART_PARITY_NONE;huart4.Init.Mode = UART_MODE_TX_RX;huart4.Init.HwFlowCtl = UART_HWCONTROL_NONE;huart4.Init.OverSampling = UART_OVERSAMPLING_16;if (HAL_UART_Init(&huart4) != HAL_OK){Error_Handler();}
}

STM32语音控制代码

voice.c中要注意的函数是:

void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart) 函数,这是串口接收中断的回调函数,我们可以在用户文件中对它重新进行实现,此处我们定义了一个八位的无符号整形变量Voice_Data,来接收语音模块识别后,模块通过串口回传给单片机的对应数据。

void setup_uart_interrupt() 调用中断接收函数,开启串口中断。

voice_check()函数用于处理语音识别后,模块通过串口回传给单片机的对应数据,然后对单片机进行相应的操作,实现对应的语音控制。语音识别后返回的数据可以通过模块自带的软件来进行自定义。

#include "voice.h"extern UART_HandleTypeDef huart4;uint8_t Voice_Data;void Voice_Send(char *str)
{unsigned int k=0;while(*(str + k) != '\0'){HAL_UART_Transmit(&huart4, (uint8_t *)(str + k), 1, 10);k++;		}
}void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)
{if (huart->Instance == UART4) // 确保是期望的UART实例{HAL_UART_Receive_IT(huart, &Voice_Data, 1);printf("Voice: %d\r\n", Voice_Data);}
}void Voice_Check()
{switch (Voice_Data){case 0x01 :/* 开灯 */Voice_Data = 0;Open_LED();break;case 0x02 :/* 关灯 */Voice_Data = 0;Close_LED();		break;case 0x03 :/* 开蜂鸣器 */Voice_Data = 0;BEEP_OUT;break;case 0x04 :/* 关蜂鸣器 */Voice_Data = 0;BEEP_STOP;break;case 0x05:/* 开门 */Voice_Data = 0;Open_Door();break;	case 0x06 :/* 关门 */Voice_Data = 0;Close_Door();break;		default : Voice_Data = 0; break;}
}void setup_uart_interrupt()
{HAL_UART_Receive_IT(&huart4, &Voice_Data, 1);
}

voice.h文件中对函数进行声明,方便供其他文件进行调用。 

#ifndef _VOICE_H_
#define _VOICE_H_#include "main.h"void Voice_Check();
void Voice_Send(char *str);
void setup_uart_interrupt();
#endif

在main函数中对我们的代码进行验证,即可得到前言中的实验效果。

int main(void)
{setup_uart_interrupt()  while (1){    Voice_Check();HAL_Delay(1000);}
}

这篇关于手把手从0到1教你做STM32+FreeRTOS智能家居--第10篇之ASR-PRO语音识别模块的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1006462

相关文章

Python sys模块的使用及说明

《Pythonsys模块的使用及说明》Pythonsys模块是核心工具,用于解释器交互与运行时控制,涵盖命令行参数处理、路径修改、强制退出、I/O重定向、系统信息获取等功能,适用于脚本开发与调试,需... 目录python sys 模块详解常用功能与代码示例获取命令行参数修改模块搜索路径强制退出程序标准输入

Python pickle模块的使用指南

《Pythonpickle模块的使用指南》Pythonpickle模块用于对象序列化与反序列化,支持dump/load方法及自定义类,需注意安全风险,建议在受控环境中使用,适用于模型持久化、缓存及跨... 目录python pickle 模块详解基本序列化与反序列化直接序列化为字节流自定义对象的序列化安全注

JS纯前端实现浏览器语音播报、朗读功能的完整代码

《JS纯前端实现浏览器语音播报、朗读功能的完整代码》在现代互联网的发展中,语音技术正逐渐成为改变用户体验的重要一环,下面:本文主要介绍JS纯前端实现浏览器语音播报、朗读功能的相关资料,文中通过代码... 目录一、朗读单条文本:① 语音自选参数,按钮控制语音:② 效果图:二、朗读多条文本:① 语音有默认值:②

python pymodbus模块的具体使用

《pythonpymodbus模块的具体使用》pymodbus是一个Python实现的Modbus协议库,支持TCP和RTU通信模式,支持读写线圈、离散输入、保持寄存器等数据类型,具有一定的参考价值... 目录一、详解1、 基础概念2、核心功能3、安装与设置4、使用示例5、 高级特性6、注意事项二、代码示例

如何正确识别一台POE交换机的好坏? 选购可靠的POE交换机注意事项

《如何正确识别一台POE交换机的好坏?选购可靠的POE交换机注意事项》POE技术已经历多年发展,广泛应用于安防监控和无线覆盖等领域,需求量大,但质量参差不齐,市场上POE交换机的品牌繁多,如何正确识... 目录生产标识1. 必须包含的信息2. 劣质设备的常见问题供电标准1. 正规的 POE 标准2. 劣质设

Python中logging模块用法示例总结

《Python中logging模块用法示例总结》在Python中logging模块是一个强大的日志记录工具,它允许用户将程序运行期间产生的日志信息输出到控制台或者写入到文件中,:本文主要介绍Pyt... 目录前言一. 基本使用1. 五种日志等级2.  设置报告等级3. 自定义格式4. C语言风格的格式化方法

Python 基于http.server模块实现简单http服务的代码举例

《Python基于http.server模块实现简单http服务的代码举例》Pythonhttp.server模块通过继承BaseHTTPRequestHandler处理HTTP请求,使用Threa... 目录测试环境代码实现相关介绍模块简介类及相关函数简介参考链接测试环境win11专业版python

Nginx添加内置模块过程

《Nginx添加内置模块过程》文章指导如何检查并添加Nginx的with-http_gzip_static模块:确认该模块未默认安装后,需下载同版本源码重新编译,备份替换原有二进制文件,最后重启服务验... 目录1、查看Nginx已编辑的模块2、Nginx官网查看内置模块3、停止Nginx服务4、Nginx

python urllib模块使用操作方法

《pythonurllib模块使用操作方法》Python提供了多个库用于处理URL,常用的有urllib、requests和urlparse(Python3中为urllib.parse),下面是这些... 目录URL 处理库urllib 模块requests 库urlparse 和 urljoin编码和解码

创建springBoot模块没有目录结构的解决方案

《创建springBoot模块没有目录结构的解决方案》2023版IntelliJIDEA创建模块时可能出现目录结构识别错误,导致文件显示异常,解决方法为选择模块后点击确认,重新校准项目结构设置,确保源... 目录创建spChina编程ringBoot模块没有目录结构解决方案总结创建springBoot模块没有目录