張 毅,馬子超,葉天翔
(重慶郵電大學 移動互聯網技術研究所,重慶 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.