一、设计目的
1、根据酷痞Coolpy数据库,相当于一个云平台和Web服务,理解网页控制电源开关的方法和过程,掌握HTML5页面访问与控制的具体协议和通信命令。学会在Coolpy中建立数值型传感器和开关型传感器,并熟悉使用。
2、通过Arduino接收RT5350F开发板得到的Coolpy数据库中的开关传感器的开关状态来控制Arduino上的LED灯的亮灭。
3、通过Arduino获取光强的强度数值,将数值通过RT5350F开发板传给Coolpy数据库中的数值型传感器。
4、通过酷痞数据库的开关传感器的开关控制灯亮灭,并且灯亮时,采集光强并上传数据给酷痞数据库,当灯灭时,不采集光强数据。
5、掌握网络通信和无线通信原理,理解系统实现的具体方案,以及系统控制数据的流向,从而实现智能家居系统实现的目的。
二、设计内容
1、设置IPv4的地址为192.168.1.88,子网掩码为255.255.255.0,点击确定。这样可以确保与嵌入式开发板在同一网段,从而实现网络共享、文件共享。
2、打开浏览器,在地址栏中敲入192.168.1.1,这是嵌入式开发板的ip地址,可自己设置。在里面找到WIFI选项,连入WIFI信号,这里的WIFI信号所使用的是自己的热点。
3、接下来打开我们的串口终端软件,SecureCRT,打开串口终端之后可以对嵌入式开发板进行操作了。主要是操作/mnt目录下的脚本文件。
三、开关控制LED灯
首先给Arduino中烧写入通过上位机给串口发送“1”则小灯亮;通过上位机给串口发送“0”则灯灭的程序。
接下来就要实现能实时获取到酷痞中的开关传感器的状态“0”或者“1”,之后就将酷痞、嵌入式开发板、Arduino开发板三者联系在一起。上图展示了嵌入式开发板与Arduino开发板通信的三脚,从左往右看,分别是GND、TX、RX。分别与Arduino的GND、0脚、1脚相连。
//Arduino程序:
int led=13; //设置13管脚为led
byte ch;
voidsetup() {
Serial.begin(9600);//设置波特率为9600
pinMode(led,OUTPUT);//设置13号管脚为输出
}
voidloop()
{
if(Serial.available()>0)//判断串口接收到了数据
{
ch=Serial.read();//读取串口的数据
Serial.flush();//清除串口缓存
if(ch=='1')//如果收到‘1’
{
Serial.println("1");//输出1并回车
digitalWrite(led, HIGH);}//灯亮
else if(ch=='0')//如果收到‘0’
{
Serial.println("0");//输出0并回车
digitalWrite(13, LOW);}//灯灭
}
}
#脚本程序
while :;
#大循环
do
curl -G--data "{}" -H "User-Agent: Fiddler" -H "Content-Type:application/json" -H "U-ApiKey:8aaefde1-9e67-4a2d-a99e-44f644e937a2" -H "Host:172.20.10.11:1337" --http1.1 172.20.10.11:1337/v1.0/hub/5/node/5/datapoint|cut -b 10 >/mnt/1.txt
#采集酷痞开关传感器的开关值并存入1.txt中
stty -F/dev/ttyS0 raw speed 9600 min 0 time 5
#二者波特率相等,可以进行通信
echo"$(cat /mnt/1.txt)" > /dev/ttyS0
#将收到的开关数据值传给串口,使得灯亮或者灯灭
sleep 1
done
四、采集光强数据先在Arduino中烧入采集光强的信息并打印给串口。特别注意的是,在程序中应该要刷新串口数据,即清空原本缓存在串口中的数据。否则在第一条curl打印的数据中会出现错误。
在脚本程序中,主要是要读取到串口发送过来的数据。这里会有一个常见的错误。不能直接读取串口的数据,而需要将串口的数据值存入一个文本中(有SD卡会方便很多),然后在从文本中读取数据传入酷痞中。
光敏电阻的一脚接入A0模拟接口,另一脚接入5V,再加入一个330欧的电阻,一脚接A0,一脚接GND,从而可以达到采集光强的效果。
//arduino采集光强程序
intsensorPin = A0;//设置A0口为sernsorPin
intsensorValue = 0; //设置光强初始值为0
voidsetup()
{
Serial.begin(9600);//设置波特率为9600
}
void loop()
{
Serial.flush();//清理串口缓存数据
sensorValue = analogRead(sensorPin);//将A0口数据传给变量
Serial.println(sensorValue); //输出光强值
delay(100);
}
#脚本文件
while :;
do
stty -F/dev/ttyS0 raw speed 9600 min 0 time 2
#设置波特率为9600
cat/dev/ttyS0 > /mnt/3.txt
#抓取串口数据存入3.txt中
c=$(echo`sed -n '1p' /mnt/3.txt`)
#将3.txt文件中的第一行数据抓取出来
echo $a
curl -d"{\"value\":$c}" -H "User-Agent: Fiddler" -H"Content-Type: application/json" -H "U-ApiKey:8aaefde1-9e67-4a2d-a99e-44f644e937a2" -H "Host:172.20.10.11:1337" --http1.1172.20.10.11:1337/v1.0/hub/8/node/9/datapoints
#上传光强数据值
sleep 1
done
对此感兴趣的可以将两个功能合在一起,学习愉快!