苑臣芒
摘 要:在互联网快速发展的潮流下,物联网以及嵌入式的开发也在快速发展,传统的开发方式逐渐被新型物联网嵌入式开发所替代,node.js也在“机缘巧合”下和嵌入式碰出了火花。本论文以node.js和JavaScript技术为背景,以MCS云远程控制LED的实例为支撑,介绍了一种基于node.js物联网嵌入式开发的新方法,为开源软硬件生态注入新的血液。
关键词:node.js;widora;JavaScript;MT7688;openwrt;物联网;linux
中图分类号: TP393.09 文献标识码: A 文章编号: 1673-1069(2016)10-178-3
1 什么是node.js
提到node.js,就不得不先提一下JavaScript(以下简称js)。我们不要被js的外表迷惑,其实js和java一丁点关系都没有。js是一种最基础的网络脚本语言,用于web应用开发,通常是被嵌入在HTML中以实现自身的功能。所以js只能在浏览器中运行。但2009年出现的node.js彻底改变了这一局面,使得js可以脱离浏览器,在node.js引擎中运行,似乎这还不足以激动人心,但node.js一重磅功能是使js运行于服务端!这无疑对前端开发工程师们有里程碑的意义,终于可以平滑的接触node.js后端开发了。这些似乎看起来和嵌入式八竿子打不着。但由于node.js引擎跨平台特性,理所当然的在嵌入式平台上运行起来,并且提供了事件驱动,非阻塞I/O模型,轻量,高效,跨平台等优秀特性,适应了新型物联网嵌入式开发的潮流。
2 物联网嵌入式开发现状和困境
我们知道,物联网嵌入式开发都是以具体的求功能为出发点,在某个具体平台上实现功能代码,开发上特点也很鲜明:
a入门门槛较高,知识点非常零散。
b平台依赖很强,换平台比较痛苦。
c开发中出现的问题较难定位,往往涉及多个技术层面协同工作。
d公司多选择闭源,对整体软硬件生态的贡献接近于零,阻碍了开源的发展。
e实践多于理论,此领域的大牛多是不断地编程、验证、思考等一步一步成长起来的,几乎没有捷径。
嵌入式开发的这些特点就注定了它的神秘、难度大、团队作战。然而,开发者们总是不会拒绝更简单的语言、更友好的封装、更易用的平台的。如何更快的将创意变为现实?在国外,以Raspberry Pi为代表的微型卡片电脑使得神秘的嵌入式平台更加平易近人,它在卡片大小的体积上提供了完整的电脑的功能,可以开发多种应用程序和丰富功能的硬件产品,正由于其高度的软硬件整合使得大大降低了开发门槛,让创业者可以轻松的将创意转化为现实,甚至儿童都可以在其上边实现自己的想法。还有以Arduino为代表的入门平台使得微控制器开发变得极为简单,比如拿读取温度传感器的数据来说,在普通单片机上实现可能需要半天时间,而在Arduino上可能只需10分钟。对于小白来讲,使用Arduino大大降低了开发难度。反观国内这一领域起步较晚,有个别嵌入式板卡供应商在陆续转向这个方向。例如friendlyarm出品的nanoPI系列开源硬件、Firefly出品的四核卡片电脑开源平台Fireprime。随着国内开源软硬件的增多,国内对整个开源生态的贡献逐步加大,开源的思路和跨平台的方式逐步被越来越多的开发者青睐,笔者认为这和传统嵌入式开发已经有足够的区别,暂且称为“新型物联网开发”,归纳出了以下几个特点:
a由“支持网络”上升到“基于网络”。
b软硬件高度整合,将复杂的底层处理隐藏起来,留给用户友好的API。
c扩展变得极其简单,就像电脑上安装软件一样。
d设备互联更重要,甚至可随处推送并部署代码,随处访问。
e一般会有社区、github、wiki等伴随成长。
3 基于node.js的新型物联网开发框架
目前流行的新型物联网框架有iot.js、Duktape、tessel、Three.js、icoolpy、johnny-five、linkit等等,且绝大部分新型物联网开发框架不约而同的選择了node.js平台为核心。Widora就是这样一个初生的极简开源硬件,基于MT7688 MIPS CPU运行OpenWrt系统,也正在融入JavaScript带来的基于WEB的新型物联网生态。
js俨然成为WEB世界里的“二进制”,另外Widora提供了MT7688以及OpenWrt Chaos Calmer操作系统,等同于打包了底层软硬件。这中间缺了一道“桥梁”就是node.js运行时,在Widora联网的情况下,只需要一条“#opkg install node”命令安装node.js和npm让这个桥梁架设起来。
4 基于node.js新型开发方式案例:云端控制LED实例
我们通过联发科MCS云平台和Widora开源硬件创建一个可以云端远程控制的LED,来展示如何通过node.js实现远程网络数据控制功能,以及如何用这种全新的开发方式实现。大致的架构如下:
在MCS云端建立一个“widora”原型,并添加一个叫“switch1”的测试装置,新增资料通道类型选择为“开关”,创建完会得到DeviceId 和DeviceKey,这两个标识很重要,本地的应用程序会用到。此时应该会看到一个“开关”的标志,证明MCS端的控制已经就绪。
本地硬件使用的是Widora开源硬件,以板载的WLED灯为控制目标。板载了OpenWrt-Chaos Calmer(Linux)操作系统,故本地需要开发一个JavaScript的应用程序连接MCS云获取数据,进而本地处理数据。由于本地需要和MCS云连接,故本地要用到mcsjs模块,在Widora上可以通过#npm install mcsjs提前安装一下。本次应用程序设计的流程图如下:
该程序中,需要先调用mcsjs模块的register方法将预先获取的DeviceID和DeviceKEY注册并TCP长连接到MCS云,进而注册一个监听事件对接收到的数据进行判断。核心就是数据的一个处理。首先本地的打开和关闭LED使用shell命令即可,具体命令是:
5 总结
通过使用了MCS云平台和Widora展示的云端控制LED实例,在不足20行代码的情况下完成了C语言数百行才能做到的事情,并且整个开发没有碰触到Linux驱动层或Linux本身系统层的难点,在该实例的背后,有相当多的基础服务、基础平台的支撑,才得以使上层开发如此简单。今后的新型物联网嵌入式,开发方式一定是朝着抽象化、简单化、层次化的方向衍变,并且可能会派生出更多类似node.js的平台,我们相信国内会有更多的开源爱好者加入到新型物联网嵌入式的开发潮流,为整体软硬件生态做出更多贡献。
参 考 文 献
[1]王健,宋颖慧,向建军.远程无线多路视频处理系统设计与实现[J].测控技术,2013(12).
[2]钟莉萍,张永军,顾畹仪.智能家居网关服务器软件设计与实现[J].中南大学学报(自然科学版),2013(S1).
[3]王苏苏.基于ARM嵌入式智能家居系统的设计与实现[J].无线互联科技,2013(05).