摘 要: 設計并實現了一種基于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.