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

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

HTML蓝色爱心

目录 写在前面 HTML入门 完整代码 代码分析 运行结果 系列推荐 写在后面 写在前面 最近好冷吖,小编给大家准备了一个超级炫酷的爱心,一起来看看吧! HTML入门 HTML全称为HyperText Markup Language,是一种标记语言&#…

【wiki知识库】01.wiki知识库前后端项目搭建(SpringBoot+Vue3)

📝个人主页:哈__ 期待您的关注 🌼环境准备 想要搭建自己的wiki知识库,要提前搭建好自己的开发环境,后端我使用的是SpringBoot,前端使用的是Vue3,采用前后端分离的技术实现。同时使用了Mysql数…

浪潮信息IPF24:AI+时代,创新驱动未来,携手共创智慧新纪元

如今,数字化时代的浪潮席卷全球,人工智能已经成为推动社会进步的重要引擎。浪潮信息IPF24作为行业领先的AI技术盛会,不仅为业界提供了交流合作的平台,更在激发创新活力、拓展发展路径、加速AI技术落地等方面发挥了重要作用。 升级…

【调和级数】100321. 优质数对的总数 II

本文涉及知识点 调和级数 质数、最大公约数、菲蜀定理 LeetCode100321. 优质数对的总数 II 给你两个整数数组 nums1 和 nums2,长度分别为 n 和 m。同时给你一个正整数 k。 如果 nums1[i] 可以被 nums2[j] * k 整除,则称数对 (i, j) 为 优质数对&#…

手机版AI写作软件哪个好用?5款AI写作软件分享

在这个快节凑的时代,人们对于高效、便捷的创作方式很是追求。尤其是在人工智能技术发展迅速的今天,AI写作软件的出现,让很多自媒体创作者都会想到在手机上面进内容创作,这样不仅能提高工作效率,而且工作的自由度会更高…

ciscn2024(上传一下,有侵权什么的问题的话联系删除)

Web Simple_php 这个Simple_php一点儿也不Simple (⋟﹏⋞) 源码放这儿了&#xff1a; <?phpini_set(open_basedir, /var/www/html/); error_reporting(0);if(isset($_POST[cmd])){$cmd escapeshellcmd($_POST[cmd]); if (!preg_match(/ls|dir|nl|nc|cat|tail|more|flag…

Java中IO流类的体系

Java为我们提供了多种多样的IO流&#xff0c;我们可以根据不同的功能及性能要求挑选合适的IO流&#xff0c;如图所示&#xff0c;为Java中IO流类的体系。 从上图发现&#xff0c;很多流都是成对出现的&#xff0c;比如&#xff1a; FileInputStream/FileOutputStream&#xff0…

vue3的api风格

Vue的组件有两种不同的风格&#xff1a;组合式API 和 选项式API 选项式api 选项式API&#xff0c;可以用包含多个选项的对象来描述组件的逻辑&#xff0c;如&#xff1a;data&#xff0c;methods&#xff0c;mounted等。 组合式api setup&#xff1a;是一个标识&#xff0c;告…

【全开源】答题考试系统源码(FastAdmin+ThinkPHP+Uniapp)

答题考试系统源码&#xff1a;构建高效、安全的在线考试平台 引言 在当今数字化时代&#xff0c;在线考试系统已成为教育机构和企业选拔人才的重要工具。一个稳定、高效、安全的答题考试系统源码是构建这样平台的核心。本文将深入探讨答题考试系统源码的关键要素&#xff0c;…

民宿bug

前端 后端 1 订单管理 订单日期已过&#xff0c;状态没有变成已完成

window环境下QT5开发环境的搭建

1、安装visual Stusio 15 生成工具2012 2、安装Visual studio Enterprise 2017 3、Visual studio Enterprise 2017安装完成之后&#xff0c; 修改&#xff1a;选择桌面调试&#xff0c;如下&#xff1a; 4、打开QTcreator&#xff0c;选项中&#xff0c;配置编译器&#xff…

