张 毅,马子超,叶天翔
(重庆邮电大学 移动互联网技术研究所,重庆 400065)
目前,感知化、互联化、物联化的大趋势正在发生。国内外已将物联网解决方案广泛应用于环保、反恐、医疗、监控等众多领域,由于物联网感知层中无线传感技术种类繁多(如蓝牙、ZigBee、RFID、NFC等),协议不一,适用的场所也各不相同,使得无线传感器网络的异构性十分突出。
3G移动通信网络在国内已基本完成覆盖,范围触及社会生活的方方面面,与2G移动通信网络相比,具备更丰富的功能和更出色的灵活性,将3G移动通信网络与传感器网络融合起来,可以为物联网中多种不同速率、不同业务类型的应用提供更适合的网络传输平台[1]。
基于以上考虑,本文设计一种面向物联网的3G网关,将传感系统和3G网络结合起来,用以解决异构传感器网络的数据汇聚和传感信息的3G传输[2],实现协同感知,广域传输,对于推动物联网发展和丰富3G应用具有一定的现实意义。
网关是在传输层以上实现异构网络间的通信、负责网络间的协议转换以及不同类型网络的数据传输的设备。为了提高网关的灵活性,实现即插即用,采用模块化设计思想。本设计的网关体系结构主要由ARM处理器(LPC3250)、蓝牙/ZigBee数据采集模块、3G通信模块(MC2716)组成。网关体系结构如图1所示。
网关基本工作流程:
网关可以实时感知来自传感器网络的信息(数据流),并接收来自客户端的控制信息(控制流),实现对无线传感器网络的实时感知与控制。蓝牙/ZigBee数据采集节点作为传感器网络的枢纽,将传感信息实时上传并保存在存储模块中。网关通过3G通信模块拨号连接3G移动通信网络,在成功获得IP地址后,建立Socket服务器,监听来自不同平台的客户端连接请求(如PC、移动电话等)。一旦连接建立,即将来自蓝牙/ZigBee数据采集节点的信息发送至客户端。同时,服务器可以检测到客户端发送的控制流,将控制信息通过蓝牙/ZigBee数据采集节点传达至传感器网络目标节点,实现对传感器网络的控制。
控制器是整个网关体系结构的核心,负责数据汇聚、数据采集、数据处理、数据转发等关键处理,本设计采用NXP半导体带有ARM926EJ-S CPU内核的LPC3250,该系列ARM运用了NXP半导体在降低功耗方面的技术专长,优化内部功率消耗。CPU时钟运行速率可以达到266 MHz,具有32 kbyte指令高速缓存和32 kbyte数据高速缓存,高达256 kbyte的内部SRAM,同时该系列ARM带有一系列丰富的标准外设资源,如Multi-layer总线系统,2个NAND Flash控制器,1个支持Device、Host(遵循OHCI规范)、On-The-Go的USB2.0接口,多达7路串口(4个标准UART,3个高速UART),以及以太网、I2C、I2S等接口。
综上所述,该控制器模块具备较强的数据处理能力和丰富的外设资源,支持Linux操作系统,可以满足方案的设计目标。
本设计中的数据采集模块有两种:蓝牙数据采集模块和ZigBee数据采集模块。
蓝牙数据采集模块采用汇承信息科技有限公司的HC-05蓝牙串口模块,该模块采用CSR BC4+8M Flash方案(8M代表8 Mbyte),协议版本为Bluetooth Specification V2.0 With EDR,2.4 GHz无线收发,CLASS 2功率级别,采用自适应跳频技术,具备低功耗、低成本、高性能的特点,配合处理器即可方便地构建蓝牙传感器网络。蓝牙数据采集模块在蓝牙传感器网络中的角色为从机,负责监听远程蓝牙设备主机的链接请求,并执行接收数据、断开链接等操作。
ZigBee数据采集模块采用TI/Chipcon公司开发的2.4 GHz IEEE 802.15.4/ZigBee片上系统解决方案CC2430/CC2431,具备高速、超低功耗的8051内核、最高128 kbyte的大容量闪存、8 kbyte SRAM、250 kbit/s高速无线通信接口,模块采用DSSS频谱传输,自动调频,防冲突,防碰撞,从而提高了无线数据传输的可靠性。ZigBee数据采集模块通过串口与微控制器连接,在ZigBee自组织网络中担任协调器的角色,负责启动、配置网络,在网络启动和配置完成后,退化为一个普通路由器,实时将传感器网络中的信息上报至网关。
该部分用于实现不同通信协议间信息的传输,主要包括控制器模块与数据采集模块之间的串口连接和控制器模块与3G通信模块间的USB接口连接。
控制器LPC3250具备的7路串口中,UART3/4/5/6为普通串口,本设计中UART5为系统调试串口,分别将UART3和UART4连接至ZigBee数据采集模块和蓝牙数据采集模块。LPC3250具备一路USB 2.0接口,将其与3G通信模块连接。
目前国内的3G网络主要有CDMA2000,WCDMA和TD-SCDMA这3种制式,对应有3种不同制式的3G模块,考虑到CDMA20003G模块拨号后获得的是公网IP,不需要进行NAT穿越即可访问外网,本设计采用中兴公司的MC2716 CDMA20003G通信模块[3-4]。
考虑到网关应具有开放和可移植特性,软件平台采用开放源码的Linux操统系统,由于Linux操作系统具有高度模块化和高度可移植性,在其基础上完成应用程序的编写即可实现设计目标,软件平台的设计主要包括配置和编译Linux操作系统、嵌入式Linux操作系统的移植、PPP协议的移植、CDMA2000拨号脚本的编写、通信协议的制订及系统主程序设计[5]。
由于网关采用Linux操作系统和模块化的设计思想,软件体系分为操作系统和应用系统两部分,体系结构如图2所示。
为了实现网关功能,需要配置并添加两部分Linux内核支持:3G通信模块内核支持和PPP协议内核支持。
3.2.1 添加3G通信模块内核支持
输入make menuconfig进入Linux图形内核配置界面,在Device Driver选项,将以下选项编译进内核。
USB support子选单下:
图2 软件体系结构图
以上配置完成后,将MC27163G通信模块的PID:0x19d2和VID:0xffed添加入linux-2.6.27.8/drivers/usb/se⁃rial/option.c文件的option_ids[]数组中。至此,完成了Linux内核对MC27163G通信模块的支持。
3.2.2 添加PPP协议内核支持
输入make menuconfig命令进入Linux图形内核配置界面,进入Network device support选项,将以下选项编译进内核:
至此,完成了Linux内核对PPP协议的支持。
设计中使用的 Linux 内核版本 2.6.27.8,为了生成U-Boot格式的内核文件,将u-boot中的mkimage程序复制到系统的目录/usr/bin中,然后在内核源代码目录输入make uImage,编译配置好的Linux内核,之后在/arch/arm/boot目录下会生成uImage文件。
在ARM9硬件平台上安装嵌入式Linux操作系统,大致分为5个步骤,依次为固化Kickstart和S1L、固化U-Boot、配置和编译Linux内核、固化Linux内核以及固化Linux文件系统。
网络上介绍嵌入式Linux操作系统移植的教程已较为丰富,由于篇幅限制,在此不再赘述。
将编译好的Linux操作系统移植成功之后,通过USB接口连接3G通信模块和控制器模块,控制终端完成对USB设备3G模块的枚举后,可以识别出/dev/ttyUSB0至ttyUSB3的4个不同的虚拟串口。其中ttyUSB0为Modem拨号端口,用于实现拨号上网,ttyUSB1为AT命令通道端口,用于实现网关信息的短信通知。
由于Linux操作系统本身并没有PPP软件支持,需要进行PPP拨号套件移植。PPP软件可以在PPP的官方FTP下载,这里使用的版本为ppp-2.4.5.tar.gz。
将此压缩文件包解压后进入文件目录,执行./config⁃ure命令,完成后执行命令make CC=/opt/nxp/gcc-4.3.2-glibc-2.7/bin/arm-vfp-linux-gnu-gcc进行交叉编译(此处需要使用和编译内核及文件系统同一个版本的交叉编译器)。编译成功之后,将pppd目录下的可执行文件pppd和chat目录下的可执行文件chat拷贝到ARM平台的/usr/sbin/目录下。
至此完成PPP拨号套件的移植工作。
在完成Linux内核支持和PPP拨号套件移植之后,还需要在ARM平台侧建立、配置拨号脚本,才能实现拨号上网。由于篇幅限制,在此仅给出各个拨号脚本的作用。
/etc/ppp/peers/cdma2000用于建立连接、质量控制、配置网络层协议。脚本中包括了用于连接的设备,波特率,接受服务器指定的IP地址、DNS地址,连接/断开拨号脚本等内容。
/etc/ppp/chat/cdma2000-connect-chat用于AT拨号连接,首先发出AT指令,等待OK返回后,设置拨号上网的APN、账号、密码等。
/etc/ppp/chat/cdma2000-disconnect-chat用于断开AT拨号连接。
此时,在ARM控制平台输入命令pppd call cdma 2000,运行拨号脚本即可实现嵌入式平台的3G网络拨号连接,同时获得一个公网IP地址。
为了完成对来自传感器网络的数据的采集和汇聚,需要设计一个合适的通信协议来保证数据传输的完整性和可靠性,本设计中使用的数据帧结构如:
上述程序中:SensorNetworkType表示传感器网络类型(0x00表示蓝牙,0x01表示ZigBee);NodeType表示传感器网络不同的节点角色类型;NodeId表示传感器网络中某一个节点的标号;FunctionId表示定义好的功能码;OperationCode表示定义好的操作码;DataLength表示DataBuffer中数据的长度;DataBuffer[]用于存储来自传感器网络中各种传感器的数据。
在设计中,传感器网络按照此通信协议将信息上报至网关,网关按照通信协议对数据进行汇聚、解析、转发。
在硬件平台上移植Linux操作系统成功后,编写应用软件即可实现网关功能。网关的主要功能有网关信息通知、串口接收和数据转发3部分,软件设计采用模块化设计思想,各部分子程序分开编写,供主程序调用。
由于网关每次拨号后会随机获取一个IP地址,需要有一种途径使网关的使用者在网关重置后,即时获取网关的IP地址、端口号等信息,在此通过AT指令,采用主动通知与查询通知两种方式。主动通知即每次网关重置后,以短信的形式将网关信息(IP地址,端口号等)发送至特定号码;查询通知即网关在运行过程中,如收到来自某一号码的网关信息查询请求短信,将向此号码发送网关的信息。
串口接收指实时接收来自传感器网络的信息,主要涉及对Linux串口的配置操作。
数据转发部分依赖Socket网络编程实现,通过3G模块拨号获得IP后,在网关侧建立Socket服务器,这样从用户的角度来看,只需要获得Socket服务器的IP地址和端口号,可以方便地使用笔记本电脑、智能手机等多种平台的终端设备建立与网关Socket服务器的连接。在编写Socket服务器的过程中,采用了多线程技术,使得服务器可以同时处理多个客户请求,极大地提高了网关的数据处理能力和响应速度。系统主程序流程图如图3所示。
图3 网关主程序流程图
本文将无线传感器技术、嵌入式操作系统和3G通信技术结合起来,设计了一种面向物联网的嵌入式3G网关,实现了异构无线传感器网络的数据汇聚,3G移动通信网络进行数据转发和多种终端平台支持。该网关具有数据处理能力强、数据传输速率快、实时性较好、无须布线等特点,对物联网中丰富的应用提供了支持,具备较好的应用价值。
[1]巩浩,屈玉贵.基于短距无线通信与3G的无线集中抄表系统[J].计算机工程,2011(1):290-292.
[2]曾桂根,吴霜.基于嵌入式Linux的3G接入方案的设计与实现[J].计算机技术与发展,2010(9):193-196.
[3]ZTE Corporation.MC2700 technical specification[EB/OL].2011-02-02].http://wenku.baidu.com/view/fe0b491052d380eb62946d66.html?from=related.
[4]ZTE Corporation.MC2716 MC2718 technical specifications and hardware design[EB/OL].[2011-02-02].http://www.headele.com/Datasheet/EVDO/MC2716&MC2718% 20Technical% 20Specifica⁃tions%20and%20Hardware%20Design.pdf.
[5]SWEET M R.Serial programming guide for POSIX operating systems[EB/OL].[2011-03-02].http://www.easysw.com/~mike/serial/serial.html.