【软件篇】Intel Edison的socket编程、web、手机APP
步骤1:功率采集
通过上文,我们已经知道,通过硬件电路的实现,我们已经把功率信息转换为频率信息。所以我们只需要让爱迪生实现一个频率计的功能,就可以测量出用电器的实时功率值。
代码:
var mraa = require("mraa");
var back_time = 0;
var interval = 0;
var freq = 0;
var wave_begin = true;
var key = new mraa.Gpio(8);
key.dir(mraa.DIR_IN);
key.isr(mraa.EDGE_RISING, function(){
if(wave_begin){
var d = new Date();
front_time = d.getTime();
wave_begin = false;
}else{
var d = new Date();
back_time = d.getTime();
wave_begin = true;
interval = back_time - front_time;
}
});
//
主循环
setInterval(function(){
var d = new Date();
var time_now = d.getTime();
if(time_now - back_time > 1500){
//1.5
秒超时,认为无信号,
freq = 0 Hz
interval = 0;
}
//
计算频率
if(0 == interval){
freq = 0;
}else{
freq = 1000/interval;
}
console.log("The frequency is " + freq + " Hz");
}, 1000);
分析:
实验目的:通过外部中断和time
时间戳来测量方波频率
原理:方波信号作为外部中断源,第一个上升沿(前沿front_time
)到来时,爱迪生记录前沿时间戳;第二个上升沿(后延
back_time
)到来时,爱迪生记录后延时间戳。两个时间戳之差就是该方波的周期(注意时间戳的单位是毫秒哦!)。
在中断服务函数中记录方波前沿和后延对应的时间戳,在主循环中计算方波频率。设置超时时间为1.5
秒(所以,测量最低范围是
1/1.5 Hz
),
1
秒钟打印一次测量频率。
现象:
我这边是通过CPLD
输出了频率为
100 Hz
的方波信号,和爱迪生共地后连接
IO8
,观察实验现象:
可以看到在控制台打印出了
方波频率!
步骤2:socket编程,网页设计,手机APP
客户端:
通过html
语言写一个静态网页,是这个样子的。
相当于web
前端开发,所以我们还需要用
CSS
和
JavaScript
来写两个文件。文件是在
XDK
的
Demo
程序里面改的,附件里可以看到工程文件。
服务器:
服务器这边我们用node.js
语言开发,
XDK
里面有个
Web Sockets
的
Demo
,如下图所示,一次点击
3
个红色方框,就可以建立起一个
Socket
通信程序。
在这个Demo
中修改,来实现自己的功能。
现象:
用户连接:可以显示当前和服务器(爱迪生)连接的客户端(网页)数量,从u0, u1, u2...
以此类推。
开关状态:通过鼠标点击蓝色方框内的“开关”来切换开关状态。
ON
或者
OFF
。
实时功率:测量用电器的实时功率。
所以,我们的爱迪生完成了两个工作,1
:采集用电器功率。
2
:充当
socket
通信服务器。监听它的某一个端口(本文设置为
3000
),浏览器访问爱迪生所在
ip
的
3000
端口,即可获取此页面。
这是我自己根据XDK Demo
程序修改而成的工程,还很粗糙。我的学长也写了一个逼格更高的网页端和手机
APP
,在腾讯云上租用了一个公网服务器,有一个静态
IP
,我用爱迪生采集功率信息上传到腾讯云上,浏览器或手机
APP
即可向服务器索要数据,实现开关功能,和用电器功率计量功能。下面上图!
Web端:
手机端:
三
演示视频及
项目总结
首先来几张安装示意图:
不会插入本地视频,我就把演示视频放在附件里面吧,供大家参考学习批评。
本项目如题所示,
完成了一个完整软硬件系统。硬件部分包括电源管理、功率计量、
PCB设计(涉及到开槽隔离等布线技巧)。软件部分包括socket通信编程,node.js, python, html, javascript, css, express等语言及框架。在试用的过程中,也学到了很多东西,希望分享给大家!
最后分享一句话:真正的科技是让人感觉不到科技的存在!