基于Android的无线传感器网络代码更新系统设计
2018-01-09钱欢施伟斌
钱欢+施伟斌
摘要:随着Android设备普及率日益上升及广泛应用,将Android设备作为物联网终端已成为发展趋势。为了弥补PC端在更新无线传感器网络代码时移动不便的缺点,结合Android平台与无线传感器网络技术,设计一种在Android设备端利用蓝牙通信远程控制代码分发的无线传感器网络代码更新系统。传感器节点基于存储空间较小的CC2430芯片,使用轻量级操作系统TinyOS作为分发协议的开发环境,使得系统占用硬件资源少。实验证明,利用蓝牙技术与无线传感器网络分发技术可较好地实现网络节点的代码更新。该系统能方便快速地实现整个网络的代码更新,可推广到实际应用中。
关键词:无线传感器网络;Android;TinyOS;CC2430
DOIDOI:10.11907/rjdk.171977
中图分类号:TP319
文献标识码:A 文章编号:1672-7800(2017)012-0125-03
Abstract:Within creasing market share and application of Android device and rise of IoT, a code update system is designed for wireless sensor network based on Android developing technology, in which a Android device can be operated to update the code of nodes.The CC2430 based sensor node, of which the flash space is small, is developed with light weight operating system TinyOS for code distribution in order to consume less hardware resources. The experiment shows the system can conveniently and quickly implement the function of code update, which could be promoted to more practical application.
Key Words:wireless sensor network; Android; TinyOS; CC2430
0 引言
随着通信技术、嵌入式技术、传感器技术的迅速发展与日趋成熟,具备通信能力、计算能力及感知能力的微型传感器节点开始在世界范围内涌现。数目众多的传感器节点协同工作,随机分布于监测区域周遭环境,通过自组织的无线通信方式构成传感器网络(Wireless Sensor Network, WSN)[1]。WSN技术广泛应用于智能家居、智能穿戴设备、环境监测、医疗卫生以及城市交通等领域[2]。WSN节点部署完毕后经常需要增加一些新功能或者修复软件中存在的问题,需要对整个网络进行代码更新,通过人工方式手动地对所有节点编程,是一项非常耗时、耗力的工作,为此在WSN中需要一种有效的方法能够通过无线方式对节点进行远程更新[3]。文献[2-7]均对无线传感器网络代码更新技术进行了相关研究与改进。WSN接入互联网的瓶颈是网关,将Android平台引入WSN,可以利用Android平台接入互联网的接口实现WSN接入互联网 [8]。无线传感器网络的网关节点通常采用232串口或USB接口上传相关信息,本设计WSN网关节点通过蓝牙模块连接Android设备,利用蓝牙技术与Android设备进行信息交互,有效避开了网关设计中的软硬件屏障,既可以方便实现任一种无线传感器网络终端数据接入互联网,又可以方便远程对无线传感器网络进行代码更新。
1 系统设计
远程代码更新系统以硬件可以划分为3个部分:上位机、网关节点、传感器节点。此系统上位机采用Android平台, 网关节点与传感器节点的核心芯片均采用TI公司生产的微控制类型的CC2430芯片,且网关节点佩戴了蓝牙通信模块,用于与Android设备进行通信[11]。本设计采用内置128kB型号的芯片,以便能够存放多个版本的应用程序。基于此硬件平台,节点程序选用加州大学伯克利分校设计的TinyOS操作系统进行程序设计[9]。编译器首先将NesC文件翻译为C语言文件,再利用交叉編译器对C语言文件进行编译链接,最终得到iHex(IntelHex)文件,将iHex文件利用互联网通过Android平台下载至CC2430后即可运行。
TinyOS操作系统自带两种分发协议:Trickle协议[10]与Deluge协议,本设计结合这两种协议实现代码分发。 Trickle数据分发协议适用于少量数据的分发,代码更新系统中需要有数据对网络进行控制,控制字的数据量一般较小,使用该协议可以达到较为理想的效果。传输整个程序代码,需要利用Deluge代码分发协议的分页技术完成,保证完整数据的传输工作。
为了能实现代码的远程更新,需要对3部分进行逐一设计,最终使得代码能完整地从上位机传至网关节点,再从网关节点分发至整个网络。代码更新过程如图1所示: 在上位机上可以分发待更新程序,通过蓝牙串口烧写至网关节点;上位机通过蓝牙串口可以向网关节点发送分发指令,网关节点收到指令后,将指令消息广播至整个网络;节点1、2利用分发协议先接收到完整程序,启用新版本程序;节点3从节点2接收新版本程序,并重启更新。
上位机软件使用Java语言编程,上位机程序共需要完成两部分功能,首先将iHex文件发送至网关节点,其次需要给网关节点发送控制命令,控制整个网络的分发状态。
网关节点使用nesC编程,负责接收上位机发送的新版本程序,接收上位机发送的控制命令,作出相应的响应,解析上位机发送新版本程序的命令,负责将新版本程序分发至各个传感器节点。
传感器节点的程序又分为2个部分,前者是运行程序部分。启动引导部分负责各版本之间的切换工作,在分发过程中,程序会对版本启动信息进行修改,在启动过程中读取启动信息,跳转到特定版本的运行程序。后者包含正常的采集数据或其它节点功能程序,还包含分发协议。在运行过程中,节点功能程序与分发协议互不干扰。
1.1 上位机
上位机软件是Android平台应用,在Androidstudio开发环境下编写,主要功能是与网关节点的蓝牙模块进行通信[12]。Android蓝牙相关的类与接口位于Android.bluetooth包中,Android的应用程序框架提供了访问蓝牙功能的APIs。应用程序界面可以分为蓝牙设备连接、接收区和发送区3个部分。 选择相应iHex程序文件,在发送区会列出所选择的文件,点击发送将文件发送至网关节点。更新文件发送完毕后,使用发送命令进行代码分发控制。控制命令需要设置命令字、分发版本ID以及分发版本大小,各参数按照顺序逐一发送。
1.2 网关节点
网关节点使用hc-06蓝牙通信模块与Android设备进行通信,而网关节点与蓝牙通信模块通过UART通信。网关节点与传感器节点均采用NesC语言进行编程,网关节点负责与上位机通过串口进行通信,将新版本代码临时存放到Flash内,由上位机发送控制命令后,将存储的新版本代码通过分发协议分发至各个节点。
在网关节点启动后,首先开启串口通信功能,等待上位机发送数据或指令。Flash及串口管理模块将会响应上位机指令,接收每一串数据的流程如图2所示,接收到数据后该模块判断是数据还是指令,字符‘:代表数据,字符‘c代表命令,然后转入对应状态。若接收到的是‘:,进入读取数据信息状态,数据信息包括数据长度、地址类型以及数据类型,从串口读取一个字符代表数据长度,接着读取两个字符代表数据地址,再读取一个字符代表数据类型,以上读取的数据顺序与iHex文件的格式相对应。之后进入读取数据状态,以接收到的数据长度接收要下载的代码数据,并且接收一个字符的校验码,通过校验后利用Flash模块,写入串口接收到的对应地址位置。在网关节点中,将从上位机接收到的程序临时放置到0x18000开始至0x1FFF0(映射地址)的位置,即放入Flash中的Bank3中。当完成Flash写操作时,向上位机发送反馈,等待接收下一条数据。同时将接收状态恢复为初始状态。
若从串口接收到了控制命令字符,则进入接收控制命令状态。接收命令字,命令字包含3个信息:待分发数据的版本信息、待分发数据的大小、控制字。控制字中包含3个功能:分发新程序、停止分发、重启网关节点。
若接收到重启指令,则调用重启模块提供的功能。重启模块实现了软复位功能,利用看门狗超时自动复位的原理,设置一个超时时间极短的看门狗,调用while(1)循环,不对看门狗进行喂食,到了超时时间芯片会自动复位。
若接收到分发或停止指令,首先利用Trickle协议分发控制命令。在分发命令的情况下,调用完毕Trickle模块后,网关节点进入分发模式。在停止分发指令下,则停止分发功能,暂停一切维护和分发操作。
1.3 传感器节点
节点核心cc2430内置128kB片内Flash,本设计充分利用该Flash实现代码更新系统。为了实现代码更新,将Flash的4个Bank发分为两大部分,如图3所示,Bank0作为Bootloader,用于引导启动,每当节点启动时,首先运行Bootloader程序,利用Bootloader程序引导跳转到正确的运行程序。引导程序读取存放于0x6FF0地址上的引导信息,从引导信息中得到运行版本所在Bank,根据版本信息对寄存器进行设置,并引导节点跳转到相应的版本。Bank1~3作为各个版本的存放位置,每个Bank可存放一个版本的内容,可同时存在3个不同版本的程序。
2 代码更新测试实验
实验采用一个网关节点、多个传感器节点。传感器节点分布在网关节点周围。分发代码的大小为28.25kB,传感器节点数量从1个逐步增加至16个。网关节点通过上位机接收指令,进行分发。图4表示分发至不同数量节点所需使用的时间。当更新一个节点时需使用的时间为143s,随着节点数量的增多,分发时间略有下降,时间稳定在120s左右。由于传感器节点发送请求的等待时间是随机的,当节点数量增多时,总体请求时间会相对缩短,从而
使分发速度变得更快。
当传感器节点数量增加到11个后,分发速度显著下降。由于无线信道的稳定性比有线传输差,当节点增多时,丢包的可能性增大,即重传的次数增多,导致分发速度下降。
3 结语
本文设计了一种由Android移动端控制分发的无线传感器网络代码更新系统,网关节点通过蓝牙模块与移动设备连接进行数据通信,打破了传统无线传感器网络代码更新系统中串口或USB接口等有线通信方式对网关节点布置的限制,符合今后无线传感器网络网关节点更加智能、便携的发展方向。传感器节点选用 CC2430硬件平台,在TinyOS软件平台中进行分发协议的开发,可较好地使用于单跳网络,并可支持多跳网络的更新,能保证节点完成代码更新功能。
参考文献:
[1] ESTRIN D, GOVINDAN R, HEIDEMANN J, et al. Next century challenges:scalable coordination in sensor networks[C]. ACM/IEEE International Conference on Mobile Computing and Networking, 2001:263-270.
[2] 李丽娜.无线传感器网络代码更新技术研究[D].哈尔滨:哈尔滨工业大学, 2006.
[3] 张国萍.无线传感器网络在线代码分发最新研究进展[J].浙江理工大学学报,2015,33(2):219-227.
[4] 任万春,马廷淮,刘琦.一种基于多播分发树的无线传感器网络代码分发协议[J].传感器與微系统,2014,33(11):149-152.
[5] 侯彤.无线传感器网络空中加载技术的研究[D].西安:西安电子科技大学, 2011.
[6] 吴涛,施伟斌,张磊.基于CC2430的代码更新系统设计[J].电子科技,2017,30(1):123-125.
[7] 王海勇,杨庚,许建,等.一种低能耗的代码分发协议[J].计算机工程,2012,38(23):84-87.
[8] 乔雷.基于Android和蓝牙串口的WSN网关的设计和实现[D].西安:西安工业大学,2013.
[9] UNIVERSITY OF CALIFORNIA AT BERKELEY. TinyOS document [EB/OL]. http://tinyos.stanford.edu/tinyos-wiki/index.php/TinyOS_Tutorials.
[10] PHILIP L, NEIL P, SCOTT S, et al. Trickle: a self-regulating algorithm for code propagation and maintenance in wireless sensor networks[R]. Technical report, California: Universityof California at Berkeley, 2003.
[11] 肖蓉.基于Android平台的无线传感器网络与蜂窝网络网关系统设计与实现[D].上海:华东师范大学,2012.
[12] 张元亮. Android开发应用实战详解[M].北京:中国铁道出版社,2011.
(责任编辑:何 丽)