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