錢歡+施偉斌
摘要:隨著Android設(shè)備普及率日益上升及廣泛應(yīng)用,將Android設(shè)備作為物聯(lián)網(wǎng)終端已成為發(fā)展趨勢。為了彌補PC端在更新無線傳感器網(wǎng)絡(luò)代碼時移動不便的缺點,結(jié)合Android平臺與無線傳感器網(wǎng)絡(luò)技術(shù),設(shè)計一種在Android設(shè)備端利用藍牙通信遠程控制代碼分發(fā)的無線傳感器網(wǎng)絡(luò)代碼更新系統(tǒng)。傳感器節(jié)點基于存儲空間較小的CC2430芯片,使用輕量級操作系統(tǒng)TinyOS作為分發(fā)協(xié)議的開發(fā)環(huán)境,使得系統(tǒng)占用硬件資源少。實驗證明,利用藍牙技術(shù)與無線傳感器網(wǎng)絡(luò)分發(fā)技術(shù)可較好地實現(xiàn)網(wǎng)絡(luò)節(jié)點的代碼更新。該系統(tǒng)能方便快速地實現(xiàn)整個網(wǎng)絡(luò)的代碼更新,可推廣到實際應(yīng)用中。
關(guān)鍵詞:無線傳感器網(wǎng)絡(luò);Android;TinyOS;CC2430
DOIDOI:10.11907/rjdk.171977
中圖分類號:TP319
文獻標(biāo)識碼:A 文章編號:1672-7800(2017)012-0125-03
Abstract:Within creasing market share and application of Android device and rise of IoT, a code update system is designed for wireless sensor network based on Android developing technology, in which a Android device can be operated to update the code of nodes.The CC2430 based sensor node, of which the flash space is small, is developed with light weight operating system TinyOS for code distribution in order to consume less hardware resources. The experiment shows the system can conveniently and quickly implement the function of code update, which could be promoted to more practical application.
Key Words:wireless sensor network; Android; TinyOS; CC2430
0 引言
隨著通信技術(shù)、嵌入式技術(shù)、傳感器技術(shù)的迅速發(fā)展與日趨成熟,具備通信能力、計算能力及感知能力的微型傳感器節(jié)點開始在世界范圍內(nèi)涌現(xiàn)。數(shù)目眾多的傳感器節(jié)點協(xié)同工作,隨機分布于監(jiān)測區(qū)域周遭環(huán)境,通過自組織的無線通信方式構(gòu)成傳感器網(wǎng)絡(luò)(Wireless Sensor Network, WSN)[1]。WSN技術(shù)廣泛應(yīng)用于智能家居、智能穿戴設(shè)備、環(huán)境監(jiān)測、醫(yī)療衛(wèi)生以及城市交通等領(lǐng)域[2]。WSN節(jié)點部署完畢后經(jīng)常需要增加一些新功能或者修復(fù)軟件中存在的問題,需要對整個網(wǎng)絡(luò)進行代碼更新,通過人工方式手動地對所有節(jié)點編程,是一項非常耗時、耗力的工作,為此在WSN中需要一種有效的方法能夠通過無線方式對節(jié)點進行遠程更新[3]。文獻[2-7]均對無線傳感器網(wǎng)絡(luò)代碼更新技術(shù)進行了相關(guān)研究與改進。WSN接入互聯(lián)網(wǎng)的瓶頸是網(wǎng)關(guān),將Android平臺引入WSN,可以利用Android平臺接入互聯(lián)網(wǎng)的接口實現(xiàn)WSN接入互聯(lián)網(wǎng) [8]。無線傳感器網(wǎng)絡(luò)的網(wǎng)關(guān)節(jié)點通常采用232串口或USB接口上傳相關(guān)信息,本設(shè)計WSN網(wǎng)關(guān)節(jié)點通過藍牙模塊連接Android設(shè)備,利用藍牙技術(shù)與Android設(shè)備進行信息交互,有效避開了網(wǎng)關(guān)設(shè)計中的軟硬件屏障,既可以方便實現(xiàn)任一種無線傳感器網(wǎng)絡(luò)終端數(shù)據(jù)接入互聯(lián)網(wǎng),又可以方便遠程對無線傳感器網(wǎng)絡(luò)進行代碼更新。
1 系統(tǒng)設(shè)計
遠程代碼更新系統(tǒng)以硬件可以劃分為3個部分:上位機、網(wǎng)關(guān)節(jié)點、傳感器節(jié)點。此系統(tǒng)上位機采用Android平臺, 網(wǎng)關(guān)節(jié)點與傳感器節(jié)點的核心芯片均采用TI公司生產(chǎn)的微控制類型的CC2430芯片,且網(wǎng)關(guān)節(jié)點佩戴了藍牙通信模塊,用于與Android設(shè)備進行通信[11]。本設(shè)計采用內(nèi)置128kB型號的芯片,以便能夠存放多個版本的應(yīng)用程序?;诖擞布脚_,節(jié)點程序選用加州大學(xué)伯克利分校設(shè)計的TinyOS操作系統(tǒng)進行程序設(shè)計[9]。編譯器首先將NesC文件翻譯為C語言文件,再利用交叉編譯器對C語言文件進行編譯鏈接,最終得到iHex(IntelHex)文件,將iHex文件利用互聯(lián)網(wǎng)通過Android平臺下載至CC2430后即可運行。
TinyOS操作系統(tǒng)自帶兩種分發(fā)協(xié)議:Trickle協(xié)議[10]與Deluge協(xié)議,本設(shè)計結(jié)合這兩種協(xié)議實現(xiàn)代碼分發(fā)。 Trickle數(shù)據(jù)分發(fā)協(xié)議適用于少量數(shù)據(jù)的分發(fā),代碼更新系統(tǒng)中需要有數(shù)據(jù)對網(wǎng)絡(luò)進行控制,控制字的數(shù)據(jù)量一般較小,使用該協(xié)議可以達到較為理想的效果。傳輸整個程序代碼,需要利用Deluge代碼分發(fā)協(xié)議的分頁技術(shù)完成,保證完整數(shù)據(jù)的傳輸工作。
為了能實現(xiàn)代碼的遠程更新,需要對3部分進行逐一設(shè)計,最終使得代碼能完整地從上位機傳至網(wǎng)關(guān)節(jié)點,再從網(wǎng)關(guān)節(jié)點分發(fā)至整個網(wǎng)絡(luò)。代碼更新過程如圖1所示: 在上位機上可以分發(fā)待更新程序,通過藍牙串口燒寫至網(wǎng)關(guān)節(jié)點;上位機通過藍牙串口可以向網(wǎng)關(guān)節(jié)點發(fā)送分發(fā)指令,網(wǎng)關(guān)節(jié)點收到指令后,將指令消息廣播至整個網(wǎng)絡(luò);節(jié)點1、2利用分發(fā)協(xié)議先接收到完整程序,啟用新版本程序;節(jié)點3從節(jié)點2接收新版本程序,并重啟更新。
上位機軟件使用Java語言編程,上位機程序共需要完成兩部分功能,首先將iHex文件發(fā)送至網(wǎng)關(guān)節(jié)點,其次需要給網(wǎng)關(guān)節(jié)點發(fā)送控制命令,控制整個網(wǎng)絡(luò)的分發(fā)狀態(tài)。
網(wǎng)關(guān)節(jié)點使用nesC編程,負責(zé)接收上位機發(fā)送的新版本程序,接收上位機發(fā)送的控制命令,作出相應(yīng)的響應(yīng),解析上位機發(fā)送新版本程序的命令,負責(zé)將新版本程序分發(fā)至各個傳感器節(jié)點。
傳感器節(jié)點的程序又分為2個部分,前者是運行程序部分。啟動引導(dǎo)部分負責(zé)各版本之間的切換工作,在分發(fā)過程中,程序會對版本啟動信息進行修改,在啟動過程中讀取啟動信息,跳轉(zhuǎn)到特定版本的運行程序。后者包含正常的采集數(shù)據(jù)或其它節(jié)點功能程序,還包含分發(fā)協(xié)議。在運行過程中,節(jié)點功能程序與分發(fā)協(xié)議互不干擾。
1.1 上位機
上位機軟件是Android平臺應(yīng)用,在Androidstudio開發(fā)環(huán)境下編寫,主要功能是與網(wǎng)關(guān)節(jié)點的藍牙模塊進行通信[12]。Android藍牙相關(guān)的類與接口位于Android.bluetooth包中,Android的應(yīng)用程序框架提供了訪問藍牙功能的APIs。應(yīng)用程序界面可以分為藍牙設(shè)備連接、接收區(qū)和發(fā)送區(qū)3個部分。 選擇相應(yīng)iHex程序文件,在發(fā)送區(qū)會列出所選擇的文件,點擊發(fā)送將文件發(fā)送至網(wǎng)關(guān)節(jié)點。更新文件發(fā)送完畢后,使用發(fā)送命令進行代碼分發(fā)控制??刂泼钚枰O(shè)置命令字、分發(fā)版本ID以及分發(fā)版本大小,各參數(shù)按照順序逐一發(fā)送。
1.2 網(wǎng)關(guān)節(jié)點
網(wǎng)關(guān)節(jié)點使用hc-06藍牙通信模塊與Android設(shè)備進行通信,而網(wǎng)關(guān)節(jié)點與藍牙通信模塊通過UART通信。網(wǎng)關(guān)節(jié)點與傳感器節(jié)點均采用NesC語言進行編程,網(wǎng)關(guān)節(jié)點負責(zé)與上位機通過串口進行通信,將新版本代碼臨時存放到Flash內(nèi),由上位機發(fā)送控制命令后,將存儲的新版本代碼通過分發(fā)協(xié)議分發(fā)至各個節(jié)點。
在網(wǎng)關(guān)節(jié)點啟動后,首先開啟串口通信功能,等待上位機發(fā)送數(shù)據(jù)或指令。Flash及串口管理模塊將會響應(yīng)上位機指令,接收每一串?dāng)?shù)據(jù)的流程如圖2所示,接收到數(shù)據(jù)后該模塊判斷是數(shù)據(jù)還是指令,字符‘:代表數(shù)據(jù),字符‘c代表命令,然后轉(zhuǎn)入對應(yīng)狀態(tài)。若接收到的是‘:,進入讀取數(shù)據(jù)信息狀態(tài),數(shù)據(jù)信息包括數(shù)據(jù)長度、地址類型以及數(shù)據(jù)類型,從串口讀取一個字符代表數(shù)據(jù)長度,接著讀取兩個字符代表數(shù)據(jù)地址,再讀取一個字符代表數(shù)據(jù)類型,以上讀取的數(shù)據(jù)順序與iHex文件的格式相對應(yīng)。之后進入讀取數(shù)據(jù)狀態(tài),以接收到的數(shù)據(jù)長度接收要下載的代碼數(shù)據(jù),并且接收一個字符的校驗碼,通過校驗后利用Flash模塊,寫入串口接收到的對應(yīng)地址位置。在網(wǎng)關(guān)節(jié)點中,將從上位機接收到的程序臨時放置到0x18000開始至0x1FFF0(映射地址)的位置,即放入Flash中的Bank3中。當(dāng)完成Flash寫操作時,向上位機發(fā)送反饋,等待接收下一條數(shù)據(jù)。同時將接收狀態(tài)恢復(fù)為初始狀態(tài)。
若從串口接收到了控制命令字符,則進入接收控制命令狀態(tài)。接收命令字,命令字包含3個信息:待分發(fā)數(shù)據(jù)的版本信息、待分發(fā)數(shù)據(jù)的大小、控制字??刂谱种邪?個功能:分發(fā)新程序、停止分發(fā)、重啟網(wǎng)關(guān)節(jié)點。
若接收到重啟指令,則調(diào)用重啟模塊提供的功能。重啟模塊實現(xiàn)了軟復(fù)位功能,利用看門狗超時自動復(fù)位的原理,設(shè)置一個超時時間極短的看門狗,調(diào)用while(1)循環(huán),不對看門狗進行喂食,到了超時時間芯片會自動復(fù)位。
若接收到分發(fā)或停止指令,首先利用Trickle協(xié)議分發(fā)控制命令。在分發(fā)命令的情況下,調(diào)用完畢Trickle模塊后,網(wǎng)關(guān)節(jié)點進入分發(fā)模式。在停止分發(fā)指令下,則停止分發(fā)功能,暫停一切維護和分發(fā)操作。
1.3 傳感器節(jié)點
節(jié)點核心cc2430內(nèi)置128kB片內(nèi)Flash,本設(shè)計充分利用該Flash實現(xiàn)代碼更新系統(tǒng)。為了實現(xiàn)代碼更新,將Flash的4個Bank發(fā)分為兩大部分,如圖3所示,Bank0作為Bootloader,用于引導(dǎo)啟動,每當(dāng)節(jié)點啟動時,首先運行Bootloader程序,利用Bootloader程序引導(dǎo)跳轉(zhuǎn)到正確的運行程序。引導(dǎo)程序讀取存放于0x6FF0地址上的引導(dǎo)信息,從引導(dǎo)信息中得到運行版本所在Bank,根據(jù)版本信息對寄存器進行設(shè)置,并引導(dǎo)節(jié)點跳轉(zhuǎn)到相應(yīng)的版本。Bank1~3作為各個版本的存放位置,每個Bank可存放一個版本的內(nèi)容,可同時存在3個不同版本的程序。
2 代碼更新測試實驗
實驗采用一個網(wǎng)關(guān)節(jié)點、多個傳感器節(jié)點。傳感器節(jié)點分布在網(wǎng)關(guān)節(jié)點周圍。分發(fā)代碼的大小為28.25kB,傳感器節(jié)點數(shù)量從1個逐步增加至16個。網(wǎng)關(guān)節(jié)點通過上位機接收指令,進行分發(fā)。圖4表示分發(fā)至不同數(shù)量節(jié)點所需使用的時間。當(dāng)更新一個節(jié)點時需使用的時間為143s,隨著節(jié)點數(shù)量的增多,分發(fā)時間略有下降,時間穩(wěn)定在120s左右。由于傳感器節(jié)點發(fā)送請求的等待時間是隨機的,當(dāng)節(jié)點數(shù)量增多時,總體請求時間會相對縮短,從而
使分發(fā)速度變得更快。
當(dāng)傳感器節(jié)點數(shù)量增加到11個后,分發(fā)速度顯著下降。由于無線信道的穩(wěn)定性比有線傳輸差,當(dāng)節(jié)點增多時,丟包的可能性增大,即重傳的次數(shù)增多,導(dǎo)致分發(fā)速度下降。
3 結(jié)語
本文設(shè)計了一種由Android移動端控制分發(fā)的無線傳感器網(wǎng)絡(luò)代碼更新系統(tǒng),網(wǎng)關(guān)節(jié)點通過藍牙模塊與移動設(shè)備連接進行數(shù)據(jù)通信,打破了傳統(tǒng)無線傳感器網(wǎng)絡(luò)代碼更新系統(tǒng)中串口或USB接口等有線通信方式對網(wǎng)關(guān)節(jié)點布置的限制,符合今后無線傳感器網(wǎng)絡(luò)網(wǎng)關(guān)節(jié)點更加智能、便攜的發(fā)展方向。傳感器節(jié)點選用 CC2430硬件平臺,在TinyOS軟件平臺中進行分發(fā)協(xié)議的開發(fā),可較好地使用于單跳網(wǎng)絡(luò),并可支持多跳網(wǎng)絡(luò)的更新,能保證節(jié)點完成代碼更新功能。
參考文獻:
[1] ESTRIN D, GOVINDAN R, HEIDEMANN J, et al. Next century challenges:scalable coordination in sensor networks[C]. ACM/IEEE International Conference on Mobile Computing and Networking, 2001:263-270.
[2] 李麗娜.無線傳感器網(wǎng)絡(luò)代碼更新技術(shù)研究[D].哈爾濱:哈爾濱工業(yè)大學(xué), 2006.
[3] 張國萍.無線傳感器網(wǎng)絡(luò)在線代碼分發(fā)最新研究進展[J].浙江理工大學(xué)學(xué)報,2015,33(2):219-227.
[4] 任萬春,馬廷淮,劉琦.一種基于多播分發(fā)樹的無線傳感器網(wǎng)絡(luò)代碼分發(fā)協(xié)議[J].傳感器與微系統(tǒng),2014,33(11):149-152.
[5] 侯彤.無線傳感器網(wǎng)絡(luò)空中加載技術(shù)的研究[D].西安:西安電子科技大學(xué), 2011.
[6] 吳濤,施偉斌,張磊.基于CC2430的代碼更新系統(tǒng)設(shè)計[J].電子科技,2017,30(1):123-125.
[7] 王海勇,楊庚,許建,等.一種低能耗的代碼分發(fā)協(xié)議[J].計算機工程,2012,38(23):84-87.
[8] 喬雷.基于Android和藍牙串口的WSN網(wǎng)關(guān)的設(shè)計和實現(xiàn)[D].西安:西安工業(yè)大學(xué),2013.
[9] UNIVERSITY OF CALIFORNIA AT BERKELEY. TinyOS document [EB/OL]. http://tinyos.stanford.edu/tinyos-wiki/index.php/TinyOS_Tutorials.
[10] PHILIP L, NEIL P, SCOTT S, et al. Trickle: a self-regulating algorithm for code propagation and maintenance in wireless sensor networks[R]. Technical report, California: Universityof California at Berkeley, 2003.
[11] 肖蓉.基于Android平臺的無線傳感器網(wǎng)絡(luò)與蜂窩網(wǎng)絡(luò)網(wǎng)關(guān)系統(tǒng)設(shè)計與實現(xiàn)[D].上海:華東師范大學(xué),2012.
[12] 張元亮. Android開發(fā)應(yīng)用實戰(zhàn)詳解[M].北京:中國鐵道出版社,2011.
(責(zé)任編輯:何 麗)