龚 正,张正华,刘云云,钱怡恬,徐 杰,苏 权
(1.扬州大学 信息工程学院,江苏 扬州 225127;2.扬州国脉通信发展有限责任公司,江苏 扬州 225007)
现今,物联网技术得到了迅猛发展,与此相关的技术,如RFID、无线传感器网络[1]也得到了快速发展。ZigBee技术因其具有高可靠性、低成本、低功耗和高安全性等特性,被广泛运用在短距离无线通信领域,如家庭自动化[2]、商业楼宇自动化以及无线传感器网络等。
城市建设方面,路边车位的检测和野外停车收费等通过人工费时费力,如果通过传感器技术实现智能识别车位、远距离查询和缴费,将大大减少人力、财力的支出并推动智能城市交通的建设。
传统农业方面,由于主要使用没有通信能力且孤立的设备,往往通过人力来检测农田的土质状况、作物生长状况等。如果采用ZigBee技术,可以轻松地实现作物各个生长阶段的监控,用ZigBee网络[3]进行无线传输,用户只需在家中即可实时监控,这将极大地促进农业现代化的进程。
类似的分布在野外的无线传感器网络节点往往数量巨大,且由电池供电[4],通常需要长时间的持续工作,并应用于无人值守、不便更换传感器节点电池的地方。本文构建基于ZigBee星型网络拓扑结构[5]的无线数据采集系统,将协调器置于无人机上,设计空中网关,无人机飞过各个节点上方有效区域完成唤醒和自组网,采集数据并依靠无线模块将数据传回监控中心。
在监测区域布设数据采集节点,节点组成监测网络,根据不同的传感器配置,网络可以监测不同的物理参数。监测网络以一定频率将采集到的数据上传到空中协调器网关,协调器网关通过串口与WiFi模块进行通信,将采集到的数据发送到Android端。系统体系结构如图1所示。
图1 系统体系结构
ZigBee组网[6]的初始化在于终端节点不断地去查找周围网络,并发出请求,等待协调器的回应。因此最重要的只有2个函数:一是任务初始化工作函数GenericApp_Init,包括硬件初始化工作和网络初始化工作等等;二是事件处理函数GenericApp_ProcessEvent,事件(定时器到达事件,收到消息事件,网络组网成功事件)都在这里面处理。
对于任何的ZigBee网络都是协调器发起的。故ZigBee组网时首先要确认网络协调器。其次对信道进行扫描,最后设置网络ID作为标识符,即PAN ID(Personal Area Networks)[7]。
待ZigBee协调器建立网络后,终端节点可以申请加入网络。终端节点会自动扫描周围网络中的协调器的信标帧。当终端节点检测到信标,就向协调器发送连接请求。协调器为之分配16位网络地址,经过确认后,终端节点成功加入。
协调器是整个ZigBee无线网络的核心,本文设计节点采用CC2530芯片。其支持 IEEE 标准,拥有较大的快闪记忆体,性能强劲功耗小,适用于组建ZigBee网络[9]。
无线以太网技术遵从1997年IEEE发布的802.11协议[10],这是在无线局域网领域内的第一个国际上被认可的协议,2年后提出的802.11b“HighRate”协议是对802.11协议的补充说明,同时也提高了WiFi 的网络吞吐量[11]。
WiFi 与蓝牙都遵从无线通信网络标准,一般工作在ISM 2.4 GHz的公共频段范围[12],但是蓝牙属于WPAN无线个域网,即点对点通信,WiFi 属于WLAN无线局域网,多个终端同时传输的网络模式,而这也是选择WiFi 的一个重要原因。
本文设计采用ESP8266,它是一个完整且自成体系的 WiFi 网络解决方案,能够独立运行,在搭载应用并作为设备中唯一的应用处理器时,能够直接从外接闪存中启动。内置的高速缓冲存储器有利于提高系统性能,并减少内存需求。
安装Android Studio[13],之所以使用这个工具,是它内置了许多主流的版本控制系统,可以直接检出和导出项目,使用起来非常方便。
协调器主要负责网络的组件维护和数据处理的工作,主要工作流程如图2所示。
图2 协调器主要工作流程
在初始化的过程中,主要工作是在协议栈的任务初始化函数和任务处理函数设置相对应的程序。
协调器部分程序代码:
UINT16GenericApp_ProcessEvent(bytetask_id,UINT16 events)
{
afIncomingMSGPacket_t*MSGpkt;
if (events& SYS_EVENT_MSG)
{
MSGpkt=afIncomingMSGPacket_t*)osal_msg_receive(GenericApp_TaskID);
while (MSGpkt)
{switch (MSGpkt->hdr.event)
{
case ZDO_STATE_CHANGE:
GenericApp_NwkState=(devStates_t)(MSGpkt->hdr.status);
if((GenericApp_NwkState== DEV_ZB_COORD)∥建立网络
{}
break;
协调器与WiFi模块通信时,要用到Zstack提供的串口用户函数:HalUARTInit()来初始化串口,并设置相关参数,通过HalUARTOpen()打开串口,调用HalUARTRead()和HalUARTWrite()分别对串口进行读写操作。
UDP(用户数据报协议)是一个面向用户数据报的运输层协议。相较于TCP/IP协议,UDP在传输数据报前并不用建立相互连接,也没有超时后重发等机制,故传输速度很快。传输传感器节点采集数据是实时采集,因此数据量大、发送频率高,为了能够实时、快速并且成本低地发送数据,UDP协议是不二之选。
协调器在将数据封装[14]之后通过串口传递给WiFi模块,进行再次封装。关于UDP(用户数据报)传输协议,每个UDP报文由UDP报头和UDP数据区2部分组成。UDP报头还有4个域,其中每个域各占2个字节,具体是:源端口号,目标端口,数据报长度以及检验值。封装格式如图3所示。
图3 UDP数据帧格式
为实现终端节点周期性的采集上报,需设置一个定时器,本系统定时了一个2 s的定时器。定时器事件触发以后开始采集上报,上报完成后再设置一个定时使其2 s之后再次采集上报,以此实现周期的采集上报。
传感器采集到的是数据值,当它传输到协调器时,需加上数据帧头、设备类型、节点网络位置、父节点网络位置、传感器数据和数据帧尾等信息,然后分别将信息放入对应的位置,再广播数组地址和长度,以此实现数据的上传。终端节点的主要工作流程如图4所示。
图4 终端节点主要工作流程
部分定时器函数:
if (events&SEND_DATA_EVENT)
{
seneTemp()
sendHum()
osal_start_timerEx(GenericApp_TaskID,SEND_DATA_EVENT,2000);
return (events^SEND_DATA_EVENT);
}
部分温度检测函数:
VoidsendTemp(void)
{
RFTXrftx;
uint16 tempvalue;
uint16 nwk;
tempvalue=readTemp();
rftx.BUF.value[0]=’W’;∥温度
rftx.BUF.value[1]=tempvalue /10+’0’;
rftx.BUF.value[2]=tempvalue %10+’0’;
rftx.BUF.value[3]=’*’;
osal_memcpy(rftx.BUF.head,”&&”,2);∥填充命令头
}
If (GenericApp_NwkState==DEV_END_DEVICE)
{
osal_memcpy(rftx.BUF.type,”END”,3);
}
nwk=NLME_GETShortAddr();∥获取节点网络地址
Tostring(rftx.BUF.myNWK,(uint8*)&nwk,2);∥将网络地址以16进制形式输出
nwk=NLME_GETCoordShortAddr();
Tostring(rftx.BUF.pNWK,(uint8*)&nwk,2);
rftx.BUF.tail =’&’;∥填充命令尾
}
WiFi模块将打包好的数据包发送出去,Android设备中的应用需调用WiFi设备并连接于同一个网络下。首先需要构建UDP Socket Server:public UDPSocketServer(int port,intsocketTimeout,Context context),接着接收UDP数据包:public synchronized void receive(DatagramPacket p),接收到UDP数据包后进行解包,并进行数据抽离操作。应用后台程序在接收到数据时用public byte[ ]receiveSpecLenBytes(intlen)将数据转化为String类型数据,此时后台已经得到了监测环境中终端节点感知到的环境数据,在Android 应用的组件中填入数据就能实现客户端的监测功能。
携带网关的无人机飞到指定的区域,与分布的节点自组网。每个端节点每隔2 s采集一次温湿度数据并通过无线网络发送给空中协调器节点。协调器节点通过WiFi模块将数据发送到Android端App,并可通过App发送反馈控制命令控制节点的执行器。采集的监测数据监控测试截图如图5所示。
图5 Android监控端
实验结果表明,本文系统组网流畅,数据采集及反馈控制功能正常。相较于普通的数据采集系统,实时查询与控制更为简单,数据的读取更加清晰。
本文提出的基于ZigBee的空中网关自组网设计,实现了唤醒自组网,完成了基于Z-Stack的软件设计,并对温湿度数据进行了成功的采集和反馈控制。实验结果表明,系统可以在很大程度上解决分散的传感器数据采集困难的问题,与传统的数据采集分析方式相比,减少了人工成本,便利性得到了极大的提高,对改善工作效率有重大的现实意义。
[1] 冯培昌,周晓云,陈孝伟.无线传感器网络探讨[J].电气自动化,2005,27(5):73-75.
[2] 沈星星,丛露微.基于Zigbee的智能家居控制系统[J].论文选粹,2011(3):1-3.
[3] KINNEY P.ZigBeetechnology:Wirelesscontrol that Simply Works[EB/OL].[2014-12].∥https:∥www.hometoys.com/content.php?url=/htinews/oct03/articles/kinney/zigbee.htm
[4] 李忍忍,张正华,吕东方.基于CC2530的无线传感器节点的设计及性能分析[D].扬州:扬州大学,2017.
[5] 蒋挺,赵成林.紫峰技术及其应用[M].北京:北京邮电大学出版社,2006.
[6] FARAHANI S.Zigbee Wireless Networks and Transceivers[M].USA:Elsevier,2008.
[7] 冯培昌,周晓云,陈孝伟.无线传感器网络探讨[J].电气自动化,2005,27(5):73-75.
[8] 李海,薛海伟.物联网ZigBee网关的设计与实现[J].价值工程,2014(31):227-228.
[9] Texas Instrument.CC2530 User’s Guide[M].Dallas:Texs Instrument Corporation,2009:16-19.
[10] SALMAN N,RASOOLI,KEMP A H.Overview of the IEEE 802.15.4 Standards Family for Low Rate Wireless Personal Area Networks[J].Wireless Communication Systems,2010(7):19-22.
[11] 景慧燕.一种嵌入式移动视频监控系统的设计[J].电视技术.2005(11):91-93.
[12] 金纯,贾珍梅,刘鲁云,等.基于CC2540的超低功耗蓝牙模块的设计[J].电视技术,2015,39(1):60-64.
[13] 马越.Android的架构与应用[D].北京:中国地质大学,2008:9-18.
[14] 周怡颋,凌志浩,吴勤勤.Zigbee无线通信技术及其应用探讨[J].自动化仪表,2005,26(6):5-9.