萬深展 念平
摘要:隨著物聯(lián)網(wǎng)的發(fā)展,設(shè)計(jì)具有低成本、低功耗、易擴(kuò)展的無線傳感網(wǎng)絡(luò)越來越迫切,基于Linux Web服務(wù)器的高集成Mesh無線傳感網(wǎng)絡(luò)系統(tǒng)應(yīng)運(yùn)而生。對基于IEEE802.11協(xié)議的低功耗WiFi芯片—ESP8266作為Mesh網(wǎng)絡(luò)節(jié)點(diǎn)進(jìn)行了研究?;贛esh網(wǎng)絡(luò)的無線傳感系統(tǒng)分為三層,底層是傳感器網(wǎng)絡(luò)層,負(fù)責(zé)收集傳感數(shù)據(jù);中間層是Mesh無線網(wǎng)絡(luò)層,利用Mesh網(wǎng)絡(luò)強(qiáng)健的穩(wěn)定性傳輸數(shù)據(jù);高層是服務(wù)器層,主要對整個(gè)網(wǎng)絡(luò)數(shù)據(jù)進(jìn)行處理和存儲。平臺集成了Linux Web服務(wù)器、數(shù)據(jù)庫和PHP運(yùn)行環(huán)境,使用無線WiFi網(wǎng)絡(luò)提供各種互聯(lián)網(wǎng)接入技術(shù)。經(jīng)測試,該系統(tǒng)具有結(jié)構(gòu)簡單、組網(wǎng)快捷、數(shù)據(jù)傳輸可靠性高等優(yōu)點(diǎn)。
關(guān)鍵詞關(guān)鍵詞:無線傳感;Mesh網(wǎng)絡(luò);ESP8266;Web服務(wù)器;互聯(lián)網(wǎng)
DOIDOI:10.11907/rjdk.172441
中圖分類號:TP319
文獻(xiàn)標(biāo)識碼:A文章編號文章編號:16727800(2017)011008103
0引言
物聯(lián)網(wǎng)是一個(gè)流行的網(wǎng)絡(luò)原型,為嵌入式提供了廣泛的應(yīng)用。隨著物聯(lián)網(wǎng)的發(fā)展,無線傳感網(wǎng)絡(luò)得到迅速發(fā)展。WMN是近年發(fā)展起來的先進(jìn)網(wǎng)絡(luò)結(jié)構(gòu),具有低成本、高傳輸速度、大運(yùn)用范圍、維護(hù)方便等特點(diǎn),成為未來通信發(fā)展的新方向[1]。搭配不同傳感網(wǎng)絡(luò)的Mesh無線網(wǎng)絡(luò)系統(tǒng)擁有極廣泛的工業(yè)應(yīng)用,能提供穩(wěn)定的內(nèi)部通信網(wǎng)絡(luò)及數(shù)據(jù)控制。Linux作為開源操作系統(tǒng),強(qiáng)大的嵌入式Linux Web服務(wù)器擁有開發(fā)成本低、功耗低、高性能和高可靠性等優(yōu)勢[2]。
無線傳感網(wǎng)絡(luò)的數(shù)據(jù)通信主要通過WiFi在網(wǎng)絡(luò)節(jié)點(diǎn)中進(jìn)行,每個(gè)節(jié)點(diǎn)由ESP8266無線模塊構(gòu)成。而Arduino嵌入式系統(tǒng)作為網(wǎng)絡(luò)通信的主要服務(wù)器,通過WiFi無線通信設(shè)備節(jié)點(diǎn)協(xié)議為各節(jié)點(diǎn)分配流量和提供數(shù)據(jù)傳輸,定期收集數(shù)據(jù)發(fā)送到MySQL數(shù)據(jù)庫。服務(wù)器可以分析和顯示接收到的數(shù)據(jù)并采取相應(yīng)措施。Arduino還提供一個(gè)以太網(wǎng)接口,接入互聯(lián)網(wǎng)服務(wù)器工作,用戶能通過瀏覽器遠(yuǎn)程觀察傳感器數(shù)據(jù)和控制整個(gè)無線傳感器網(wǎng)絡(luò)。
1系統(tǒng)設(shè)計(jì)
無線Mesh網(wǎng)絡(luò),也稱為無線網(wǎng)狀網(wǎng)絡(luò),是一種新型的分布式無線寬帶接入技術(shù)。無線Mesh路由器和終端設(shè)備組成了無線網(wǎng)格多跳網(wǎng)絡(luò)[3]。無線網(wǎng)狀網(wǎng)絡(luò)的目標(biāo)是讓任意一個(gè)節(jié)點(diǎn)不僅能接受信號,還能發(fā)送信號,無線Mesh接入點(diǎn)既能實(shí)現(xiàn)數(shù)據(jù)轉(zhuǎn)發(fā),又能作為橋接器連接其它有限網(wǎng)狀網(wǎng)絡(luò)。無線網(wǎng)狀網(wǎng)絡(luò)的多跳連接將成為解決“最后一英里”瓶頸問題的關(guān)鍵技術(shù)[4]。
目前大多數(shù)無線傳感網(wǎng)絡(luò)都是基于紅外射頻和ZigBee,而基于WiFi無線網(wǎng)的傳感網(wǎng)絡(luò)費(fèi)用昂貴?;赗F的紅外射頻傳感網(wǎng)絡(luò)容易受到干擾,只適用于小范圍的傳感網(wǎng)絡(luò)使用。而ZigBee技術(shù)衰減快,抗干擾性差,兼容性低,無法實(shí)現(xiàn)大面積部署[5]。
本文系統(tǒng)基于IEEE802.11n無線協(xié)議,能夠提供比ZigBee更高的數(shù)據(jù)傳輸速度。整個(gè)無線傳感網(wǎng)絡(luò)系統(tǒng)分為3層,結(jié)構(gòu)如圖1所示。
圖1無線傳感系統(tǒng)層次結(jié)構(gòu)
本文采用低成本和高效節(jié)能的ESP8266開發(fā)無線傳感器網(wǎng)絡(luò)WiFi模塊。ESP8266模塊通過配置,能夠提供高性能、高集成性的WiFi數(shù)據(jù)傳輸。斷電邏輯算法和先進(jìn)的電源管理程式提供了一種高效節(jié)能的WiFi無線傳感器網(wǎng)絡(luò)。ESP8266在深度睡眠模式時(shí),RTC時(shí)鐘仍處于運(yùn)行狀態(tài),能耗極低,僅需不到1mA的電量就可保持連接到接入點(diǎn)[6]。
Mesh網(wǎng)絡(luò)層擁有自適應(yīng)、自動修復(fù)功能,當(dāng)傳輸鏈路中某條路徑發(fā)生擁堵或斷開時(shí),能自動選擇其它路徑進(jìn)行傳輸或在ESP8266內(nèi)短暫存儲,避免了無線傳感器網(wǎng)絡(luò)傳輸過程中的帶寬擁擠問題,有效解決了無線傳感器網(wǎng)絡(luò)的延遲效應(yīng)。
服務(wù)器層使用基于Arduino的嵌入式Web Linux服務(wù)器,開源的Linux系統(tǒng)可為整個(gè)無線傳感網(wǎng)絡(luò)系統(tǒng)提供強(qiáng)有力的技術(shù)支持。ESP8266作為整個(gè)Mesh網(wǎng)絡(luò)的節(jié)點(diǎn),在節(jié)點(diǎn)與節(jié)點(diǎn)、用戶與節(jié)點(diǎn)以及節(jié)點(diǎn)與服務(wù)器中傳輸數(shù)據(jù),用戶可通過ESP8266對節(jié)點(diǎn)進(jìn)行控制。系統(tǒng)如果需要多點(diǎn)采集或者內(nèi)網(wǎng)傳輸,客戶端可直接由筆記本計(jì)算機(jī)構(gòu)建,即利用Web窗口來控制節(jié)點(diǎn)的傳輸、切換等工作。
客戶端能進(jìn)行遠(yuǎn)程Web頁面控制。例如DS1820溫度傳感器收集到的數(shù)據(jù),需要通過LED顯示,組件能夠在客戶端演示收集到的數(shù)據(jù),具體實(shí)現(xiàn)方法是:末端通過溫度傳感器在偏遠(yuǎn)地區(qū)收集數(shù)據(jù),與傳感器相連的Arduino模塊作為一個(gè)小型電腦,持續(xù)不斷地對傳感器進(jìn)行監(jiān)控和暫存采集到的數(shù)據(jù),并且發(fā)送到SQL數(shù)據(jù)庫中,從而組成一個(gè)輕量化的小型傳感系統(tǒng)。
2系統(tǒng)實(shí)現(xiàn)
2.1嵌入式Web服務(wù)器實(shí)現(xiàn)
嵌入式Web服務(wù)器技術(shù)是目前比較流行的物聯(lián)網(wǎng)工程技術(shù),常見的Web服務(wù)器有Httpd、Boa以及Thttpd等[7]??紤]到服務(wù)器需要支持CGI程序以及對數(shù)據(jù)進(jìn)行身份驗(yàn)證,本系統(tǒng)選用功能強(qiáng)大的嵌入式Web服務(wù)器Apache,數(shù)據(jù)庫則使用MySQL。
首先,下載Web服務(wù)器Apache源代碼。然后根據(jù)無線Mesh AP配置管理平臺,對源碼的配置文件進(jìn)行修改。最后,對修改過的Apache服務(wù)器源代碼進(jìn)行編譯,燒錄進(jìn)Linux操作系統(tǒng)內(nèi)核。
在Apache服務(wù)器移植過程中,要對配置文件httpd.conf進(jìn)行正確修改。通過修改httpd.conf配置文件完成Apache服務(wù)器的配置后,還要對限制上傳文件內(nèi)存的宏進(jìn)行修改。默認(rèn)上傳文件大小不得超過1MB,根據(jù)實(shí)際需要修改為200MB比較合適。修改命令如下:
#define SINGLE_POST_LIMIT_DEFAULT 200*1024*1024/*1MB*/
修改完后對服務(wù)器源碼進(jìn)行編譯和下載調(diào)試。在終端中設(shè)置嵌入式開發(fā)板的IP地址,在瀏覽器中輸入IP地址就能打開Apache服務(wù)器指定好的無線Mesh AP管理平臺首頁。通過瀏覽器遠(yuǎn)程登錄嵌入式Web服務(wù)器即可對系統(tǒng)進(jìn)行監(jiān)控和管理。endprint
嵌入式開發(fā)板為Arduino uno嵌入式模塊,是一個(gè)微小、高效的微型嵌入式電腦主板。信用卡大小的微型電腦主板擁有著近乎完美的兼容性,能夠與許多平臺和設(shè)備完美結(jié)合[8]。本系統(tǒng)Arduino嵌入式模塊主要作為服務(wù)器基站,通過WiFi與作為通信節(jié)點(diǎn)的ESP8266連接,使用802.11無線協(xié)議。
2.2AODV路由協(xié)議移植
實(shí)際傳輸過程中存在連續(xù)損失和離散損失兩種情況。恒定常量的數(shù)據(jù)丟失無疑對魯棒性有較大影響。AODV的Mesh無線網(wǎng)絡(luò)框架的WiFi算法可以避免傳輸過程中連續(xù)的數(shù)據(jù)丟失。AODV是一個(gè)純粹的按需路由協(xié)議,不在路徑內(nèi)的節(jié)點(diǎn)不保存路由信息,也不參與路由表交換[9]。如果其中一個(gè)節(jié)點(diǎn)未能與服務(wù)器進(jìn)行數(shù)據(jù)通信,則發(fā)送失敗的數(shù)據(jù)將會發(fā)送給相鄰節(jié)點(diǎn),由相鄰節(jié)點(diǎn)發(fā)送此數(shù)據(jù)到服務(wù)器。在WiFi框架的實(shí)施算法中,通道數(shù)據(jù)是打包在一起一并發(fā)送到基站的[10]。
協(xié)議軟件的移植過程:先將AODVUU路由協(xié)議在PC機(jī)Linux系統(tǒng)上進(jìn)行編譯,調(diào)試通過后再使用交叉編譯器將其編譯為可在ARM開發(fā)板下運(yùn)行的可執(zhí)行文件。在配置內(nèi)核時(shí)必須選Network packet filtering中的Netfilter相關(guān)選項(xiàng),否則AODV無法運(yùn)行。配置完內(nèi)核后,重新進(jìn)行內(nèi)核編譯。AODVUU最終經(jīng)過交叉編譯后將生成內(nèi)核模塊文件kaodv.ko和用戶空間可執(zhí)行文件aodvd。再將重新編譯生成的內(nèi)核下載到開發(fā)板,并將AODVUU交叉編譯后的兩個(gè)文件放進(jìn)ARM開發(fā)板的文件系統(tǒng)中,加載kaodv.ko,執(zhí)行aodvd文件。
2.3ESP8266 Mesh網(wǎng)絡(luò)組網(wǎng)與實(shí)現(xiàn)
由于Esp8266有相應(yīng)的SDK開發(fā)文檔以及Mesh組網(wǎng)的API接口,因此大大簡化了開發(fā)步驟,直接調(diào)用相應(yīng)的API接口即可:①通過wifi_get_macaddr獲取模塊的MAC地址,其參數(shù)為if_index,返回值為true或者false,表示獲取mac地址失敗或者成功;②配置用戶數(shù)據(jù)包(buf)的內(nèi)容;③初始化目標(biāo)的mac地址(若mac地址為零則視為向所有網(wǎng)絡(luò)中的設(shè)備廣播數(shù)據(jù)包);④通過調(diào)用espconn_Mesh_create_packet函數(shù)創(chuàng)建一個(gè)數(shù)據(jù)包(由指針header指向這個(gè)數(shù)據(jù)包),其參數(shù)為dst_add、src_addr,表示接收到的mac地址和發(fā)送的目標(biāo)地址。其中header的信息包括dst_addrv、src_addr、option_list、packet Body等內(nèi)容;⑤通過調(diào)用espconn_Mesh_set_usr_data函數(shù),將用戶數(shù)據(jù)包中的內(nèi)容添加進(jìn)將要發(fā)送的數(shù)據(jù)包中,參數(shù)有head、_data、data_len等,分別表示包發(fā)送的地址、用戶緩存區(qū)一級數(shù)據(jù)長度。返回值為ture或者false,設(shè)置成功或者失??;⑥通過調(diào)用espconn_Mesh_sent函數(shù)發(fā)送數(shù)據(jù)(數(shù)據(jù)發(fā)送完后需要用戶手動釋放這個(gè)數(shù)據(jù)包的內(nèi)存)。部分代碼如下:
os_memset(buf,0,sizeof(buf));
os_sprintf(buf,”%s”,”{\”bacast\”:\””);
os_sprintf(buf+os_strlen(buf),MACSTR,MAC25TR(src));
os_menset(dst,0,sizeof(dst));//獲取MAC地址
header=(struct Mesh_header_format*)eapconn_Mesh_create_packet(
dst,src,false,true,m_proto_json,os_strlen(buf),false,0,F(xiàn)alse,0,false,00);//創(chuàng)建一個(gè)數(shù)據(jù)包
if(!espconn_Mesh_set_usr_data(header,buf,os_strlen(buf)))
{
MESH_DEMO_PRINT(“bcast set user data fail\\n”);
MESH_DEMO_FREE(header);
return;
}//設(shè)置用戶數(shù)據(jù)
If(eapconn_Mesh_sent(&g_ser_conn,(uint8_t*)header,header>len))
{
MESH_DEMO_PRINT(“bcast Mesh is busy\\n”);
espconn_Mesh_connect(&g_ser_conn);
MESH_DEMO_FREE(header);
return;
}//發(fā)送數(shù)據(jù)包
3結(jié)語
本文系統(tǒng)介紹了基于WiFi的Mesh無線傳感網(wǎng)絡(luò)設(shè)計(jì)與實(shí)現(xiàn),使用了基于Linux的arduino開發(fā)板和基于ESP8266無線模塊的Mesh無線網(wǎng)絡(luò)系統(tǒng)。該系統(tǒng)適用于實(shí)時(shí)無線傳感器監(jiān)測和遠(yuǎn)程控制傳感器網(wǎng)絡(luò),解決了無線局域網(wǎng)和基于射頻的傳感器網(wǎng)絡(luò)延遲、高成本以及技術(shù)門檻高等問題。基于WiFi的Mesh網(wǎng)絡(luò)不能解決無線傳感系統(tǒng)帶來的所有問題,但能夠避免任何類型的故障節(jié)點(diǎn)和服務(wù)器間的數(shù)據(jù)通信中斷以及流量擁堵等問題。
參考文獻(xiàn)參考文獻(xiàn):
[1]肖同松.無線傳感網(wǎng)絡(luò)綜述[J].中國科技信息,2008(23):105106.
[2]李曉陽.WiFi技術(shù)及其應(yīng)用與發(fā)展[J].信息技術(shù),2012(2):196198.
[3]楊峰.無線Mesh網(wǎng)絡(luò)綜述[J].數(shù)據(jù)通信,2009(1):1517
[4]孫其博.物聯(lián)網(wǎng):概念、架構(gòu)與關(guān)鍵技術(shù)研究綜述[J].北京郵電大學(xué)學(xué)報(bào),2010(3):39.
[5]ZENGHUA ZHAO,XUANXUAN WU, XIN ZHANG, et al. ZigBee vs. WiFi: understanding issues and measuring performances of their coexistence performance computing & communications conference,2014:1-8
[6]曹振民.基于ESP8266的無線控制電路設(shè)計(jì)[J].工業(yè)控制計(jì)算機(jī),2017(1):4952.
[7]JEREMY BENTHAM.嵌入式系統(tǒng)Web服務(wù)器:TCP/IP[M].陳向群,譯.北京:機(jī)械工業(yè)出版社,2003.
[8]MCROBERTS M.Arduino從基礎(chǔ)到實(shí)踐[M].楊繼志,譯.北京:電子工業(yè)出版社,2013.
[9]KIN KLEUNG.無線Mesh網(wǎng)絡(luò)架構(gòu)與協(xié)議[M]. 第1版.易燕,譯.北京:機(jī)械工業(yè)出版社, 2009.
[10]斯托林思.無線通信與網(wǎng)絡(luò)[M]. 第1版.何軍,譯.北京:清華大學(xué)出版社,2005.
責(zé)任編輯(責(zé)任編輯:杜能鋼)endprint