手把手从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);
    }
}


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/662580.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

国际数字影像产业园|科技与文创产品创意集市,共筑创新文化新高地

5月29日,为进一步增强园区与企业之间粘性,不断激发企业的创新活力,园区举办了“数媒大厦科技与文创产品创意集市活动”。本次活动由成都树莓信息技术有限公司主办,成都目莓商业管理有限公司、树莓科技(成都&#xff09…

成都欣丰洪泰文化传媒有限公司助力品牌快速崛起

在当今数字化浪潮汹涌的时代,电商行业作为新经济的代表,正以其独特的魅力和无限的潜力,引领着商业模式的创新与变革。在这个充满机遇与挑战的领域里,成都欣丰洪泰文化传媒有限公司凭借其专业的电商服务能力和前瞻性的战略眼光&…

【Paddle】Inplace相关问题:反向传播、影响内存使用和性能

【Paddle】Inplace相关问题:反向传播、影响内存使用和性能 写在最前面inplace 的好处有哪些?能降低计算复杂度吗在反向传播时,Inplace为什么会阻碍呢?“计算图的完整性受损”表达有误原地操作 sin_()为什么原地操作会阻碍反向传播…

IPFoxy Tips:海外代理IP适用的8个跨境出海业务

在当今数字化时代,互联网已经成为商业和个人生活不可或缺的一部分。IP代理作为出海业务的神器之一,备受跨境出海业务人员关注。IPFoxy动态、静态纯净代理IP也根据业务需求的不同,分为静态住宅、动态住宅、静态IPv4、静态IPv6四种类型代理。那…

祝贺!阿里云PolarDB斩获数据库国际顶会ICDE 2024工业赛道最佳论文

5月17日消息,在荷兰举行的国际顶级数据库学术会议ICDE 2024上,阿里云斩获工业和应用赛道的“最佳论文奖”,这也是中国企业首次获此殊荣。阿里云PolarDB创新性地解决了数据库Serverless中跨机事务迁移的核心难题,将跨机迁移时间压缩…

零经验转行的人,嵌入式软件开发项目经历咋办?

零基础转行,首先一定要系统的把基础知识学一遍,这样就有个系统的概念。先说一下前置知识,因为你完全没基础,这些知识还是有必要了解的,要了解一下刚好我有一些资料,是我根据网友给的问题精心整理了一份「嵌…

2024年03月 Python(六级)真题解析#中国电子学会#全国青少年软件编程等级考试

Python等级考试(1~6级)全部真题・点这里 一、单选题(共25题,共50分) 第1题 以下选项中,创建类正确的是?() A: class test1:def prt(self):……B: class Mg(

HNU-计算机体系结构-实验2-Tomasulo算法

计算机体系结构 实验2 计科210X 甘晴void 202108010XXX 1 实验目的 熟悉Tomasulo模拟器同时加深对Tomasulo算法的理解,从而理解指令级并行的一种方式-动态指令调度。 掌握Tomasulo算法在指令流出、执行、写结果各阶段对浮点操作指令以及load和store指令进行什么…

视频怎么提取成文字?7个软件教你快速进行视频文字提取

视频怎么提取成文字?7个软件教你快速进行视频文字提取 提取视频中的文字通常需要使用视频转文字的软件或在线工具。以下是七款常用的软件和工具,它们可以帮助您快速进行视频文字提取: 口袋视频转换器:这是一款专业的视频转文字…

springboot 作为客户端接收服务端的 tcp 长连接数据,并实现自定义结束符,解决 粘包 半包 问题

博主最近的项目对接了部分硬件设备,其中有的设备只支持tcp长连接方式传输数据,博主项目系统平台作为客户端发起tcp请求到设备,设备接收到请求后作为服务端保持连接并持续发送数据到系统平台。 1.依赖引入 连接使用了netty,如果项…

人工智能应用-实验5-BP 神经网络分类手写数据集

文章目录 🧡🧡实验内容🧡🧡🧡🧡代码🧡🧡🧡🧡分析结果🧡🧡🧡🧡实验总结🧡🧡 &#x1f9…

图形学初识--空间变换

文章目录 前言正文矩阵和向量相乘二维变换1、缩放2、旋转3、平移4、齐次坐标下总结 三维变换1、缩放2、平移3、旋转绕X轴旋转:绕Z轴旋转:绕Y轴旋转: 结尾:喜欢的小伙伴可以点点关注赞哦 前言 前面章节补充了一下基本的线性代数中…

统计计算五|MCMC( Markov Chain Monte Carlo)

系列文章目录 统计计算一|非线性方程的求解 统计计算二|EM算法(Expectation-Maximization Algorithm,期望最大化算法) 统计计算三|Cases for EM 统计计算四|蒙特卡罗方法(Monte Carlo Method) 文章目录 系列文章目录一…

彻底理解浏览器的进程与线程

彻底理解浏览器的进程与线程 什么是进程和线程,两者的区别及联系浏览器的进程和线程总结浏览器核心进程有哪些浏览器进程与线程相关问题 什么是进程和线程,两者的区别及联系 进程和线程是操作系统中用于管理程序执行的两个基本概念进程的定义及理解 定义…

今日分享站

同志们,字符函数和字符串函数已经全部学习完啦,笔记也已经上传完毕,大家可以去看啦。字符函数和字符串函数and模拟函数 加油!!!!!

应用上架后的关键!苹果商店(AppStore)运营策略与技巧指南

1、运营期:怎么能活得好? ▍封号和下架问题 14天 在收到苹果封号通知(我们将会在14天后封你的账号)如果觉得冤枉可以在14天内进行申诉。14天并不是一个严格准确的时间,有可能会在第15天或者在第20天,甚至…

开源基于Node编写的批量HTML转PDF

LTPP批量HTML转PDF工具 Github 地址 LTPP-GIT 地址 官方文档 功能 LTPP 批量 HTML 转 PDF 工具支持将当前目录下所有 HTML 文件转成 PDF 文件,并且在新目录中保存文件结构与原目录结构一致 说明 一共两个独立版本,html-pdf 目录下是基于 html-pdf 模…

【考研数学】数学一和数学二哪个更难?如何复习才能上90分?

很明显考研数学一更难! 不管是复习量还是题目难度 对比项考研数学一考研数学二适用专业理工科类及部分经济学类理工科类考试科目高等数学、线性代数、概率论与数理统计高等数学、线性代数试卷满分150分150分考试时间180分钟180分钟试卷内容结构高等数学约60%&…

在 iCloud.com 上导入、导出或打印联系人

想将iPhone上的电话本备份一份到本地电脑上,发现iTunes好像只是音乐播放了,不再支持像电话本等功能,也不想通过其他第三方软件,好在可以通过iCloud进行导入导出。下面只是对操作过程进行一个图片记录而已,文字说明可以…

CSS中的Flex布局

目录 一.什么是Flex布局 二.Flex布局使用 2.1Flex使用语法 2.2基本概念 三.容器的属性 3.1所有属性概述 3.2flex-direction 3.3flex-wrap 3.4flex-flow 3.5justify-content 3.6align-items 3.7align-content 四.项目(子元素)的属性 4.1所有属性概述 4.2order 4…