概述
一、首先模块介绍
(1)参数详解
型号:YS-LDV7
名称:一体化语音识别模块
规格:43*29.7MM
供电电压:5V (内部工作电压 3.3V)
待机电流:30MA
识别时电流:45MA
IO 口输出:高电平为 3.3V
通信方式:串口通信(5V TTL 电平,不可直接接 RS232、RS485)
单片机参数:型号–>STC11L08XE 、flash–>8k、SRAM–>1280、eeprom–>32k
识别词条个数:50 句
工作温度:-20 至 60℃
(2)与USB转串口模块的接线
本模块的串口如下图所示,从下至上的 5 根针分别为 GND、RXD、TXD、
5V、3.3V,其中 RXD 和 TXD 为实际内部单片机的串口接收和发射端口,故与
外部串口设备连接时要注意 RXD 接 TXD 的交叉接法。3.3V 的口为输出口,
可用于外部设备的供电利用,一般未用上直接忽略不用即可。
下图为本店提供的 USB 转 TTL 与语音模块的连接方法,如与其他单片机
或者其他设备的连接时注意串口电平需要为 5V,与语音模块电平一致,如电
平不一致可加入串口电平转换模块否则将导致通信异常甚至损坏设备端口。
(3)语音模块的代码的烧写与及代码的阅读
a.模块下载程序需要用到STC-ISP这个软件,本模块的程序下载实际为 STC 单片机的程序下载方法,首先我们需要安装 USB 转 TTL 驱动(如已安装无需再安装),然后接好 USB 转 TTL。按照下图进行选择各个选项。
b.
标题这里使用一个代码阅读器——sourceInsight(百度可下,最好破解一下)
首先在源代码(是为了让这些代码产生关联)那里新建一个文件夹,然后进入新建的文件夹然后,复制路径。
打开sourceInsight新建一个工程,工程存放的路径就是我们刚才复制的路径(放在这个路径下方便添加和查找代码,注意路径不要有中文)
点击ok再点击ok,然后出现下图,这时我们需要将源代码添加到我们新建的工程中,点击源代码所在文件夹(code),然后再点击Add all,点击ok,确定,然后关闭即可。
如果右侧已经出现代码结构,则不需要下面的操作,如果没有出现则按下图操作。
接下来如果乱码则继续往下走,点击file然后选择Reload Encoding然后选择编码格式为Chinese Simplified(GB2312),然后点击Load即可。
还有一种在方法可以永久解决乱码问题,点击Options,然后点击preference,然后点击file,将Default encoding改成SystemDefault(Windows ANSI)或者Chinese Simplified(GB2312)936
然后如果想修改代码大小和格式,点击Options下面的File Type Options,选择自己喜欢的字体。
那么如何让代码关联起来呢?点击Project选择同步文件Synchrogaze File,同步文件后想要查找某个函数的函数体就很方便了只需要按住Ctrl此时鼠标变为小手,点击即可跳转,现在基本所有的代码编辑软件都带有这个功能。还可以选中你想要查找的目标,然后按住ctrl加斜杠(/)再点击sercher即可在整个工程中查找你选中的目标。
二、基于语音识别模块源码的二次开发
前言:本次二次开发是在语音识别模块源码的基础上进行的二次开发,程序员只需要将源码理清楚,懂得在哪里进行代码的修改即可,其他的代码可以不用理会,如果是去读其他代码的话,那么方向就跑偏了
主要代码流程
void ExtInt0Handler(void) interrupt 0 中断处理函数
当LD3320识别成功后,会引发IO口中断
nAsrRes = LD_GetResult(); /*获取结果*/
User_handle(nAsrRes);//用户执行函数
main
Led_test(); 开机闪灯3次
MCU_init(); 单片机本身初始化,开启中断
LD_Reset(); ld3320初始化
UartIni(); /*串口初始化*/
while(1){
RunASR(); 启动识别
LD_AsrStart();
LD_Init_ASR();厂家提供的启动时序代码
LD_AsrAddFixed(); 向LD模块添加关键词
LD_AsrRun(); 运行ASR 启动ASR运算(“开始识别”)
ProcessInt0()判断识别是否有结果
}
LD_AsrAddFixed()
; 向LD模块添加关键词 在LDchip.c
- 识别出结果后,把数据从语音模块发出来
void User_handle(uint8 dat) main
3.语音识别模块重要的代码的修改
在大概理清所有代码基本流程后,接下来就是对代码进行修改了
3.1语音识别的默认口令(即词条的修改)
上面拼音部分就是词条的内容的意思,下面就是词条对应的宏,无论是词条的增加还是词条的改变,宏都是需要跟着变的
3.2 语音识别的默认的识别码
这里的识别码对应着上面的词条的宏,无论是新增词条还是词条的改变,都要在这个词条这里进行改变,如果是改变词条的话,那么就在相应的宏处进行修改即可,如果是增加词条的话,对应的宏也要被增加进来
3.3 默认的识别结果串口输出
3.4 词条的修改或增加自己的词条
----根据关键词的数量和长度修改宏定义 DATE_A 和 DATE_B ,例如您要添加
10 个关键词,在这些关键词中最长的一句长度为 30,那么定义如下:
#define DATE_A 10
#define DATE_B 30
—sRecog[ ][ ] 数组为关键词数组,添加内容为拼音输入方式,例如想添加
“开灯”命令,则写入“kai deng”,每个汉字间的拼音用空格隔开。
—pCode[ ] 数组为识别码数组,所添加的识别码为预先定义好的宏定义常
量值,同时必须和关键词一一对应,如上图所示,“dai ma ce shi”命令对应的识
别码为 CODE_DMCS
3.5 识别码的修改此处即为识别码的添加和修改,用户可以根据自己的需要和喜好任意定义识别码和宏名,但必须和前面所使用的识别码配对,否则会提示未定义错误。识别码的参数范围为 01-FF 随意选择,没有具体意义,只要不存在重复的即可。
3.6 修改语音识别串口输出的结果
用户可以根据自己的使用情况在相对应的识别码后添加识别成功后的
操作。那么在设备到某句话后就会执行相应的动作,实际上此段程序是判断
识别到那个识别码然后执行相应的动作,属单片机的程序应用处理部分
三、直接上代码
#include <wiringPi.h>
#include <stdio.h>
#include <wiringSerial.h>
#include <unistd.h>
#include <string.h>
int main()
{
int fd;
int n_read;
char cmdBuf[128] = {'