文章目录

  • 前言
  • 一、语音识别模块介绍
  • 二、语音识别模块的二次开发
    • 1. 重点代码修改部分
    • 2. 二次开发部分
  • 三、语音模块结合继电器组控制所有灯
    • 1. 接线
  • 2. 树莓派程序

前言

前面学习了树莓派的串口通信,本节将树莓派和语音模块结合起来,二者通过串口通信实现语音识别功能。
具体就是语音模块将识别到的指令进行处理发送给树莓派,树莓派根据接收到的指令,执行不同的语句,执行不同的操作。比如控制不同的继电器,从而实现打开和关闭不同灯光的操作。

一、语音识别模块介绍

本次开发用到的语音模块是淘宝购买的,型号为:YS-LDV7
①本模块实际原理为 1 片 STC11 单片机+1 片 LD3320 组合形成的一款语音识别模块, 语音识别部分已写好驱动程序, 用于只需要对 STC 单片机进行编程加入自己的识别语句和控制程序即可。模块内部通信为SPI接口,对外通信为串口
②语音识别模块可以接STM32、ARDUINO、STC单片机、树莓派吗?
答:可以,模块对外是串口通信。只要有串口的设备都可以对接。具体的串口接收程序要看你接的硬件了,需要自己写对应的串口接收程序。
③有很多人在STC-ISP中找不到STC11L08XE,它就在STC11L60XE系列中。先找到STC11L60XE系列然后选STC11L08XE。
④keil打开源代码的时候会报下面的错误,不用理会。

二、语音识别模块的二次开发

本次开发是在LD3320模块提供的源代码基础上进行的二次开发。在开发前,需要将源代码读一遍,理清源代码的逻辑关系,在此基础上才能进行代码的修改,进行二次开发。

源代码大概流程:

void ExtInt0Handler(void) interrupt 0    //中断处理函数//当LD3320识别成功后,会引发IO口中断nAsrRes = LD_GetResult();    /*获取结果*/User_handle(nAsrRes);   //用户执行函数 mainLed_test();        //开机闪灯3次MCU_init();     //单片机本身初始化,开启中断LD_Reset();       //ld3320初始化UartIni();   /*串口初始化*/while(1){RunASR(); //启动识别LD_AsrStart();LD_Init_ASR();  //厂家提供的启动时序代码LD_AsrAddFixed();  //向LD模块添加关键词LD_AsrRun();    //运行ASR 启动ASR运算(“开始识别”)ProcessInt0()    //判断识别是否有结果}
  1. LD_AsrAddFixed(); 向LD模块添加关键词 在LDchip.c
  2. 识别出结果后,把数据从语音模块发出来!void User_handle(uint8 dat) main

1. 重点代码修改部分

理顺整个源代码的执行流程之后,不难理解,可进行二次开发的地方,也就是代码修改部分:
①语音识别口令

②识别码

③识别结果串口输出

2. 二次开发部分

理顺整个源代码的执行流程之后,不难理解,可进行二次开发的地方,也就是代码修改部分:
①修改词条

②识别码修改

③修改语音识别串口输出结果

三、语音模块结合继电器组控制所有灯

二次开发的过程如上所述,包含有家居各种灯的语音控制口令。比如客厅灯、卧室灯、餐厅灯和二楼灯。

1. 接线

首先是接线,前面已经介绍,语音识别模块与外部模块如51、32、树莓派等通信是采用串口通信,串口通信是全双工的,但在这里,不需要将通信的两根线都接上,因为语音识别的结果直接发送到树莓派上,树莓派根据由于该结果(也就是指令)去实现不同的动作,但是树莓派不需要向语音模块发送数据,也就是说二者只需单项数据传输。

2. 树莓派程序

结合树莓派外设开发基础—wiringPi库和树莓派外设开发基础—串口通信。我们来编写树莓派程序,实现语音识别控制各种灯,也就是语音识别控制继电器组。

