功能描述
功能描述:一级指令唤醒语音模块,语音模块红灯亮起,说出关键词,然后树莓派读取语音识别的结果,闭合继电器,进而控制电磁锁的开关。
硬件组成
硬件组成:电磁锁,继电器、ld3320A语音模块、树莓派、若干杜邦线
硬件接线图
测试代码
#include <stdio.h>
#include <unistd.h>
#include <string.h>
#include <wiringPi.h>
#include <wiringSerial.h>
#include <stdlib.h>
#define SWI1 26
void initRelay()
{
pinMode(SWI1,OUTPUT);
digitalWrite(SWI1,HIGH);
}
int main()
{
int fd;
char cmd[128] = {'\0'};
int nread;
wiringPiSetup();//硬件初始化
fd = serialOpen("/dev/ttyAMA0",9600);//将一切IO设备都看>作文件,fd就是代表串口抽象出来的文件
initRelay();//继电器初始化
while(1){
printf("Please say command\n");
nread = read(fd,cmd,sizeof(cmd));//正常会阻塞,>但由于树莓派串口的原因10s后没数据就超时,会往下执行
if(strlen(cmd) == 0){
printf("overtime\n");//没有识别到内容,打印超时
continue;
}
if(strstr(cmd,"Open Li") != NULL ){//strstr函数功能是,str2是str1的字串,就返回母串首次出现子串的地址,否则返回NULL
digitalWrite(SWI1,LOW);//闭合继电器,开锁
printf("open sucess\n");
}
if(strstr(cmd,"Close Li") != NULL ){
digitalWrite(SWI1,HIGH);//闭合继电器,关锁
printf("Close sucess\n");
}
memset(cmd,'\0',sizeof(cmd)/sizeof(char));
}
return 0;
}
总结
学会了如何通过语音控制不同的外设。