C++学习/复习5--构造函数与初始化/static成员/友元/内部类/匿名对象/编译器的拷贝构造优化

一、本章概要 二、再谈构造函数 1.构造体赋初值与初始化 2.初始化列表与初始化 2.1定义 2.2注意事项与举例 3.explicit关键字与构造函数 3.1隐式类型转换 也叫做自动类型转换 这种转换通常是从存储范围小的类型到存储范围大的类型&#xff0c;或者是从低精度的数值类型到高…

利用基于CNN的人员检测与关键词识别的TinyML实现无接触电梯

目录 说明 论文概述 摘要 引言 现有非接触式电梯解决方案 新解决方案的需求 tinyML实施 系统构建和算法管道 CNN和TinyML实现 结果与讨论 结论 视频演示和代码可用性 一点感想 说明 我一直使用Google Schloar订阅最新的论文消息&#xff0c;今天看到一篇论文的标…

租赁系统|北京租赁系统|租赁软件开发流程

在数字化时代的浪潮下&#xff0c;小程序成为了各行各业争相探索的新领域。租赁行业亦不例外&#xff0c;租赁小程序的开发不仅提升了用户体验&#xff0c;更为商家带来了更多商业机会。本文将详细解析租赁小程序的开发流程&#xff0c;为有志于进军小程序领域的租赁行业从业者…

【C语言】指针作为参数(传值调用vs传址调用)

前言 在前面讲了那些指针相关的内容后&#xff0c;是时候探讨一下指针有什么作用了。 在C语言中&#xff0c;指针有多种各不相同的应用&#xff0c;在本篇文章中&#xff0c;我们探讨一下指针作为函数参数的作用&#xff08;对比传值与传址两种不同函数调用方式&#xff09;。…

OS复习笔记ch6-1

死锁的原理 定义 一组进程中&#xff0c;其中每个进程因等待事件而阻塞&#xff0c;且所等待的事件只能被这组进程中的另一阻塞进程激发称之为死锁。 举例如下 四个车辆希望紧迫的希望能很快通过&#xff0c;每辆车需要两个象限的资源&#xff0c;然而四个车都只得到一个象…

【uni-best+UView】使用mitt实现自定义错误对话框

痛点 目前在设计一个uni-best的前端全局的异常提示信息&#xff0c;如果采用Toast方式&#xff0c;对微信支持的不友好。微信的7中文长度连个NPE信息都无法完整显示&#xff0c;更不用提Stacktrace的复杂报错了。如果使用对话框&#xff0c;必须在页面先预先定义&#xff0c;对…

嵌入式实时操作系统笔记3:FreeRTOS移植(STM32F407)_编写简单的FreeRTOS任务例程

上文讲到UC/OS III系统的移植&#xff0c;那篇文章是失败了的&#xff0c;网络上的资料真是层次不清&#xff0c;多有遗漏步骤&#xff0c;导致单片机连操作系统的初始化都卡在那&#xff0c;这次换个赛道&#xff0c;学FreeRTOS吧...... 今日任务如标题所示&#xff1a;FreeR…

手机端如何访问本地vue+vite项目,实现实时调试?

一、应用场景 h5&#xff08;vuevite&#xff09;嵌入app后&#xff0c;出现某种问题时&#xff0c;需要每次发布坏境后&#xff0c;才能才看效果&#xff0c;这种来回很耗时间&#xff0c;本文章在于解决手机端直接访问本地启动应用项目&#xff0c;无需重复发布坏境 二、实…

春秋CVE-2022-23906

简介 CMS Made Simple v2.2.15 被发现包含通过上传图片功能的远程命令执行 (RCE) 漏洞。此漏洞通过精心制作的图像文件被利用。 正文 1.进入靶场2.进入登录界面&#xff0c;弱口令admin/123456 3.进入后台&#xff0c;文件上传点 4.上传一句话木马图片 5.复制图片&#xf…