摘 要:设计并实现了一种基于ARM9处理器的无线传感器网络嵌入式网关,用来完成Zigbee和GPRS之间数据的透明转换。节点以ARM9嵌入式处理器S3C2410为核心, ARM Linux为实时操作系统,并结合Zigbee模块JN5139和GPRS模块MC55实现采集数据的节点汇聚和远程转发,给出了网关节点的硬件组成结构和软件实现流程。
关键词:Zigbee; 嵌入式; GPRS; 网关
无线传感器网络WSN(Wireless Sensor Network)是指由大量成本相对低廉并且具有感知能力、计算能力、实时通信能力的传感器节点组成的嵌入式无线网络,是当前众多领域的研究和应用热点[1]。其应用已经由军事领域扩展到反恐、防爆、环境监测、医疗健康、工业控制等众多生活领域,并且能够完成由传统系统无法完成的任务。
在对特定领域(如油井、水文和环境等)的监测应用中,有时需要搭建Zigbee网络通过远程监测的方式实现对区域目标数据的采集,这就需要利用现有的网络基础设施对采集到的数据进行远程传输,此时网关节点在整个无线传感器网络体系中起着重要的枢纽作用,是系统设计的关键部分之一。本文从实现角度对无线传感器网络网关节点进行了研究,提出了基于GPRS模块的网关设计方案,实现了对Zigbee网络采集数据的远程传输。
1 网关系统总体结构
网关节点是无线传感器网络的控制中心,能够主动扫描其覆盖范围内的所有传感器节点,管理整个无线监测网络完整的路由表,接收来自其他节点的数据,并对数据进行校正、融合等处理,然后通过GPRS或以太网等网络基础设施发给远程监测中心;同时对于监控中心所发的指令给予相应的处理。网关节点通常连接两个或多个相互独立的网络,需要在传输层以上对不同的协议进行转换,因此对中央控制器的数据传输和运算能力有较高的要求。本文采用具有较强的信息处理能力和网络功能的ARM9系列芯片S3C2410作为控制器完成硬件系统的搭建。
本网关采用模块化设计方案,如图1所示由硬件层、软件层和应用层三大部分组成。硬件层描述了网关节点的硬件实现;软件层移植ARM Linux实时操作系统内核,实现Zigbee和GPRS协议的双向转换;应用层在Linux内核上开发相应的驱动程序和应用程序,实现对数据的高效转发。
2 网关硬件平台设计
网关节点硬件电路主要由控制器模块、存储单元、电源管理模块、传输通信模块和显示模块等组成,其硬件电路结构框图如图2所示。
2.1 控制器模块
主控制器是整个嵌入式网关的核心,用来对Zigbee通信模块进行相应配置并接收传感器节点的数据,通过AT指令初始化GPRS通信模块,利用PPP协议将网关节点连接到GPRS网络,获得网络运营商动态分配的IP地址,并与监控中心终端或服务器建立有效连接。为了达到高性能、低功耗的目的,设计的嵌入式网关采用以ARM920T为核心的32位的RISC微处理器S3C2410作为主控制器,该处理器集成了LCD控制器、USBHost、NAND控制器、BUS控制器、中断控制、功率控制、存储控制、UART、WatchDog、SPI、SDI/MMC、IS、IC、GPIO、RTC、TIMER/PWM、ADC等丰富的外围资源[2],通过外扩存储器、串口、JTAG调试接口等构建硬件平台。
2.2 电源管理模块
ARM处理器和Zigbee模块的供电电压为DC 3.3V,GPRS模块的电源范围为3.3V~4.8V,为了满足系统各部分供电要求,采用DC 5V作为电路板总体供电电源,该部分电路设计原理如图3所示。
为使电路简单,设计中一部分采用两个二极管1N5817串联的方法,将5.0V的供电电压降到合适的范围内供GPRS模块使用。两个二极管串联后的电压降大约为0.4V,这样GPRS模块的实际供电电压为4.6V,符合其供电要求。另一部分电路采用三端线性稳压芯片LM1117实现5.0V到3.3V的电压变换,对ARM处理器和Zigbee模块进行供电,为了减小杂波干扰,在LM1117芯片两端都加上0.1μF和100μF的电容进行滤波处理。
2.3 存储器模块
为充分发挥S3C2410的性能优势,设计中扩展了1片64MB的Flash芯片K9F1208和2片SDRAM芯片HY57V641620并联构建32位的SDRAM存储器系统。Flash存储器用来存放程序启动代码(Bootloader)、Linux内核映像和RAMDISK压缩映像,剩余的存储空间存放用户程序。SDRAM用来对操作系统和各类数据进行缓存,当系统启动时,CPU首先从复位地址0x0处读取启动代码,在完成系统的初始化后,程序代码调入SDRAM中运行,以提高系统的运行速度,同时系统及用户堆栈、运行数据也都存放在SDRAM中,为系统的高速运行提供足够的存储空间。
2.4 传输通信模块
该部分电路用来实现两种通信协议的透明转换,主要包括主控制器S3C2410与无线传感器网络连接的Zigbee模块通信的接口电路及与Internet连接的无线GPRS模块通信的接口电路设计。S3C2410具有三个通用异步串行接口,UART0是RS232接口,用来连接PC机,UART1和UART2是TTL接口,对其设置相应波特率后分别与Zigbee模块和GPRS模块相连传输数据。该部分电路连接原理图如图4所示。
2.4.1 Zigbee模块
Zigbee模块在网关节点上作为网络协调器负责各子传感器节点的通信管理、动态组网与数据传输。本设计采用Jennic公司的JN5139无线模块,JN5139是业界第一款兼容于IEEE802.15.4的低功耗、低成本无线微型控制器[3]。该模块与S3C2410的通信接口电路如图4所示,只需连接TXD0和RXD0两根信号线即可实现二者的数据传输通信。
2.4.2 GPRS模块
采用西门子的MC55 GPRS模块来实现采集数据的远程传输,MC55模块内嵌TCP/IP协议栈[4],降低了设计的难度, 同时大大提高了主控制器处理其他数据的能力。MC55与S3C2410的连接非常简单,如图4所示,二者可以通过标准的串口直接相连。值得注意的是,MC55模块串口部分的逻辑电平为+2.65V,不能直接与S3C2410的+3.3V串口相连,需要加逻辑电平转换电路,所以本设计在其各引脚电路中都串接了一个100Ω的电阻,以实现二者串口电平的匹配。MC55模块的RING0口与S3C2410的UCLK引脚相连,当数据到来时用来通知主控制器,作为数据传输的中断信号。
2.5 显示模块
S3C2410 内部集成有LCD控制器,为液晶显示器提供了时序信号、显示数据和接口电路,通过驱动芯片就可直接与不带控制器的液晶模块相连。系统采用128×64点阵LCD系列芯片HY12864,采用2片HD61202作为列驱动器,同时使用1片HD61203作为行驱动器。主控制器通过SPI接口来传输LCD的显示数据。HY12864具有功能强大的指令集,与主控制器的数据传输采用8位并行传输方式,片内Flash中存入了需要使用的字符库,通过调用LCD字符显示程序显示中英文字符,便于对子传感器节点数据的现场查询。
3 系统软件平台设计
开发平台采用开放源码的Linux操作系统,在其基础上完成各项相关应用程序的开发。软件主要由操作系统的裁剪与编译、驱动程序和系统主程序的编写三部分组成。
3.1 网关节点软件体系结构
网关是建立在传输层以上的协议转换器,通常它连接两个或多个相互独立的网络,每接收一种协议的数据包后,在转发之前将它转换为另一种协议的格式。本设计网关节点软件体系结构如图5所示。
Zigbee协议栈由一系列分层结构组成,包括物理层、数据链路层、网络层、应用支持层和应用层,每一层为上一层提供服务。采集节点将需要传输的节点地址信息和监测数据以Zigbee帧的形式打包发送给路由节点,再通过空中接口经过一跳或多跳将数据传送到网关节点。传输数据在通过物理介质进入网关后,先用Zigbee的协议栈解封装得到原始数据,网关节点可应用其操作系统上的应用软件根据需要对原始数据进行处理,处理后的数据再以TCP/IP协议打包后通过串口与GPRS通信模块相连,将数据通过空中接口Um传送到GPRS骨干网上。GPRS是一种基于IP的分组交换技术,在GSM网络的基础上增加了网关支持节点SGSN和服务支持节点GGSN两个网络核心实体[5]。GGSN在GPRS网络中主要起网关作用,MC55与GGSN通信采用点对点协议(PPP),使用PPP协议登录网关GGSN之后,MC55模块就转入在线模式(On-line),网关发送的所有数据通过MC55模块可以透明地传送给GGSN,从而实现WSN网关通过GGSN与Internet互联,最终根据IP地址将数据传送到监控中心。为实现系统的监测和控制两大功能,数据帧结构的设计由前导码、数据模式、目标地址、数据长度、数据信息与校验和等部分构成,其中数据信息字段又划分为方向位、功能类型和数据。方向位分为上行和下行两种,上行传输的是监测数据,下行传输的是控制命令。
3.2 嵌入式ARM Linux内核的裁减与编译
标准Linux内核对于嵌入式系统来说过于庞大,需要根据目标平台的具体情况对其进行裁剪和配置,去掉不需要的功能和代码,然后对内核重新编译生成内核映像文件。Linux内核移植过程如图6所示。
本设计中影响内核大小的因素主要有以下三个方面:
(1)裁剪Shell可执行应用程序
Linux系统中提供了非常丰富的shell应用程序,占用大量的存储空间。因此设计中使用BusyBox来替代shell应用程序,以有效地减小系统的体积。BusyBox是一个著名的开源项目,它把许多常用Unix/Linux的shell命令的简化版本组合成一个单独的小的可执行文件,并提供了一个 make menuconfig 的可视化配置界面,在界面中即可完成所需组件的选择,保存配置后直接执行make编译,就可在当前目录下生成可执行文件Busybox。
(2)裁剪配置文件
Linux系统中,/etc目录下包含许多必要的系统配置文件,它们用于配置系统初始化和运行文件。在嵌入式系统中,大部分文件都可以去掉,只保留几个必要的脚本文件,如inittab(Sysvinit进程配置文件)、rc.d/*(系统启动脚本)和fstab(文件系统信息)即可。
(3)裁剪设备驱动文件
标准Linux系统支持很多不同种类的硬件,/dev目录下存放着大量系统支持的硬件设备文件,但其中大多数都是根本用不到的。只保留系统必须的设备文件console、kmem、mem、null、ram、tty*、ttyS*、ptys*等,而并行口、即插即用设备、软驱、光驱、鼠标等驱动程序则可以裁剪掉。
裁剪完毕后使用/usr/src/linux的“make config”命令对内核进行配置,选择处理器类型、设置Flash/SDRAM相应的起始地址和大小、选择对字符设备驱动的配置、选择虚拟RAM盘文件系统支持和romfs文件系统支持。配置完成后执行“make dep”命令,创建内核依赖关系;执行“make zImage”命令,创建内核模块;执行“make modules” 和“make modules _install”命令,创建内核模块,完成编译工作。使用Flash烧写工具依次将BootLoader、编译后的内核及根文件系统烧写到Flash里,系统加电后ARM Linux就可以被引导启动。
3.3 系统主程序设计
网关的主要功能就是实现串口数据和网络数据的转发,移植Linux操作系统后,只需在操作系统上编写应用程序就可以实现网关的设计要求。应用程序主要包括串口数据收发程序和数据转发处理程序。软件采用模块化的设计方案,各功能子程序分开编写,以库的形式给出供主程序调用。MC55模块内置TCP/IP协议栈,提供了连接网络的API接口, 可通过AT指令直接对其进行网络配置[6],降低了设计的复杂度。GPRS通信部分以子程序的模式进行编写,供主程序调用,用来管理GPRS模块的初始化、网络激活、数据传输等相关操作。本文只介绍网关节点主程序结构,其程序流程图如图7所示。
系统上电后,首先启动Linux操作系统,初始化应用程序,选定一个PANID作为协调器的网络标识,创建路由表,建立Zigbee网络并通知其他节点加入。通过发送AT指令启动GPRS模块,设定串口的通信速率,建立socket连接准备数据通信。初始化完毕后监听网络,等候外部事件中断的产生,并通过判断响应的类型进行相应的数据转发动作。
本文提出了基于GPRS模块的无线传感器网络网关节点的设计和实现方案,该方案采用低功耗ARM处理器S3C2410为核心,利用内嵌TCP/IP协议栈的GPRS模块MC55为网络的数据出口,克服了传统网关架构下Zigbee传输速率的瓶颈。实验表明,该网关可靠性高、抗干扰能力强,同时具有很好的通用性,能够方便地应用于各种监测场合。
参考文献
[1] 王殊,阎毓杰,胡富平,等.无线传感器网络的理论及应用[M].北京:北京航空航天大学出版社,2007.
[2] SAMSUNG. S3C2410X 32-bit risc microprocessor user's manual revision 1.2.2003.
[3] JN-DS-JN513x v1.4.Jennic,Http://www.jennic.com.2007.
[4] SIEMENS. MC55/56 hardware interface description.2006.
[5] 钟章队,蒋文怡,李红君,等.GPRS通用分组无线业务[M].北京:人民邮电出版社,2001.
[6] 徐乐年,陈西广,甄雁翔,等. 基于GPRS的钻孔水文无线遥测系统[J]. 煤矿安全, 2007(8):47-50.