树莓派开发—语音识别功能


前言

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

一、语音识别模块介绍

本次开发用到的语音模块是淘宝购买的,型号为: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);	//用户执行函数 
		
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()	//判断识别是否有结果
	}
  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 24

int 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() 函数才行,不知道为什么。

  • 3
    点赞
  • 74
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
### 回答1: 树莓派AI套件是一种集成了AI功能的电子开发套件,可以帮助开发者快速构建智能音响、语音识别、视觉识别等应用。其中,语音识别是其重要的功能之一。该套件采用了Google的语音识别API,能够实现高效准确的语音识别。 对于开发者而言,树莓派AI套件语音识别功能非常实用。开发者可以结合其它模块,如喇叭、麦克风、触摸屏等,构建出智能音箱等智能识别系统。此外,树莓派AI套件的语音识别功能也可被应用于智能家居、机器人、智能助手等领域。 与此同时,树莓派AI套件语音识别功能也存在一些限制。首先,使用该功能需要联网,而且语音识别质量也会受到网络质量的影响。其次,该套件的语音识别只能支持固定的语音指令,对于一些复杂的语音或者带有口音的语音,其准确度也会受到影响。因此,开发者在使用树莓派AI套件语音识别功能时,需要综合考虑这些因素,合理设计语音识别系统。 总之,树莓派AI套件语音识别功能对于开发者而言是一种非常实用的功能,可以帮助开发者轻松地构建智能识别系统,提高开发效率和用户体验。 ### 回答2: 树莓派ai套件是一个强大的工具,它能够为用户提供语音识别功能,是人工智能领域的一大提升。利用树莓派ai套件,用户可以轻松地对语音内容进行转化,实现人机对话。对于储存较少的设备,这是一个非常有用的功能树莓派ai套件的语音识别能够实时地识别用户发出的语音内容,识别准确度非常高。此外,这个套件还支持自然语言处理,能够智能地理解用户的语言表达。利用树莓派ai套件,用户可以迅速地将语音内容转化为文本信息,并且将其储存在云端,实现信息的传输和分析。 总的来说,使用树莓派ai套件进行语音识别具有许多优点,其中最明显的就是其高效性和精度。此外,这个套件支持的语音识别和自然语言处理功能为人机交互提供了更为智能、更人性化的解决方案。这个套件在研究和开发人工智能应用时,将会是不可或缺的利器。 ### 回答3: 树莓派AI套件是一款应用广泛的开源硬件平台,也是一款人工智能教育应用的好教具。它是由英国的树莓派基金会设计和生产的一种微型电脑。经过不断的更新,现在的树莓派具备了人工智能方面的功能,其中之一就是语音识别功能树莓派AI套件中使用的语音识别是基于百度AI平台的语音识别接口进行开发的。用户只需要将麦克风连接到树莓派上,然后通过编程软件对相关代码进行配置,即可实现语音识别。 该功能的主要应用场景是智能家居和机器人控制等领域。比如,有了语音识别功能树莓派,可以通过语音指令来控制智能家居中的各种家电,比如智能灯、智能电视、智能空调等。在机器人控制方面,语音识别功能可以用来实现语音控制机器人的行动。 总的来说,树莓派AI套件中的语音识别功能非常实用,可以让用户更加方便、快捷地控制智能设备和机器人,是一项很有潜力的应用。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值