本站小編為你精心準備了遠程溫濕度監(jiān)測系統(tǒng)物聯(lián)網(wǎng)技術論文參考范文,愿這些范文能點燃您思維的火花,激發(fā)您的寫作靈感。歡迎深入閱讀并收藏。
1模塊的具體功能與實現(xiàn)
根據(jù)各個模塊的具體實現(xiàn)功能的不同,按照由下至上的順序分別予以設計。
1.1溫濕度數(shù)據(jù)采集模塊這部分工作主要是對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端口:DA-TA和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。
1.2溫濕度數(shù)據(jù)傳輸模塊該模塊分為兩部分,一為基于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)。在了解Z-Stack的工作流程后,程序的開發(fā)將在APP層對Sam-pleApp.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處理器。
1.3溫濕度處理模塊為了后續(xù)拓展,為可處理多個節(jié)點溫濕度數(shù)據(jù),該模塊設計采用服務器與客戶端兩進程間通信來實現(xiàn)[11]。將接收ZigBee協(xié)調(diào)器通過異步串行通信發(fā)送過來的數(shù)據(jù)作為服務器進程,并封裝ZigBee功能提供相應應用接口。客戶端進程則主要是用于同服務器端進行交互,解析獲取溫濕度數(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界面設計。首先利用Qt-designer為整體界面布局,其中包括背景顯示框、LCD數(shù)值顯示框以及曲線圖顯示框,編譯生成一個UI類;然后采用多繼承的方法構(gòu)造新類,并使用Qt中的信號與槽函數(shù)機制,使得接收到溫濕度數(shù)據(jù)觸發(fā)LCD數(shù)值顯示和曲線圖顯示槽函數(shù)動作。設計流程見圖4。
2Web服務搭建
以上只是完成了溫濕度的采集顯示,還未真正發(fā)揮出物聯(lián)網(wǎng)所實現(xiàn)的人與物相連,這部分就需要搭建Web服務來實現(xiàn)。實現(xiàn)Web服務需要移植嵌入式服務器,設計動態(tài)網(wǎng)頁,并通過WiFi最終在已搭建好的局域網(wǎng)內(nèi)實現(xiàn)手機、PC等可實時查看數(shù)據(jù)。
2.1嵌入式服務器移植由于嵌入式設備資源一般都比較有限,并且也不需要同時處理多用戶的請求,因此不能使用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)建文件。
2.2網(wǎng)頁設計及動態(tài)顯示網(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)頁的技術[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來解析并實時它。
2.3WIFI模塊搭建通過搭建WIFI模塊,使得用戶可以通過支持WIFI的設備比如手機等更加便捷地查看溫濕度數(shù)據(jù)。WIFI是一個無線網(wǎng)絡通信技術的品牌,WIFI的運作至少需要1個AP和1個或1個以上的client。AP由路由器搭建的局域網(wǎng)充當,將插上無線網(wǎng)卡的嵌入式開發(fā)板看作一個client,然后就可以與其他client進行通信。要使無線網(wǎng)卡能正常工作,首先需加載驅(qū)動,然后對其進行一系列設置,使之加入到局域網(wǎng)中。由于開發(fā)板上配置有服務器,因此設置好合適IP以后,在手機等瀏覽器中輸入IP,就能查看溫濕度數(shù)據(jù)。
3結(jié)束語
通過以上綜合設計實現(xiàn)的溫濕度系統(tǒng),既可以在LCD屏幕上看到實時動態(tài)曲線,又可以用手機查看實時更新的數(shù)據(jù)網(wǎng)頁,實現(xiàn)了物聯(lián)網(wǎng)所提出的人物相連的概念,使通信交流不僅局限于人與人之間進行。
作者:朱俊光高健田俊趙敏戚海峰謝亞卓莊建軍單位:南京大學電子科學與工程學院電工電子實驗中心