代码:
点我下载代码
提取码:
bk2a
1.前言
最近在做智能家居项目,做到语音模块控制继电器的开关,记录下学习过程。
学习,无论你在什么时候开始,重要的是开始之后就不要停止!加油!
2.思路
语音模块打印信息再串口中,树莓派用字符串操作API去分析信息,并执行相应的操作,调用wiringPi库。
3.材料
树莓派3B
继电器组
语音模块
usb转ttl
4.二次开发语音模块
1.修改代码
基于模块源代码,进行二次开发。
2.烧录并测试
烧录时要将语音模块断电再上电(可以将GND线拔了再插)
烧录好之后点击串口助手进行测试
4.树莓派代码编写
#include <stdio.h>
#include <string.h>
#include <wiringPi.h>
#include <wiringSerial.h>
#include <unistd.h>
#define SWITCH1 21
#define SWITCH2 22
#define SWITCH3 23
#define SWITCH4 24
int initwiringPiSetup()
{
int ret = wiringPiSetup();
if (ret == -1){
printf("init error\n");
return -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("waiting...\n");
continue;
}
if(strstr(cmd,"KYS")!=NULL){
digitalWrite(SWITCH1,LOW);
}
if (strstr(cmd,"GYS")!=NULL){
digitalWrite(SWITCH1,HIGH);
}
if (strstr(cmd,"KCT")!=NULL){
digitalWrite(SWITCH2,LOW);
}
if (strstr(cmd,"GCT")!=NULL){
digitalWrite(SWITCH2,HIGH);
}
if (strstr(cmd,"KEL")!=NULL){
digitalWrite(SWITCH3,LOW);
}
if (strstr(cmd,"GEL")!=NULL){
digitalWrite(SWITCH3,HIGH);
}
memset(cmd,'\0',sizeof(cmd)/sizeof(char));
}
return 0;
}