树莓派和语音模块实现语音设别功能

一、硬件模块化的开发(常用)

语音模块

AT指令——GPS模块
AT指令版本的语音模块——M6语音模块

中国的嵌入式开发中以下这些合作方式经常存在:

  • 人脸识别打卡器 虹膜识别(购买)
  • 语音识别(购买)
  • 车牌识别(购买)
  • 华为手机(购买京东方)
  • OPPO手机(购买了华为5g方案)

YS-LDV7语音模块开发流程:

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()判断识别是否有结果
}

YS-LDV7语音模块二次开发:

  1. LD_AsrAddFixed(); 向LD模块添加关键词,在LDchip.c
  2. 识别出结果后,把数据从语音模块发出来!void User_handle(uint8 dat) main

二、实现语音设别功能

接线:

树莓派——语音模块
tx——————rx
rx——————tx
gnd—————gnd

树莓派和语音模块通信代码:

#include  
#include 
#include 
#include  
#include 
#include 

int main()
{
	int fd;
	int cmd[128] = {'\0'};
	int nread;
	 
	if(wiringPiSetup() == -1){	//wiringPi库的初始化 
		printf("硬件接口初始化失败\n");
		exit(-1);
	}
	
	fd = serialOpen("/dev/ttyAMA0", 9600);
	
	while(1){
		nread = read(fd, cmd, sizeof(cmd));
		if(strlen(cmd) == 0){
			printf("超时\n");
			continue;
		}
		if(strstr(cmd,"open") != NULL){
			printf("开灯成功\n");
		}
		if(strstr(cmd,"close") != NULL){
			printf("关灯成功\n");
		}
		
		printf("读到的内容:%d\n", nread);
		memset(cmd,'\0',sizeof(cmd)/sizeof(char));
				
	}
	
	return 0;
}

你可能感兴趣的:(树莓派开发,语音识别,arm,嵌入式)