朱俊光,高 健,田 俊,趙 敏,戚海峰,謝亞卓,莊建軍
(南京大學 電子科學與工程學院電工電子實驗中心,江蘇 南京 210023)
一切生命體賴以生存的環(huán)境中必不可少的元素除了合適的光照、水分、空氣、養(yǎng)料,還有環(huán)境的溫濕度。環(huán)境溫濕度對農(nóng)業(yè)、醫(yī)藥業(yè)、氣象業(yè)、食品行業(yè)、工控行業(yè)等都有極其重要的影響。因此設計出一種溫濕度實時監(jiān)測的系統(tǒng),并能方便地為人們所掌握顯得尤其重要。另外,隨著互聯(lián)網(wǎng)的不斷發(fā)展壯大,新一代的網(wǎng)絡——物聯(lián)網(wǎng)[1],即物物相連的互聯(lián)網(wǎng)應運而生。物聯(lián)網(wǎng)有著極大的發(fā)展?jié)摿?,可以給人類的生活環(huán)境帶來更多的快捷,而且方便與智能[2-3]。
隨著物聯(lián)網(wǎng)技術(shù)最近幾年的迅速發(fā)展,無線傳感網(wǎng)技術(shù)進入應用階段[4-7]。本文在充分研 究 ZStack協(xié)議棧、嵌入式開發(fā)以及網(wǎng)頁設計的基礎上進行了綜合設計,即首先利用無線傳感網(wǎng)中的ZigBee技術(shù),在底層建立短距離無線傳感網(wǎng)并實現(xiàn)采樣數(shù)據(jù)傳輸,將底層數(shù)據(jù)傳輸至上層的嵌入式網(wǎng)關平臺,對數(shù)據(jù)進行加工處理,通過驅(qū)動平臺中的LCD屏幕來提供一個友好的UI界面,方便人們實時觀察溫濕度,并在嵌入式平臺上搭建服務器,利用 WiFi來訪問相應的動態(tài)數(shù)據(jù)網(wǎng)頁,從而實現(xiàn)實時監(jiān)測環(huán)境溫濕度的變化。
按照由下至上的順序?qū)⒄麄€系統(tǒng)分為3個大模塊,即底層數(shù)據(jù)采集模塊、中間層數(shù)據(jù)傳輸模塊和上層數(shù)據(jù)處理模塊。
底層模塊由溫濕度傳感器SHT11和TI公司的ZigBee芯片CC2530構(gòu)成,由CC2530控制傳感器檢測環(huán)境溫濕度,并作為無線傳感網(wǎng)中的節(jié)點模塊。中間層數(shù)據(jù)傳輸模塊由兩塊CC2530構(gòu)成,分別作為ZigBee網(wǎng)絡中節(jié)點和協(xié)調(diào)器自動組網(wǎng),無線傳輸溫濕度數(shù)據(jù),并在協(xié)調(diào)器一端將數(shù)據(jù)通過異步串口通信交由嵌入式網(wǎng)關平臺處理。上層數(shù)據(jù)處理模塊為整個嵌入式網(wǎng)關平臺,所需用到資源有核心板(搭載ARM11架構(gòu)的S3C6410微處理器、256MB Mobile DDR、128 MB NAND Flash)、DM9000A10/100MB網(wǎng)卡、真彩色寬屏LCD和USB無線網(wǎng)卡。最后還需搭建實驗環(huán)境中的局域網(wǎng),利用WiFi加入無線局域網(wǎng),利用網(wǎng)內(nèi)設備進行測試,其系統(tǒng)結(jié)構(gòu)框圖見圖1示。
圖1 系統(tǒng)結(jié)構(gòu)框圖
溫濕度傳感器SHT11為瑞士Sensirion公司設計的數(shù)字式溫濕度傳感器,具有全量程標定,兩線數(shù)字輸出;濕度測量范圍0~100%RH,溫度測量范圍-40~+123.8℃,濕度測量精度±3.0%RH,溫度測量精度±0.4℃[8]。作為ZigBee模塊的CC2530具有射頻收發(fā)器產(chǎn)品中的許多優(yōu)良性能。
CC2530內(nèi)部集成了一塊具有增強型的8051處理器,一塊可讀寫的Flash閃存,一定大小的內(nèi)存塊以及大量其他功能模塊。為了簡化開發(fā),使用CC2530支持的Z-Stack網(wǎng)絡協(xié)議棧,它是由TI開發(fā)的遵循Zig-Bee協(xié)議規(guī)范的網(wǎng)絡協(xié)議棧[9]。
為了開發(fā)調(diào)試的需要,將宿主機的串口分別與嵌入式平臺和CC2530相連接,實現(xiàn)將調(diào)試信息通過串口打印在宿主機上。另外,利用以太網(wǎng)接口將開發(fā)板與宿主機兩端用網(wǎng)線互聯(lián),因為在使用NFS、TFTP服務或者其他一些網(wǎng)絡服務時要用到。通過USB-A轉(zhuǎn)Mini連接宿主機與ZigBee模塊,用于向其下載調(diào)試程序。
根據(jù)各個模塊的具體實現(xiàn)功能的不同,按照由下至上的順序分別予以設計。
這部分工作主要是對ZigBee節(jié)點內(nèi)部的單片機模塊進行編程。首先考慮到CC2530有3個8位端口組成,端口1、2、3分別用P0,P1,P2來表示,其中,P0和P1是完全的8位端口,而P2僅有5位可用。所有的端口均可以通過SFR寄存器P0、P1和P2位尋址和字節(jié)尋址。傳感器芯片只提供2個I/O端口:DATA和SCK,前者為數(shù)據(jù)輸入輸出端口,后者為只可輸入的時鐘信號端口。因此將P0_0與SCK相連以提供時鐘序列,P0_1與DATA相連以讀寫溫濕度數(shù)據(jù)。
在了解硬件連接基礎上對數(shù)據(jù)采集模塊進行軟件設計,程序由3部分構(gòu)成:
(1)主函數(shù)部分:首先調(diào)用函數(shù)初始化串口通信以及溫濕度傳感器,然后調(diào)用函數(shù)獲取溫濕度數(shù)據(jù),最后將數(shù)據(jù)處理后調(diào)用串口控制函數(shù),打印調(diào)試信息。
(2)溫濕度傳感器控制部分:具體實現(xiàn)初始化傳感器函數(shù),即設置P0端口的相關寄存器;實現(xiàn)獲取溫濕度數(shù)據(jù)的函數(shù),根據(jù)傳感器資料說明,端口按照一定時序發(fā)出特定的序列即可進行相應控制;實現(xiàn)將得到的數(shù)據(jù)進行計算修正的函數(shù)。
(3)串口打印控制部分:包括從串口獲取PC鍵盤按鍵值、發(fā)送一個字符、發(fā)送一串字符等功能使主函數(shù)的打印信息能顯示在串口通信軟件界面上。
其主要部分的流程圖見圖2。
圖2 溫濕度采集模塊流程圖
該模塊分為兩部分,一為基于Z-Stack協(xié)議棧開發(fā)使節(jié)點與協(xié)調(diào)器自動組網(wǎng)形成ZigBee網(wǎng)絡,并通過該網(wǎng)絡實現(xiàn)數(shù)據(jù)無線傳輸;二為使協(xié)調(diào)器與嵌入式核心板中ARM處理器進行串行異步通信,將數(shù)據(jù)最終交由嵌入式平臺處理。
Z-Stack采用分布式尋址,兼容AODV路由協(xié)議,可以滿足近程通信的要求,即使通信鏈路失效發(fā)生也可有效工作。為了區(qū)分Z-Stack協(xié)議棧中復雜的硬件驅(qū)動系統(tǒng),又提供了OSAL層[10](類似于單片機上的操作系統(tǒng),實則為根據(jù)所觸發(fā)的事件選擇調(diào)度相應任務),可調(diào)度APP層的任務。另外,Z-Stack提供了源碼例程SampleApp。該例程實現(xiàn)的功能主要是協(xié)調(diào)器自啟動(組網(wǎng))和節(jié)點設備自動入網(wǎng)。在了解ZStack的工作流程后,程序的開發(fā)將在APP層對SampleApp.c進行改寫完成。
這部分程序主要為利用OSAL層任務事件輪詢調(diào)度機制,通過系統(tǒng)周期性定時廣播數(shù)據(jù)到group1中去實現(xiàn)。當ZigBee節(jié)點加入網(wǎng)絡后觸發(fā)狀態(tài)改變事件,系統(tǒng)開啟定時器,定時時間一到就觸發(fā)廣播消息事件;系統(tǒng)為其創(chuàng)建相應的任務ID,調(diào)用廣播消息函數(shù);節(jié)點端的廣播消息函數(shù)讀取前一個模塊得到的數(shù)據(jù),利用AF_DataRequest()函數(shù)接口調(diào)用下層射頻硬件驅(qū)動函數(shù)發(fā)送溫濕度數(shù)據(jù);觸發(fā)協(xié)調(diào)器端的接收數(shù)據(jù)事件處理函數(shù)SampleApp_MessageMSGCB(),將捕獲的溫濕度數(shù)據(jù)處理后,以字符串的形式通過串口顯示在宿主機的終端中,以方便調(diào)試和開發(fā)。另外,協(xié)調(diào)器通過異步串行接口將數(shù)據(jù)交由ARM處理器。
為了后續(xù)拓展,為可處理多個節(jié)點溫濕度數(shù)據(jù),該模塊設計采用服務器與客戶端兩進程間通信來實現(xiàn)[11]。將接收ZigBee協(xié)調(diào)器通過異步串行通信發(fā)送過來的數(shù)據(jù)作為服務器進程,并封裝ZigBee功能提供相應應用接口??蛻舳诉M程則主要是用于同服務器端進行交互,解析獲取溫濕度數(shù)據(jù),同時為實現(xiàn)UI圖形界面提供封裝好的接口,為此還需用Qt設計UI界面。其中雙方是利用套接口(Socket)來使進程之間通信,但是由于Socket本身不支持同時等待和超時處理,所以它不能直接用來完成多進程之間的相互實時通信。本實驗采用事件驅(qū)動庫libev的方式構(gòu)建服務器模型。
Libev是一種高性能事件循環(huán)/事件驅(qū)動庫。需要循環(huán)探測事件是否產(chǎn)生,其循環(huán)體用ev_loop結(jié)構(gòu)來表達,并用ev_loop()來啟動。用戶需要做的僅僅是在合適的時候,將某些ev_io從ev_loop加入或剔除。
服務器主要實現(xiàn)流程:首先開啟一個Zigbee后臺線程(底層)監(jiān)聽服務器調(diào)用信息,接著利用ev_io_start(loop,&ev_io_watcher)啟動一個接收線程,專門用來接收客戶端發(fā)送過來的命令數(shù)據(jù)幀;然后按照相應的協(xié)議進行解析,跳轉(zhuǎn)到相應的接口,進一步調(diào)用底層Zigbee協(xié)調(diào)器并返回正確的信息給客戶端。
客戶端主要實現(xiàn)流程:首先調(diào)用GetConnect接口函數(shù)連接到服務器的端口,然后開啟一個Zigbeetopo線程用來調(diào)用接口函數(shù),發(fā)出獲取ZigBee網(wǎng)絡拓撲結(jié)構(gòu)信息的數(shù)據(jù)幀,創(chuàng)建另一線程接收并解析服務器端返回的數(shù)據(jù)幀,同時已創(chuàng)建的UI界面設置定時器,動態(tài)刷新加載溫濕度數(shù)據(jù),繪制成溫濕度曲線圖。
服務器與客戶端進程間通信模型如圖3所示。
此外還需利用Qt對UI界面設計。首先利用Qtdesigner為整體界面布局,其中包括背景顯示框、LCD數(shù)值顯示框以及曲線圖顯示框,編譯生成一個UI類;然后采用多繼承的方法構(gòu)造新類,并使用Qt中的信號與槽函數(shù)機制,使得接收到溫濕度數(shù)據(jù)觸發(fā)LCD數(shù)值顯示和曲線圖顯示槽函數(shù)動作。設計流程見圖4。
圖3 服務器與客戶端進程間通信模型
圖4 LCD數(shù)值顯示和曲線圖顯示槽函數(shù)設計流程
以上只是完成了溫濕度的采集顯示,還未真正發(fā)揮出物聯(lián)網(wǎng)所實現(xiàn)的人與物相連,這部分就需要搭建Web服務來實現(xiàn)[12-13]。實現(xiàn) Web服務需要移植嵌入式服務器,設計動態(tài)網(wǎng)頁,并通過WiFi最終在已搭建好的局域網(wǎng)內(nèi)實現(xiàn)手機、PC等可實時查看數(shù)據(jù)。
由于嵌入式設備資源一般都比較有限,并且也不需要同時處理多用戶的請求,因此不能使用Linux下最常用的如Apache等服務器,而需要使用一些專門為嵌入式設備設計的Web服務器。常見的嵌入式Web服務器主要有:lighttpd、thttpd、shttpd和BOA等。本文選擇移植BOA作為嵌入式服務器。BOA是一個非常小巧的Web服務器,可執(zhí)行代碼只有約60KB,它是一個單任務Web服務器,只能依次完成用戶的請求,而不會fork出新的進程來處理并發(fā)連接請求,但BOA支持CGI,能夠為CGI程序fork出一個進程來執(zhí)行。
對BOA服務器的配置主要是在/etc/boa目錄下創(chuàng)建一個boa.conf文件,此文件包括服務器將使用主機的端口號、運行服務器的身份、錯誤信息記錄的指定文件、存放html文件的目錄、默認首頁文件等相關信息,此外還需根據(jù)配置信息在相應的一些目錄下創(chuàng)建文件。
網(wǎng)頁設計則是利用html制作靜態(tài)頁面,并結(jié)合JavaScript實現(xiàn)動態(tài)顯示。JavaScript是一種基于對象和事件驅(qū)動并具有相對安全性的客戶端腳本語言,同時也是一種廣泛用于客戶端Web開發(fā)的腳本語言,常用來給HTML網(wǎng)頁添加動態(tài)功能,比如響應用戶的各種操作。JavaScript腳本可以獨立成文件,也可以內(nèi)聯(lián)到HTML文檔之中。
另外,利用AJAX實時刷新網(wǎng)頁數(shù)據(jù)。AJAX:異步JavaScript和XML,它是一種在無需重新加載整個網(wǎng)頁的情況下,就能更新部分網(wǎng)頁的技術(shù)[14]。它通過在后臺與服務器進行少量的數(shù)據(jù)交換,便可以使網(wǎng)頁實現(xiàn)異步更新。這意味著可以在不重新加載整個網(wǎng)頁的情況下,對網(wǎng)頁的某部分元素進行更新。由于溫濕度數(shù)據(jù)放入數(shù)據(jù)緩沖區(qū),是利用fopen、fread、fwrite以及fseek函數(shù)將數(shù)據(jù)緩沖區(qū)內(nèi)數(shù)據(jù)寫入XML文本適當位置中,要想讀取XML文檔中的數(shù)據(jù)并將它顯示在Web頁面上,需將XML文件轉(zhuǎn)化為XMLDOM(XML文檔對象模型),然后再利用JavaScript來解析并實時它。
通過搭建WIFI模塊,使得用戶可以通過支持WIFI的設備比如手機等更加便捷地查看溫濕度數(shù)據(jù)。WIFI是一個無線網(wǎng)絡通信技術(shù)的品牌,WIFI的運作至少需要1個AP和1個或1個以上的client。AP由路由器搭建的局域網(wǎng)充當,將插上無線網(wǎng)卡的嵌入式開發(fā)板看作一個client,然后就可以與其他client進行通信。要使無線網(wǎng)卡能正常工作,首先需加載驅(qū)動,然后對其進行一系列設置,使之加入到局域網(wǎng)中。由于開發(fā)板上配置有服務器,因此設置好合適IP以后,在手機等瀏覽器中輸入IP,就能查看溫濕度數(shù)據(jù)。
最終實現(xiàn)的效果如圖5和圖6所示。
圖5 顯示在LCD上的溫濕度曲線
圖6 手機和PC訪問溫濕度數(shù)據(jù)網(wǎng)頁
通過以上綜合設計實現(xiàn)的溫濕度系統(tǒng),既可以在LCD屏幕上看到實時動態(tài)曲線,又可以用手機查看實時更新的數(shù)據(jù)網(wǎng)頁,實現(xiàn)了物聯(lián)網(wǎng)所提出的人物相連的概念,使通信交流不僅局限于人與人之間進行。
(
)
[1]彭揚,蔣長兵.物聯(lián)網(wǎng)技術(shù)與應用基礎[M].北京:中國物資出版社,2011.
[2]車轔轔,孔英會,趙建立,等.基于物聯(lián)網(wǎng)的智慧實驗室設計[J].實驗技術(shù)與管理,2013,30(10):212-215.
[3]黃崢,古鵬.物聯(lián)網(wǎng)實驗室建設研究與探討[J].實驗技術(shù)與管理,2012,29(2):191-195.
[4]彭程.基于物聯(lián)網(wǎng)技術(shù)的智慧農(nóng)業(yè)發(fā)展策略研究[J].西安郵電學院學報,2012,17(2):94-98.
[5]周建國,周勇,丁立人,等.物聯(lián)網(wǎng)技術(shù)在大型儀器共享中的應用研究[J].物聯(lián)網(wǎng)技術(shù),2012(8):74-77.
[6]馬榮飛.基于物聯(lián)網(wǎng)技術(shù)網(wǎng)絡自適應移動節(jié)點資源監(jiān)測研究[J].計算機工程與設計,2012,33(5):1725-1728.
[7]饒緒黎,張美平,馬現(xiàn)虎.基于物聯(lián)網(wǎng)技術(shù)的實驗設備運行監(jiān)控管理系統(tǒng)設計[J].山東大學學報:理學版,2012,47(11):74-77.
[8]馮顯英,葛榮雨.基于數(shù)字溫濕度傳感器SHT11的溫濕度測控系統(tǒng)[J].自動化儀表,2006,27(1):59-61.
[9]童英華.基于Z-Stack的無線溫濕度采集系統(tǒng)[J].現(xiàn)代電子技術(shù),2012,35(23):115-117.
[10]曾寶國.Z-STACK協(xié)議棧應用開發(fā)分析[J].物聯(lián)網(wǎng)技術(shù),2011,1(3):71-73.
[11]曾寶國,曾妍.基于 WSN的開放性實驗室電源管理系統(tǒng)[J].物聯(lián)網(wǎng)技術(shù),2012(6):56-58.
[12]馬驥,喬雙,李丹.基于Web的嵌入式DSP測控系統(tǒng)設計[J].東北師大學報:自然科學版,2007,39(1):41-45.
[13]劉佳,劉柏全,宋鐵成,等.一種物聯(lián)網(wǎng)教學實驗系統(tǒng)的設計與實現(xiàn)[J].電氣電子教學學報,2010,32(6):89-92.
[14]劉西杰,柳林.HTML、CSS、JavaScript網(wǎng)頁制作從入門到精通[M].北京:人民郵電出版社,2013.