第三章 LD3320语音识别模块的使用

上一章给大家介绍了SYN6288语音识别模块的使用方法,它的作用是播报声音信息,所以这章教大家使用LD3320语音识别模块,让毕设能够“听懂”我们在说什么。

下图是我经常使用的一款LD3320语音识别模块,这个模块与STM32之间是通过SPI总线来进行通讯的(不懂SPI的同学,可以在B站搜索“野火STM32”去补补课),本公众号的只是教会大家使用模块,所以关于SPI我就不细说了。建议感兴趣的同学,可以说服舍友集资买一块研究一下,模块淘宝链接已放在文章底部的资料链接里。

如图,LD3320语音识别模块总共有8个引脚,分别是3.3V、GND、负责协调通讯的CLK时钟引脚、数据输出的DO引脚、数据输入的DI引脚、片选CS、RST和IRQ。大家按照资料链接里的接线图,用杜邦线将这些引脚与STM32一一连接起来即可。

         接下来讲解STM32F103C8T6与LD3320语音识别模块的通讯的代码。

        delay_init( )  初始化延时函数,执行这条语句后,延时效果才会准确。               

       NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2)设置中断优先级分组。

        LD3320_GPIO_Init( ) 初始化与LD3320模块相连接的GPIO口;

        LD3320_EXTIX_Init( ) 初始化PB8引脚外部中断;执行完这行代码后,LD3320接收到音频信号时,就会通过PB8通知STM32。

        LD3320_Reset( ) 复位LD3320模块。第12行代码到第16行代码都不需要改动。

        ASR_Status变量是当前语音识别的状态,当识别状态处于LD_ASR_FOUNDOK时(第35行),说明识别结束,运行第37行的LD3320_GetResult( )函数,获取识别结果赋值给变量nASR_Res,第38行的User_Modification( )函数拿着这个识别结果去执行相应的自定义操作。 

        这里说一下,LD3320只能识别我们设定好的关键词语句,每个关键词语句对应一个识别码(也就是上方红色字体的识别结果),当语音识别模块识别到某个关键词语句时,其对应的识别码将存入内部寄存器中,供第37行的LD3320_GetResult( )获取。关键词语句是我们在代码中用中文拼音的方式去设置的,那我们在哪里设置这些关键语句和关键语句对应的识别码呢?下图所示,在LDChip.c的第204行的LD_AsrAddFixed( )函数内,二维数组sRecog存放识别关键词语句拼音,DATE_A设置关键词语句拼音的条数为14条,从“xiao jie”到“hou tui”总共14条。DATE_B 设置每条关键词语句拼音最大长度(包括空格)为20,(例:"xiao jie"长度为8)。pCode存放的则是每条关键词语句的识别码,"xiao jie"对应识别码是CODE_CMD,"ni hao ya"对应识别码是CODE_DMCS,"zai gan ma ne"对应识别码是CODE_CSWB,"kai deng"对应识别码是CODE_1KL1,以此类推,往下一一对应。

  

          而识别码其实是一个个十六进制数,如下图所示。

        所以我们拿到代码后,只要在上图的sRecog数组里增加自己想要识别的关键词语句的中文拼音A,然后在pCode数组里增加一个识别码B,再给识别码B宏定义一个与其他识别码不同的十六进制数C就可以了(DATE_A和DATE_B也要做相应调整),做完这些操作,将代码编译烧录到STM32中,LD3320就能识别增加的关键词语句并将对应的识别码存放在寄存器中,供上面提到的main.c函数中的LD3320_GetResult( )获取。至此,语音识别功能已完成,剩下的就是在main.c函数中的User_Modification( )里执行识别码相应的自定义操作,如下图所示。

        

(在每个case语句下面编写自定义操作的代码)    

        下一章,我将通过录制视频的方式,演示如何将SYN6288和DHT11的代码移植到LDD3320代码中,实现通过语音命令 “当前温湿度是多少” 就可以播报出当前温湿度的数值。(我会最先发在公众号,有兴趣的同学可以关注)

资料链接:

https://pan.baidu.com/s/1xhlMoWmeggROu-AThwf9lQ

提取码:pqr4


 

猜你喜欢

转载自blog.csdn.net/qq_44645742/article/details/124891352