摘 要: 設(shè)計(jì)并實(shí)現(xiàn)了一種基于ARM9處理器的無線傳感器網(wǎng)絡(luò)嵌入式網(wǎng)關(guān),,用來完成Zigbee和GPRS之間數(shù)據(jù)的透明轉(zhuǎn)換。節(jié)點(diǎn)以ARM9嵌入式處理器S3C2410為核心, ARM Linux為實(shí)時(shí)操作系統(tǒng),,并結(jié)合Zigbee模塊JN5139和GPRS模塊MC55實(shí)現(xiàn)采集數(shù)據(jù)的節(jié)點(diǎn)匯聚和遠(yuǎn)程轉(zhuǎn)發(fā),,給出了網(wǎng)關(guān)節(jié)點(diǎn)的硬件組成結(jié)構(gòu)和軟件實(shí)現(xiàn)流程。
關(guān)鍵詞: Zigbee,; 嵌入式,; GPRS; 網(wǎng)關(guān)
無線傳感器網(wǎng)絡(luò)WSN(Wireless Sensor Network)是指由大量成本相對(duì)低廉并且具有感知能力,、計(jì)算能力,、實(shí)時(shí)通信能力的傳感器節(jié)點(diǎn)組成的嵌入式無線網(wǎng)絡(luò),是當(dāng)前眾多領(lǐng)域的研究和應(yīng)用熱點(diǎn)[1],。其應(yīng)用已經(jīng)由軍事領(lǐng)域擴(kuò)展到反恐,、防爆,、環(huán)境監(jiān)測(cè)、醫(yī)療健康,、工業(yè)控制等眾多生活領(lǐng)域,并且能夠完成由傳統(tǒng)系統(tǒng)無法完成的任務(wù),。
在對(duì)特定領(lǐng)域(如油井、水文和環(huán)境等)的監(jiān)測(cè)應(yīng)用中,,有時(shí)需要搭建Zigbee網(wǎng)絡(luò)通過遠(yuǎn)程監(jiān)測(cè)的方式實(shí)現(xiàn)對(duì)區(qū)域目標(biāo)數(shù)據(jù)的采集,,這就需要利用現(xiàn)有的網(wǎng)絡(luò)基礎(chǔ)設(shè)施對(duì)采集到的數(shù)據(jù)進(jìn)行遠(yuǎn)程傳輸,此時(shí)網(wǎng)關(guān)節(jié)點(diǎn)在整個(gè)無線傳感器網(wǎng)絡(luò)體系中起著重要的樞紐作用,,是系統(tǒng)設(shè)計(jì)的關(guān)鍵部分之一,。本文從實(shí)現(xiàn)角度對(duì)無線傳感器網(wǎng)絡(luò)網(wǎng)關(guān)節(jié)點(diǎn)進(jìn)行了研究,提出了基于GPRS模塊的網(wǎng)關(guān)設(shè)計(jì)方案,實(shí)現(xiàn)了對(duì)Zigbee網(wǎng)絡(luò)采集數(shù)據(jù)的遠(yuǎn)程傳輸。
1 網(wǎng)關(guān)系統(tǒng)總體結(jié)構(gòu)
網(wǎng)關(guān)節(jié)點(diǎn)是無線傳感器網(wǎng)絡(luò)的控制中心,,能夠主動(dòng)掃描其覆蓋范圍內(nèi)的所有傳感器節(jié)點(diǎn),,管理整個(gè)無線監(jiān)測(cè)網(wǎng)絡(luò)完整的路由表,接收來自其他節(jié)點(diǎn)的數(shù)據(jù),,并對(duì)數(shù)據(jù)進(jìn)行校正,、融合等處理,然后通過GPRS或以太網(wǎng)等網(wǎng)絡(luò)基礎(chǔ)設(shè)施發(fā)給遠(yuǎn)程監(jiān)測(cè)中心,;同時(shí)對(duì)于監(jiān)控中心所發(fā)的指令給予相應(yīng)的處理,。網(wǎng)關(guān)節(jié)點(diǎn)通常連接兩個(gè)或多個(gè)相互獨(dú)立的網(wǎng)絡(luò),需要在傳輸層以上對(duì)不同的協(xié)議進(jìn)行轉(zhuǎn)換,,因此對(duì)中央控制器的數(shù)據(jù)傳輸和運(yùn)算能力有較高的要求,。本文采用具有較強(qiáng)的信息處理能力和網(wǎng)絡(luò)功能的ARM9系列芯片S3C2410作為控制器完成硬件系統(tǒng)的搭建。
本網(wǎng)關(guān)采用模塊化設(shè)計(jì)方案,,如圖1所示由硬件層,、軟件層和應(yīng)用層三大部分組成。硬件層描述了網(wǎng)關(guān)節(jié)點(diǎn)的硬件實(shí)現(xiàn),;軟件層移植ARM Linux實(shí)時(shí)操作系統(tǒng)內(nèi)核,,實(shí)現(xiàn)Zigbee和GPRS協(xié)議的雙向轉(zhuǎn)換;應(yīng)用層在Linux內(nèi)核上開發(fā)相應(yīng)的驅(qū)動(dòng)程序和應(yīng)用程序,,實(shí)現(xiàn)對(duì)數(shù)據(jù)的高效轉(zhuǎn)發(fā),。
2 網(wǎng)關(guān)硬件平臺(tái)設(shè)計(jì)
網(wǎng)關(guān)節(jié)點(diǎn)硬件電路主要由控制器模塊、存儲(chǔ)單元,、電源管理模塊,、傳輸通信模塊和顯示模塊等組成,其硬件電路結(jié)構(gòu)框圖如圖2所示,。
2.1 控制器模塊
主控制器是整個(gè)嵌入式網(wǎng)關(guān)的核心,,用來對(duì)Zigbee通信模塊進(jìn)行相應(yīng)配置并接收傳感器節(jié)點(diǎn)的數(shù)據(jù),通過AT指令初始化GPRS通信模塊,利用PPP協(xié)議將網(wǎng)關(guān)節(jié)點(diǎn)連接到GPRS網(wǎng)絡(luò),,獲得網(wǎng)絡(luò)運(yùn)營(yíng)商動(dòng)態(tài)分配的IP地址,,并與監(jiān)控中心終端或服務(wù)器建立有效連接,。為了達(dá)到高性能、低功耗的目的,,設(shè)計(jì)的嵌入式網(wǎng)關(guān)采用以ARM920T為核心的32位的RISC微處理器S3C2410作為主控制器,,該處理器集成了LCD控制器、USBHost,、NAND控制器,、BUS控制器、中斷控制,、功率控制,、存儲(chǔ)控制,、UART,、WatchDog、SPI,、SDI/MMC,、IS、IC,、GPIO,、RTC、TIMER/PWM,、ADC等豐富的外圍資源[2],,通過外擴(kuò)存儲(chǔ)器、串口,、JTAG調(diào)試接口等構(gòu)建硬件平臺(tái),。
2.2 電源管理模塊
ARM處理器和Zigbee模塊的供電電壓為DC 3.3V,GPRS模塊的電源范圍為3.3V~4.8V,,為了滿足系統(tǒng)各部分供電要求,,采用DC 5V作為電路板總體供電電源,該部分電路設(shè)計(jì)原理如圖3所示,。
為使電路簡(jiǎn)單,,設(shè)計(jì)中一部分采用兩個(gè)二極管1N5817串聯(lián)的方法,將5.0V的供電電壓降到合適的范圍內(nèi)供GPRS模塊使用,。兩個(gè)二極管串聯(lián)后的電壓降大約為0.4V,,這樣GPRS模塊的實(shí)際供電電壓為4.6V,符合其供電要求,。另一部分電路采用三端線性穩(wěn)壓芯片LM1117實(shí)現(xiàn)5.0V到3.3V的電壓變換,,對(duì)ARM處理器和Zigbee模塊進(jìn)行供電,為了減小雜波干擾,,在LM1117芯片兩端都加上0.1μF和100μF的電容進(jìn)行濾波處理,。
2.3 存儲(chǔ)器模塊
為充分發(fā)揮S3C2410的性能優(yōu)勢(shì),,設(shè)計(jì)中擴(kuò)展了1片64MB的Flash芯片K9F1208和2片SDRAM芯片HY57V641620并聯(lián)構(gòu)建32位的SDRAM存儲(chǔ)器系統(tǒng)。Flash存儲(chǔ)器用來存放程序啟動(dòng)代碼(Bootloader),、Linux內(nèi)核映像和RAMDISK壓縮映像,,剩余的存儲(chǔ)空間存放用戶程序。SDRAM用來對(duì)操作系統(tǒng)和各類數(shù)據(jù)進(jìn)行緩存,,當(dāng)系統(tǒng)啟動(dòng)時(shí),,CPU首先從復(fù)位地址0x0處讀取啟動(dòng)代碼,在完成系統(tǒng)的初始化后,,程序代碼調(diào)入SDRAM中運(yùn)行,,以提高系統(tǒng)的運(yùn)行速度,同時(shí)系統(tǒng)及用戶堆棧,、運(yùn)行數(shù)據(jù)也都存放在SDRAM中,,為系統(tǒng)的高速運(yùn)行提供足夠的存儲(chǔ)空間。
2.4 傳輸通信模塊
該部分電路用來實(shí)現(xiàn)兩種通信協(xié)議的透明轉(zhuǎn)換,,主要包括主控制器S3C2410與無線傳感器網(wǎng)絡(luò)連接的Zigbee模塊通信的接口電路及與Internet連接的無線GPRS模塊通信的接口電路設(shè)計(jì),。S3C2410具有三個(gè)通用異步串行接口,UART0是RS232接口,,用來連接PC機(jī),,UART1和UART2是TTL接口,對(duì)其設(shè)置相應(yīng)波特率后分別與Zigbee模塊和GPRS模塊相連傳輸數(shù)據(jù)。該部分電路連接原理圖如圖4所示,。
2.4.1 Zigbee模塊
Zigbee模塊在網(wǎng)關(guān)節(jié)點(diǎn)上作為網(wǎng)絡(luò)協(xié)調(diào)器負(fù)責(zé)各子傳感器節(jié)點(diǎn)的通信管理,、動(dòng)態(tài)組網(wǎng)與數(shù)據(jù)傳輸。本設(shè)計(jì)采用Jennic公司的JN5139無線模塊,,JN5139是業(yè)界第一款兼容于IEEE802.15.4的低功耗,、低成本無線微型控制器[3]。該模塊與S3C2410的通信接口電路如圖4所示,,只需連接TXD0和RXD0兩根信號(hào)線即可實(shí)現(xiàn)二者的數(shù)據(jù)傳輸通信,。
2.4.2 GPRS模塊
采用西門子的MC55 GPRS模塊來實(shí)現(xiàn)采集數(shù)據(jù)的遠(yuǎn)程傳輸,MC55模塊內(nèi)嵌TCP/IP協(xié)議棧[4],,降低了設(shè)計(jì)的難度, 同時(shí)大大提高了主控制器處理其他數(shù)據(jù)的能力,。MC55與S3C2410的連接非常簡(jiǎn)單,如圖4所示,,二者可以通過標(biāo)準(zhǔn)的串口直接相連,。值得注意的是,MC55模塊串口部分的邏輯電平為+2.65V,,不能直接與S3C2410的+3.3V串口相連,,需要加邏輯電平轉(zhuǎn)換電路,所以本設(shè)計(jì)在其各引腳電路中都串接了一個(gè)100Ω的電阻,,以實(shí)現(xiàn)二者串口電平的匹配,。MC55模塊的RING0口與S3C2410的UCLK引腳相連,,當(dāng)數(shù)據(jù)到來時(shí)用來通知主控制器,作為數(shù)據(jù)傳輸?shù)闹袛嘈盘?hào),。
2.5 顯示模塊
S3C2410 內(nèi)部集成有LCD控制器,,為液晶顯示器提供了時(shí)序信號(hào)、顯示數(shù)據(jù)和接口電路,,通過驅(qū)動(dòng)芯片就可直接與不帶控制器的液晶模塊相連,。系統(tǒng)采用128×64點(diǎn)陣LCD系列芯片HY12864,采用2片HD61202作為列驅(qū)動(dòng)器,,同時(shí)使用1片HD61203作為行驅(qū)動(dòng)器,。主控制器通過SPI接口來傳輸LCD的顯示數(shù)據(jù)。HY12864具有功能強(qiáng)大的指令集,,與主控制器的數(shù)據(jù)傳輸采用8位并行傳輸方式,,片內(nèi)Flash中存入了需要使用的字符庫,通過調(diào)用LCD字符顯示程序顯示中英文字符,,便于對(duì)子傳感器節(jié)點(diǎn)數(shù)據(jù)的現(xiàn)場(chǎng)查詢,。
3 系統(tǒng)軟件平臺(tái)設(shè)計(jì)
開發(fā)平臺(tái)采用開放源碼的Linux操作系統(tǒng),在其基礎(chǔ)上完成各項(xiàng)相關(guān)應(yīng)用程序的開發(fā),。軟件主要由操作系統(tǒng)的裁剪與編譯、驅(qū)動(dòng)程序和系統(tǒng)主程序的編寫三部分組成,。
3.1 網(wǎng)關(guān)節(jié)點(diǎn)軟件體系結(jié)構(gòu)
網(wǎng)關(guān)是建立在傳輸層以上的協(xié)議轉(zhuǎn)換器,,通常它連接兩個(gè)或多個(gè)相互獨(dú)立的網(wǎng)絡(luò),每接收一種協(xié)議的數(shù)據(jù)包后,,在轉(zhuǎn)發(fā)之前將它轉(zhuǎn)換為另一種協(xié)議的格式,。本設(shè)計(jì)網(wǎng)關(guān)節(jié)點(diǎn)軟件體系結(jié)構(gòu)如圖5所示。
Zigbee協(xié)議棧由一系列分層結(jié)構(gòu)組成,,包括物理層,、數(shù)據(jù)鏈路層、網(wǎng)絡(luò)層,、應(yīng)用支持層和應(yīng)用層,,每一層為上一層提供服務(wù)。采集節(jié)點(diǎn)將需要傳輸?shù)墓?jié)點(diǎn)地址信息和監(jiān)測(cè)數(shù)據(jù)以Zigbee幀的形式打包發(fā)送給路由節(jié)點(diǎn),,再通過空中接口經(jīng)過一跳或多跳將數(shù)據(jù)傳送到網(wǎng)關(guān)節(jié)點(diǎn),。傳輸數(shù)據(jù)在通過物理介質(zhì)進(jìn)入網(wǎng)關(guān)后,先用Zigbee的協(xié)議棧解封裝得到原始數(shù)據(jù),,網(wǎng)關(guān)節(jié)點(diǎn)可應(yīng)用其操作系統(tǒng)上的應(yīng)用軟件根據(jù)需要對(duì)原始數(shù)據(jù)進(jìn)行處理,,處理后的數(shù)據(jù)再以TCP/IP協(xié)議打包后通過串口與GPRS通信模塊相連,將數(shù)據(jù)通過空中接口Um傳送到GPRS骨干網(wǎng)上,。GPRS是一種基于IP的分組交換技術(shù),,在GSM網(wǎng)絡(luò)的基礎(chǔ)上增加了網(wǎng)關(guān)支持節(jié)點(diǎn)SGSN和服務(wù)支持節(jié)點(diǎn)GGSN兩個(gè)網(wǎng)絡(luò)核心實(shí)體[5],。GGSN在GPRS網(wǎng)絡(luò)中主要起網(wǎng)關(guān)作用,MC55與GGSN通信采用點(diǎn)對(duì)點(diǎn)協(xié)議(PPP),,使用PPP協(xié)議登錄網(wǎng)關(guān)GGSN之后,,MC55模塊就轉(zhuǎn)入在線模式(On-line),網(wǎng)關(guān)發(fā)送的所有數(shù)據(jù)通過MC55模塊可以透明地傳送給GGSN,,從而實(shí)現(xiàn)WSN網(wǎng)關(guān)通過GGSN與Internet互聯(lián),,最終根據(jù)IP地址將數(shù)據(jù)傳送到監(jiān)控中心。為實(shí)現(xiàn)系統(tǒng)的監(jiān)測(cè)和控制兩大功能,,數(shù)據(jù)幀結(jié)構(gòu)的設(shè)計(jì)由前導(dǎo)碼,、數(shù)據(jù)模式、目標(biāo)地址,、數(shù)據(jù)長(zhǎng)度,、數(shù)據(jù)信息與校驗(yàn)和等部分構(gòu)成,其中數(shù)據(jù)信息字段又劃分為方向位,、功能類型和數(shù)據(jù),。方向位分為上行和下行兩種,上行傳輸?shù)氖潜O(jiān)測(cè)數(shù)據(jù),,下行傳輸?shù)氖强刂泼睢?nbsp;
3.2 嵌入式ARM Linux內(nèi)核的裁減與編譯
標(biāo)準(zhǔn)Linux內(nèi)核對(duì)于嵌入式系統(tǒng)來說過于龐大,,需要根據(jù)目標(biāo)平臺(tái)的具體情況對(duì)其進(jìn)行裁剪和配置,去掉不需要的功能和代碼,,然后對(duì)內(nèi)核重新編譯生成內(nèi)核映像文件,。Linux內(nèi)核移植過程如圖6所示。
本設(shè)計(jì)中影響內(nèi)核大小的因素主要有以下三個(gè)方面:
(1)裁剪Shell可執(zhí)行應(yīng)用程序
Linux系統(tǒng)中提供了非常豐富的shell應(yīng)用程序,,占用大量的存儲(chǔ)空間,。因此設(shè)計(jì)中使用BusyBox來替代shell應(yīng)用程序,以有效地減小系統(tǒng)的體積,。BusyBox是一個(gè)著名的開源項(xiàng)目,,它把許多常用Unix/Linux的shell命令的簡(jiǎn)化版本組合成一個(gè)單獨(dú)的小的可執(zhí)行文件,并提供了一個(gè) make menuconfig 的可視化配置界面,,在界面中即可完成所需組件的選擇,,保存配置后直接執(zhí)行make編譯,就可在當(dāng)前目錄下生成可執(zhí)行文件Busybox,。
(2)裁剪配置文件
Linux系統(tǒng)中,,/etc目錄下包含許多必要的系統(tǒng)配置文件,它們用于配置系統(tǒng)初始化和運(yùn)行文件,。在嵌入式系統(tǒng)中,,大部分文件都可以去掉,只保留幾個(gè)必要的腳本文件,如inittab(Sysvinit進(jìn)程配置文件),、rc.d/*(系統(tǒng)啟動(dòng)腳本)和fstab(文件系統(tǒng)信息)即可,。
(3)裁剪設(shè)備驅(qū)動(dòng)文件
標(biāo)準(zhǔn)Linux系統(tǒng)支持很多不同種類的硬件,/dev目錄下存放著大量系統(tǒng)支持的硬件設(shè)備文件,,但其中大多數(shù)都是根本用不到的,。只保留系統(tǒng)必須的設(shè)備文件console、kmem,、mem,、null、ram,、tty*,、ttyS*、ptys*等,而并行口,、即插即用設(shè)備,、軟驅(qū)、光驅(qū),、鼠標(biāo)等驅(qū)動(dòng)程序則可以裁剪掉,。
裁剪完畢后使用/usr/src/linux的“make config”命令對(duì)內(nèi)核進(jìn)行配置,選擇處理器類型,、設(shè)置Flash/SDRAM相應(yīng)的起始地址和大小,、選擇對(duì)字符設(shè)備驅(qū)動(dòng)的配置、選擇虛擬RAM盤文件系統(tǒng)支持和romfs文件系統(tǒng)支持,。配置完成后執(zhí)行“make dep”命令,,創(chuàng)建內(nèi)核依賴關(guān)系;執(zhí)行“make zImage”命令,,創(chuàng)建內(nèi)核模塊;執(zhí)行“make modules” 和“make modules _install”命令,,創(chuàng)建內(nèi)核模塊,,完成編譯工作。使用Flash燒寫工具依次將BootLoader,、編譯后的內(nèi)核及根文件系統(tǒng)燒寫到Flash里,,系統(tǒng)加電后ARM Linux就可以被引導(dǎo)啟動(dòng)。
3.3 系統(tǒng)主程序設(shè)計(jì)
網(wǎng)關(guān)的主要功能就是實(shí)現(xiàn)串口數(shù)據(jù)和網(wǎng)絡(luò)數(shù)據(jù)的轉(zhuǎn)發(fā),,移植Linux操作系統(tǒng)后,,只需在操作系統(tǒng)上編寫應(yīng)用程序就可以實(shí)現(xiàn)網(wǎng)關(guān)的設(shè)計(jì)要求。應(yīng)用程序主要包括串口數(shù)據(jù)收發(fā)程序和數(shù)據(jù)轉(zhuǎn)發(fā)處理程序,。軟件采用模塊化的設(shè)計(jì)方案,,各功能子程序分開編寫,以庫的形式給出供主程序調(diào)用。MC55模塊內(nèi)置TCP/IP協(xié)議棧,,提供了連接網(wǎng)絡(luò)的API接口, 可通過AT指令直接對(duì)其進(jìn)行網(wǎng)絡(luò)配置[6],,降低了設(shè)計(jì)的復(fù)雜度。GPRS通信部分以子程序的模式進(jìn)行編寫,,供主程序調(diào)用,,用來管理GPRS模塊的初始化、網(wǎng)絡(luò)激活,、數(shù)據(jù)傳輸?shù)认嚓P(guān)操作,。本文只介紹網(wǎng)關(guān)節(jié)點(diǎn)主程序結(jié)構(gòu),其程序流程圖如圖7所示,。
系統(tǒng)上電后,,首先啟動(dòng)Linux操作系統(tǒng),初始化應(yīng)用程序,,選定一個(gè)PANID作為協(xié)調(diào)器的網(wǎng)絡(luò)標(biāo)識(shí),,創(chuàng)建路由表,建立Zigbee網(wǎng)絡(luò)并通知其他節(jié)點(diǎn)加入,。通過發(fā)送AT指令啟動(dòng)GPRS模塊,,設(shè)定串口的通信速率,建立socket連接準(zhǔn)備數(shù)據(jù)通信,。初始化完畢后監(jiān)聽網(wǎng)絡(luò),,等候外部事件中斷的產(chǎn)生,并通過判斷響應(yīng)的類型進(jìn)行相應(yīng)的數(shù)據(jù)轉(zhuǎn)發(fā)動(dòng)作,。
本文提出了基于GPRS模塊的無線傳感器網(wǎng)絡(luò)網(wǎng)關(guān)節(jié)點(diǎn)的設(shè)計(jì)和實(shí)現(xiàn)方案,,該方案采用低功耗ARM處理器S3C2410為核心,利用內(nèi)嵌TCP/IP協(xié)議棧的GPRS模塊MC55為網(wǎng)絡(luò)的數(shù)據(jù)出口,克服了傳統(tǒng)網(wǎng)關(guān)架構(gòu)下Zigbee傳輸速率的瓶頸,。實(shí)驗(yàn)表明,,該網(wǎng)關(guān)可靠性高、抗干擾能力強(qiáng),,同時(shí)具有很好的通用性,,能夠方便地應(yīng)用于各種監(jiān)測(cè)場(chǎng)合。
參考文獻(xiàn)
[1] 王殊,,閻毓杰,,胡富平,等.無線傳感器網(wǎng)絡(luò)的理論及應(yīng)用[M].北京:北京航空航天大學(xué)出版社,,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] 鐘章隊(duì),蔣文怡,李紅君,等.GPRS通用分組無線業(yè)務(wù)[M].北京:人民郵電出版社,2001.
[6] 徐樂年,,陳西廣,,甄雁翔,等. 基于GPRS的鉆孔水文無線遙測(cè)系統(tǒng)[J]. 煤礦安全, 2007(8):47-50.