#include <stdio.h>
#include <string.h>
#include <wiringPi.h>
#include <wiringSerial.h>
#include <unistd.h>
#include <stdlib.h>#define SWITCH1 21
#define SWITCH2 22
#define SWITCH3 23
#define SWITCH4 24int initwiringPiSetup()
{if (wiringPiSetup() == -1){printf("init error\n");exit(-1);}
}void initPin()
{pinMode(SWITCH1,OUTPUT);   //设置引脚为输出引脚pinMode(SWITCH2,OUTPUT);pinMode(SWITCH3,OUTPUT);pinMode(SWITCH4,OUTPUT);digitalWrite(SWITCH1,HIGH);      //初始状态断开digitalWrite(SWITCH2,HIGH);digitalWrite(SWITCH3,HIGH);digitalWrite(SWITCH4,HIGH);
}int main()
{int fd;int n_read;char cmd[128]={'\0'};initwiringPiSetup();initPin();fd = serialOpen("/dev/ttyAMA0",9600);   //打开串口while(1) {n_read = read(fd,cmd,sizeof(cmd));if(strlen(cmd)==0){printf("overtime...\n");continue;}if(strstr(cmd,"KKTD") != NULL){digitalWrite(SWITCH1,LOW);printf("ke ting deng yi da kai\n");       //调试信息}if(strstr(cmd,"GKTD") != NULL){digitalWrite(SWITCH1,HIGH);printf("ke ting deng yi guan bi\n");  //调试信息}if(strstr(cmd,"KWSD") != NULL){digitalWrite(SWITCH2,LOW);}if(strstr(cmd,"GWSD") != NULL){digitalWrite(SWITCH2,HIGH);}if(strstr(cmd,"KCTD") != NULL){digitalWrite(SWITCH3,LOW);}if(strstr(cmd,"GCTD") != NULL){digitalWrite(SWITCH3,HIGH);}if(strstr(cmd,"KELD") != NULL){digitalWrite(SWITCH4,LOW);}if(strstr(cmd,"GELD") != NULL){digitalWrite(SWITCH4,HIGH);}if(strstr(cmd,"KQBD") != NULL){digitalWrite(SWITCH1,LOW);digitalWrite(SWITCH2,LOW);digitalWrite(SWITCH3,LOW);digitalWrite(SWITCH4,LOW);     }if(strstr(cmd,"GQBD") != NULL){digitalWrite(SWITCH1,HIGH);digitalWrite(SWITCH2,HIGH);digitalWrite(SWITCH3,HIGH);digitalWrite(SWITCH4,HIGH); }memset(cmd,'\0',sizeof(cmd)/sizeof(char));}return 0;
}

代码还是比较简单,并成功实现了语音指令操作继电器

