手把手从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 logging模块使用示例详解

《Pythonlogging模块使用示例详解》Python的logging模块是一个灵活且强大的日志记录工具,广泛应用于应用程序的调试、运行监控和问题排查,下面给大家介绍Pythonlogging模... 目录一、为什么使用 logging 模块?二、核心组件三、日志级别四、基本使用步骤五、快速配置(bas

Python中edge-tts实现便捷语音合成

《Python中edge-tts实现便捷语音合成》edge-tts是一个功能强大的Python库,支持多种语言和声音选项,本文主要介绍了Python中edge-tts实现便捷语音合成,具有一定的参考价... 目录安装与环境设置文本转语音查找音色更改语音参数生成音频与字幕总结edge-tts 是一个功能强大的

使用Python和PaddleOCR实现图文识别的代码和步骤

《使用Python和PaddleOCR实现图文识别的代码和步骤》在当今数字化时代,图文识别技术的应用越来越广泛,如文档数字化、信息提取等,PaddleOCR是百度开源的一款强大的OCR工具包,它集成了... 目录一、引言二、环境准备2.1 安装 python2.2 安装 PaddlePaddle2.3 安装

Python datetime 模块概述及应用场景

《Pythondatetime模块概述及应用场景》Python的datetime模块是标准库中用于处理日期和时间的核心模块,本文给大家介绍Pythondatetime模块概述及应用场景,感兴趣的朋... 目录一、python datetime 模块概述二、datetime 模块核心类解析三、日期时间格式化与

Python如何调用指定路径的模块

《Python如何调用指定路径的模块》要在Python中调用指定路径的模块,可以使用sys.path.append,importlib.util.spec_from_file_location和exe... 目录一、sys.path.append() 方法1. 方法简介2. 使用示例3. 注意事项二、imp

Python中模块graphviz使用入门

《Python中模块graphviz使用入门》graphviz是一个用于创建和操作图形的Python库,本文主要介绍了Python中模块graphviz使用入门,具有一定的参考价值,感兴趣的可以了解一... 目录1.安装2. 基本用法2.1 输出图像格式2.2 图像style设置2.3 属性2.4 子图和聚

Python的time模块一些常用功能(各种与时间相关的函数)

《Python的time模块一些常用功能(各种与时间相关的函数)》Python的time模块提供了各种与时间相关的函数,包括获取当前时间、处理时间间隔、执行时间测量等,:本文主要介绍Python的... 目录1. 获取当前时间2. 时间格式化3. 延时执行4. 时间戳运算5. 计算代码执行时间6. 转换为指

Python正则表达式语法及re模块中的常用函数详解

《Python正则表达式语法及re模块中的常用函数详解》这篇文章主要给大家介绍了关于Python正则表达式语法及re模块中常用函数的相关资料,正则表达式是一种强大的字符串处理工具,可以用于匹配、切分、... 目录概念、作用和步骤语法re模块中的常用函数总结 概念、作用和步骤概念: 本身也是一个字符串,其中

Python中的getopt模块用法小结

《Python中的getopt模块用法小结》getopt.getopt()函数是Python中用于解析命令行参数的标准库函数,该函数可以从命令行中提取选项和参数,并对它们进行处理,本文详细介绍了Pyt... 目录getopt模块介绍getopt.getopt函数的介绍getopt模块的常用用法getopt模

python logging模块详解及其日志定时清理方式

《pythonlogging模块详解及其日志定时清理方式》:本文主要介绍pythonlogging模块详解及其日志定时清理方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地... 目录python logging模块及日志定时清理1.创建logger对象2.logging.basicCo