最近在做智能家居项目,做到语音模块控制继电器的开关,历经俩天,坎坎坷坷也算完成了语音模块控制继电器组的开关,记录下学习过程。
学习,无论你在什么时候开始,重要的是开始之后就不要停止!加油!
语音模块打印信息再串口中,树莓派用字符串操作API去分析信息,并执行相应的操作,调用wiringPi库。
树莓派3B
继电器组
语音模块
usb转ttl
基于模块源代码,进行二次开发。
烧录时要将语音模块断电再上电(可以将GND线拔了再插)
烧录好之后点击串口助手进行测试
#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;
}
前言 相信大家都知道在IDE中代码的智能提示几乎都是标配,虽然一些文本编辑器也...
一石激起千层浪,继中国区浩浩荡荡的大裁员告一段落之后,甲骨文并未因此收起手...
【排序算法】之lowb三人组冒泡、插入、选择 什么是lowb三人组 冒泡排序bubble so...
本文将研究 ES6 的 for ... of 循环。 旧方法 在过去,有两种方法可以遍历 javas...
ADO对象: Connection Command Recordset Record Stream ASP支持的对象很多,可...
计算属性computed: 支持缓存,只有依赖数据发生改变,才会重新进行计算 不支持...
一、正则表达式概述 二、正则表达式在VBScript中的应用 三、正则表达式在VavaScr...
vbs:把一段文字中指定字符颜色变成红色的正则 functionc(Tstr,Word) Dimre Setre...
微信文件传输助手是微信电脑版与手机微信之间相互传输图片等文件的好工具,但很...
歌词编辑器 歌词编辑器 第一步:选择要播放的歌曲并播放 第二步:填写全部的歌词...