疑问:
语音模块通过串口传输过来的数据是"KKTD"、"GKTD"等这些字符串,但当我用语句:

        if(strcmp(cmd,"KKTD") == 0){digitalWrite(SWITCH1,LOW);printf("ke ting deng yi da kai\n");      //调试信息}if(strcmp(cmd,"GKTD") == 0){digitalWrite(SWITCH1,HIGH);printf("ke ting deng yi guan bi\n");    //调试信息}

使用strcmp()函数时,根本无法使继电器动作,也没有调试信息输出,显然语音模块通过串口传输失败。必须要用 strstr() 函数才行,不知道为什么。

树莓派开发—语音识别功能相关推荐

  1. 百度api语音识别一直“无内容”_PHP开发语音识别功能

    语音识别的功能的应用场景 将语音实时识别为文字,适用于语音聊天.语音输入.语音搜索.语音下单.语音指令.语音问答等多种场景. 我们还是利用百度API,语音识别功能,给大家讲解如何使用.API主要就是要 ...

  2. 前端基于vue企业微信JS-SDK语音识别功能开发(同公众号)

    前端基于vue企业微信JS-SDK语音识别功能开发(同公众号) 微信JS-SDK 1.前期准备 前端代码撰写 微信JS-SDK 前端需要实现一个功能,如录音,拍照,分享,地理位置等,前端想要实现这些功 ...

  3. Unity VR开发出语音识别功能

    Unity VR在近日正式宣布了VR的新技术语音识别功能,让你在虚拟现实设备中更加的现实. 交互一直以来都是虚拟现实领域的重头戏,我们一直以来所熟悉的交互形式是手柄或者体感控制器. 不过现在,Unit ...

  4. Android 悬浮窗语音识别功能开发详解

    笔者是一个普通不能再普通的程序员,本着出处兴趣,花时间研究了一下,想实现手机的悬浮窗语音识别功能,这样不影响自己其它操作的,语音识别技术是用百度云语音sdk,应该不难实现,很难实现就是核心语音识别技术 ...

  5. 基于树莓派的语音识别和语音合成

    基于树莓派的语音识别和语音合成 摘要 语音识别技术即Automatic Speech Recognition(简称ASR),是指将人说话的语音信号转换为可被计算机程序所识别的信息,从而识别说话人的语音 ...

  6. php 复制文件夹并压缩到最小_php与语音识别功能如何对接

    语音识别的功能的应用场景 将语音实时识别为文字,适用于语音聊天.语音输入.语音搜索.语音下单.语音指令.语音问答等多种场景. 我们还是利用百度API,语音识别功能,给大家讲解如何使用.API主要就是要 ...

  7. 《树莓派开发实战(第2版)》——2.9 利用RDP远程控制树莓派

    本节书摘来自异步社区<树莓派开发实战第2版>一书中的第2章第2.9节作者[英]Simon Monk蒙克韩波 译更多章节内容可以访问云栖社区"异步社区"公众号查看. 2. ...

  8. 微信小程序实现语音识别功能

    原标题:微信小程序实现语音识别功能 使用小程序实现语音识别功能,由于语音识别可以直接使用各厂家的API接口,并且小程序为腾讯所有,因此考虑到可能的低延时,采用了腾讯提供的免费API接口,准确讲是腾讯语 ...

  9. iOS中 语音识别功能/语音转文字教程具体解释 韩俊强的博客

    前言:近期研究了一下语音识别,从百度语音识别到讯飞语音识别:首先说一下个人针对两者的看法,讯飞毫无疑问比較专业.识别率也非常高真对语音识别是比較精准的,可是非常多开发人员和我一样期望离线识别,而讯飞离 ...

  10. 谷歌语音识别功能Live Transcribe,让AI帮助语言障碍者“说话”

    原标题:谷歌语音识别功能Live Transcribe,让AI帮助语言障碍者"说话" 目前,全球有4.66亿人患有残疾性听力损失.而据世界卫生组织估计,到2050年,这一数字将超过 ...

最新文章

  1. 字符串转换成utf-8编码
  2. RDKit | 基于Lipinski规则过滤化合物库
  3. webstrom js 代码不高亮
  4. Flask框架(flask中的邮件发送Flask-Mail(邮件扩展))
  5. valgrind 常见错误提示信息
  6. 有人表面上是苹果CEO,背地里却是清华经管学院顾问委员会主席
  7. linux 文件可执行_深入理解linux内核——可执行文件执行过程(2)
  8. 面对新型肺炎疫情,AI 能做什么?
  9. UVALive 4212 Candy
  10. 使用DPM2007来保护企业数据
  11. Mysql之统计数据
  12. PP点点通介绍与下载
  13. 迅雷手机版苹果版_「9月22日」最新 苹果IOS手机迅雷Beta版证书修复版 安卓不限速...
  14. RTL8152B-VB-CG usb转网口芯片驱动指示灯驱动调试
  15. android 小米手机如何进入开发者模式
  16. 基于51单片机及MAX6675的8通道测温系统 protues仿真
  17. 学习视频处理(一),了解HLS,流媒体,视频编码
  18. Hexo+Icarus3+live2d给博客添加看板娘
  19. 算法设计与分析第五章习题解答与学习指导(第2版)屈婉婷 刘田 张立昂 王捍贫编著 清华大学出版社
  20. iphone桌面横屏设置在哪里_苹果手机怎么设置横屏切换

热门文章

  1. 读《从零开始学理财》
  2. android6.0原生brower_六款顶级Android手机原生浏览器决战
  3. vue 的ui组件库
  4. 数字签名与数字加密的区别
  5. 3.shell脚本的基础知识
  6. 网络创业:网站盈利模式分析分类
  7. 想变好却不能坚持,我告诉你怎么办
  8. win7开启wifi共享(热点)
  9. CentOS安装Nacos后,输入默认用户名和密码nacos/nacos,提示“用户名或密码错误”
  10. 加性高斯白噪声 AWGN