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