上篇WIFI作品DIY教程07-《wifi家居网关》家居控制中心zigbee/nrf24l01等完成了家居网关。
当下雨或漏水时,有了这个我们就可以预先知道,然后实行关窗等处理了。
第一部分:水滴传感器介绍
第三部分:下载编译源代码
1、安装CH340驱动
在drivers目录里找到CH340驱动,然后按说明安装(之前安装了就不用再安装了)。
2、源代码
[C] 纯文本查看 复制代码
/*
*NRF24l01针脚连接线
* MISO -> 12
* MOSI -> 11
* SCK -> 13
* Configurable:
* CE -> 8
* CSN -> 7
*/
#include <SPI.h>
#include <Mirf.h>
#include <nRF24L01.h>
#include <MirfHardwareSpiDriver.h>
int sid=1;//模块类型
int nid=6;//模块编号
const unsigned long interval = 1000;
unsigned long last_sent;
int shuidival=0;
int shuidi_PIN=A5;
//NRF24l01
unsigned long nrf24l01nowlast;
char nrf24l01buff[33]={0};
char nrf24l01Data;
int nrf24l01i=0;
void setup()
{
Serial.begin(115200);
char client[10]={0};//client
sprintf(client,"clie%d",sid);
//初始化Mirf,用于NRF24l01收发
Mirf_Init(0,client,sid);
Serial.println("zwifi_shuidi");
}
void loop()
{
unsigned long now = millis();
if ( now - last_sent >= interval )
{
last_sent = now;
shuidival=0;
run_shuidi();
if(shuidival==LOW)
{
char data[10]={0};
sprintf(data,"%d",shuidival);
send_data(data);
delay(10000);
}
}
}
//初始化Mirf 0初始化1为接收2为发送
void Mirf_Init(int txrx,char *server,int channel){
//初始化Mirf,用于NRF24l01收发
if(txrx==0) {
Mirf.spi = &MirfHardwareSpi;
Mirf.init();
Mirf.setRADDR((byte *)server);//设置接收地址
}
if(txrx==1) {
Mirf.setRADDR((byte *)server);//设置接收地址
}
if(txrx==2) {
Mirf.setTADDR((byte *)server);//设置发送地址
}
Mirf.payload = sizeof(char);//收发字节
Mirf.channel = channel;
Mirf.config();
}
//NRF24l01发送函数
void Mirf_Send(int channel,char *server,char *str){
Mirf_Init(2,server,channel);
int bufi=0;
for(bufi=0;bufi<strlen(str);bufi++){//循环发送
char words=str[bufi];//发送的字符
Mirf.send((byte *)&words);//发送命令
while(Mirf.isSending()){//等待发送完闭
}
delay(50);//延时,否则可能出现发送丢失现象
//Serial.print(words);
}
//Serial.println("");
}
void run_shuidi()
{
shuidival=digitalRead(shuidi_PIN);
Serial.println(shuidival,DEC);
delay(100);
}
//
void send_data(char *data){
char server[10]={0};//server
sprintf(server,"serv%d",1);
//Serial.println(server);
char updateData[33]={0};
char front[10]={0};
//memcpy(front,body,9);
sprintf(front," {ck%03d%03d",sid,nid);
sprintf(updateData,"%s%s}",front,data);
Serial.println(updateData);
Serial.println();
Mirf_Send(1,server,updateData);
char client[10]={0};//client
sprintf(client,"clie%d",sid);
Mirf_Init(1,client,sid);
}
刷写arduino程序选哪个板?
请选择板是Arduino Uno,并记得选对对应的串口。
刷写ardruino源代码时,提示库不存在?
请联系qq610854837下载zwifi资料,软件下载目录里的arduino-1.0.5,里面包含了教程使用的所有库。
将代码进行编译下载到arduino板上。
3、串口运行查看数据是否正常
在arduino软件里,查看串口数据,记得是115200哦,有如上图,说明下载运行成功了!
程序的原理就是获取到水滴警报值,然后组合成字符{ck00x00xnnnn}发送到网关保存数据,供我们以后分析。
第四部分:检测通信和数据库记录
打开:http://192.168.1.1/znck007/mysqltest.php?mode=select
点击查看数据库记录,001,006的记录,说明网关成功保存了记录。
同时也可以用数据库软件Navicat for MySQL查看数据记录!
未完。
|