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

记得也要去修改这个玩意儿
在这里插入图片描述
实现代码

  1 
  2 #include<wiringSerial.h>
  3 #include<wiringPi.h>
  4 #include<stdio.h>
  5 #include<string.h>
  6 #include<unistd.h>
  7 
  8 int main()
  9 {
 10     int fd;
 11 
 12     char cmd[128] = {'\0'};
 13     int nread;
 14 
 15     wiringPiSetup();
 16 
 17     fd = serialOpen("/dev/ttyAMA0",9600);//注意9600为语音识别模块所要求的的波特率
 18 
 19     while(1){
 20         nread = read(fd, cmd , sizeof(cmd));
 21         if(strlen(cmd) == 0){
 22             printf("chaoshi\n");
 23             continue;
 24         }
 25         printf("getData: %dbyte,contex:%s\n",nread,cmd);
 26         memset(cmd,'\0',sizeof(cmd)/sizeof(char));
 27     }
 28 
 29     return 0;
 30 }

运行结果:
在这里插入图片描述缺点:超过八个字节就会分行显示。

改进后的代码:

#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)//strstr函数:找字符串中的子串,若子串存在则返回该位置,不存在则返回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;
}

运行结果:
在这里插入图片描述
在这里插入图片描述

#include<stdio.h>
#include<wiringPi.h>
#include<string.h>
#include<stdlib.h>
#include<wiringSerial.h>
#include<unistd.h>
#define JDQ1 26 
#define JDQ2 27 
#define JDQ3 28
#define JDQ4 29

//初始化继电器组
void init_jidianqi(void)
{
	if(wiringPiSetup ()==-1){
		perror("woring");
		exit(-1);
	}
	pinMode (JDQ1, OUTPUT);
	pinMode (JDQ2, OUTPUT);
	pinMode (JDQ3, OUTPUT);
	pinMode (JDQ4, OUTPUT);
	digitalWrite (JDQ1, HIGH);
	digitalWrite (JDQ2, HIGH);
	digitalWrite (JDQ3, HIGH);
	digitalWrite (JDQ4, HIGH);
}



void JDQ_ctl(char *cmd)
{
	if(!strcmp(cmd,"open 1")){
		digitalWrite (JDQ1, LOW);
	}
	else if(!strcmp(cmd,"close 1")){
		digitalWrite (JDQ1, HIGH);
	}	
	else if(!strcmp(cmd,"open 2")){
		digitalWrite (JDQ2, LOW);
	}
	else if(!strcmp(cmd,"close 2")){
		digitalWrite (JDQ2, HIGH);
	}
	else if(!strcmp(cmd,"open 3")){
		digitalWrite (JDQ3, LOW);
	}
	else if(!strcmp(cmd,"close 3")){
		digitalWrite (JDQ3, HIGH);
	}
	else if(!strcmp(cmd,"open 4")){
		digitalWrite (JDQ4, LOW);
	}
	else if(!strcmp(cmd,"close 4")){
		digitalWrite (JDQ4, HIGH);
	}

}
int main(void)
{
	int fd;
	int nread;
	fd = serialOpen("/dev/ttyAMA0",9600);
	char cmd[128]={'\0'};
	init_jidianqi();
	while(1){
		nread = read(fd, cmd , sizeof(cmd));
		if(strlen(cmd) == 0){
			printf("chaoshi\n");
			continue;
		}
		if(strstr(cmd,"open box") != NULL)
		{
			printf("open box\n"); 
			strcpy(cmd,"open 1");
			JDQ_ctl(cmd);
		}
		else if(strstr(cmd,"close bo") != NULL)
		{
			printf("close box\n");
			strcpy(cmd,"close 1");
			JDQ_ctl(cmd);
		}
		else if(strstr(cmd,"open li") != NULL)
		{
			printf("open light\n");
			strcpy(cmd,"open 2");
			JDQ_ctl(cmd);
		}
		else if(strstr(cmd,"close li") != NULL)
		{
			printf("close light\n");
			strcpy(cmd,"close 2");
			JDQ_ctl(cmd);
		}
		memset(cmd,'\0',sizeof(cmd)/sizeof(char));
	}
	free(cmd);
	return 0;
}

  • 2
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
引用:工作模式 普通模式:直接说话,模块直接识别。 按键模式:按键触发开始ASR进程。 口令模式:需要一级唤醒词(类似于苹果手机中的唤醒Siri,“嗨,Siri”。) 引用:第二部分是一个很好用的图灵机器人,需要付费,但是如果简单的开发语音是非常方便的,可以买一个turling。创建一个turling.py的python文件 # coding: utf-8 import requests import json import sys import importlib importlib.reload(sys) def Tuling(words): Tuling_API_KEY = "e63ae466836f4b82bf0f634bcf5b796d这个得填自己的" body = {"key":Tuling_API_KEY,"info":words.encode("utf-8")} url = "http://www.tuling123.com/openapi/api" r = requests.get(url,body,verify=True) if r: date = json.loads(r.text) print(date["text"]) return date["text"] else: return None 引用:这是我之前在csdn上看到的一个版本的语音交互项目,但是原作的版本是py2的,现在我的版本是py3的,经过本人的研究修改绝对可用,用来造福更多做语音项目的朋友们。 根据提供的引用,有一个很好用的语音识别模块python树莓语音识别模块。你可以使用该模块进行语音交互和语音识别的开发。参考引用中的示例代码,您可以通过连接到图灵机器人API来实现语音交互功能。只需将您自己的图灵API KEY填入代码中,并使用requests库发送GET请求获取图灵机器人的回复信息。这个模块是基于Python 3开发的,您只需根据您的需求进行适当的修改即可使用。在您的树莓上导入该模块并调用相关函数,您就可以开始使用语音识别功能了。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值