【软件篇】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等语言及框架。在试用的过程中,也学到了很多东西,希望分享给大家!
最后分享一句话:真正的科技是让人感觉不到科技的存在!