语音模块LD3320与树莓派进行串口通信

一、LD3320概述

1、本模块实际原理为 1 片 STC11 单片机+1 片 LD3320 组合形成的一款语音识别模块,语音识别部分已写好驱动程序,用于只需要对 STC 单片机进行编程加入自己的识别语句和控制程序即可,语音识别部分无需理会和做编程处理。

2、串口连接图

注意电平需要5V

3、语言模块代码的烧录

串口连接后,我们使用stc-isp软件进行代码的烧录

4、代码阅读工具

代码的阅读使用的是Source Insight软件(百度可自行下载)

首先在源代码(是为了让这些代码产生关联)那里新建一个文件夹,然后进入新建的文件夹然后,复制路径。

其次,点击新建的文件夹,复制文件夹路径。

然后打开软件,新建工程,工程存放的路径就是我们刚才复制的路径(放在这个路径下方便添加和查找代码)

点击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即可在整个工程中查找你选中的目标。

二、语言模块代码的修改

  1. 先阅读代码,了解流程。

2、找到修改的地方

(1)LD_AsrAddFixed(); 向LD模块添加关键词 在LDchip.c

(2)识别出结果后,把数据从语音模块发出来void User_handle() 在main函数里

3、修改代码

(1)源代码

(2)默认识别码

上面修改完后对应的宏也要修改。

(3)默认的串口输出

(4)开始修改代码

方框为此次修改的地方,修改完后烧录到语音模块,可先用串口调试。

三、语音模块与树莓派的关联

直接上代码

#include<wiringSerial.h>
#include<wiringPi.h>
#include<stdio.h>
#include<string.h>
#include<unistd.h>

int main()
{
        int fd;
        char cmd[128] = {'\0'};
        int nread;
        wiringPiSetup();//硬件初始化

        fd = serialOpen("/dev/ttyAMA0",9600);//打开串口

        while(1)
        {
                nread = read(fd,cmd,sizeof(cmd));
                if(strlen(cmd) == 0)//如果过了一定的时间串口上还是没有信息的话就会打印下面的超时
                {
                        printf("chaoshi\n");
                        continue;
                }
                if(strstr(cmd,"open") != NULL){
                        printf("open light\n");
                }
                if(strstr(cmd,"close") != NULL){
                        printf("close light\n");
                }
        //      printf("getData:%dbyte,contex:%s\n",nread,cmd);
                memset(cmd,'\0',sizeof(cmd)/sizeof(char));//每次读取完指令并执行对应得操作后,把字符串清空一下
        }
                return 0;
}

由于我的语音识别的代码里就是输出开灯,关灯,重庆三个内容,所以可以看出代码里就是简单的输出一下三个指令对应的内容。注意:树莓派电脑串口通信代码(树莓派串口一次只能接受8个字节,如果超出8个字节就分多次接收),为了避免一句话多次输出,所以就用到了strstr函数,还有一点要补充一下,read在linux系统中应该是阻塞的,但是在这里没有阻塞,可能是因为串口底层驱动的设置问题,如果长时间没有数据读取到,那么会每隔10s返回一个-1。

学习笔记,仅供参考

  • 3
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值