李曠琦 黃梓釗 蔡志崗



摘 要:以Arduino為開發平臺,借助XBee模塊完成ZigBee局域網組網,利用Yeelink互聯網開放平臺搭建了一個遠程溫濕度監控系統。系統以Arduino UNO為控制板,在局域網內利用XBee模塊無線傳輸溫濕度傳感器所采集的數據,以W5100以太網模塊作為ZigBee無線網絡網關,實現數據從ZigBee網絡向互聯網傳輸。該系統可以實現對溫度、濕度等數據的實時采集;通過互聯網訪問Yeelink可以獲取信息,進行在線監測;在數據監測出現異常情況時通過Yeelink向終端發出報警信息,使終端蜂鳴器發出聲響,從而提醒周圍人,達到報警效果,實現系統的遠程實時監控。
關鍵詞: Arduino; ZigBee; Yeelink; 溫濕度監控
中圖分類號: TN711?34 文獻標識碼: A 文章編號: 1004?373X(2017)06?0140?04
Abstract: A remote temperature and humidity monitoring system was constructed with Yeelink Internet open platform, which takes Arduino as the development platform, and performs the networking of the ZigBee local area network (LAN) by means of the XBee module. This system takes the Arduino UNO as the control panel, uses the XBee module in LAN to transmit the data acquired by the temperature and humidity sensors wirelessly, and employs the Ethernet module W5100 as the ZigBee wireless network gateway to transmit the data from ZigBee network to the Internet. The system can realize the real?time acquisition of temperature and humidity data. The information is acquired by accessing the Yeelink through Internet to execute on?line monitoring. If the abnormal situation of data monitoring occurs, the system sends the alarm information to the terminal through Yeelink, and makes the terminal buzzer send out the sound to remind the people around, which can realize the alarm effect and remote real?time monitoring of the system.
Keywords: Arduino; ZigBee; Yeelink; temperature and humidity monitoring
0 引 言
無線傳感網絡(Wireless Sensor Network,WSN)由大量的傳感器借助一定的無線網絡協議組成,能在一定區域內采集、傳輸、存儲和處理相應的感知信息[1]。
無線傳感網絡的研究與應用中,Arduino作為一款基于單片機并且代碼開源的硬件平臺,十分適合用于低成本無線傳感網的終端控制;ZigBee是由ZigBee聯盟制定的一種可工作在2.4 GHz,868 MHz,915 MHz三個頻段上無線自組網技術標準[2],適用于通信數據傳輸速率要求低、距離短、低功耗的使用場合,因此在傳感器網絡中應用非常廣泛;Yeelink是國內一個對個人用戶免費開放的物聯網云平臺,能借助互聯網的優勢,實現傳感器數據儲存、查看、操作等云功能。
本文使用Yeelink作為傳感網絡云服務器,通過傳感器采集數據,借助ZigBee進行局域網內的無線傳輸,最后借助以太網模塊,實現數據向Yeelink的上傳,完成濕度監控系統的搭建。該監測系統,可以實現環境遠程監控,遇到特殊情況可以遠程操控,發出報警,有利于財產保護、日常監管、突發情況預警等。
1 系統框架
本文設計和搭建的無線傳感探測系統,由多個終端對應一個協調器組成的ZigBee無線傳感網絡進行數據采集,以協調器作為局域網網關,Yeelink作為互聯網端的數據存儲與監控平臺[3],實現數據從實驗室采集到互聯網的上傳與監控。用戶通過電腦或移動終端登錄Yeelink,獲取相應的數據信息,實現遠程監控。具體來說,ZigBee網絡采用星形拓撲,由兩個終端A和B加上一個協調器構成。終端A探測溫度,終端B用作濕度探測,兩個終端采集相應的數據經過ZigBee無線網,傳遞至協調器端,協調器端利用W5100以太網模塊與路由器相連,利用互聯網,將數據傳送到Yeelink進行存儲。
當用戶在遠程觀測到數據出現異常時,可通過Yeelink開關控制功能向終端發出報警信息,報警信息通過互聯網傳遞給協調器端,再經過ZigBee發送給終端,終端在接收報警信息后,驅動蜂鳴器工作,發出報警。系統的具體功能圖如圖1所示。
2 硬件設計
本文系統采用Arduino UNO,核心處理器為ATmega328,具有14路數字輸入/輸出口(其中6路可作為PWM輸出),6路模擬輸入,一個16 MHz晶體振蕩器,一個USB口,一個電源插座,一個ICSP header和一個復位按鈕。同時UNO預置了Bootloader程序,不需要其他外部燒寫器,可直接通過USB下載程序[4]。
溫度傳感器:LM35系列溫度傳感器,其輸出的電壓線性地與攝氏溫度成正比,輸出電壓與攝氏溫度一一對應。其工作電壓范圍4~30 V靈敏度為 10.0 mV/℃,精度在 0.4~0.8 ℃(-55~150 ℃溫度范圍內),重復性好,低輸出阻抗,可單電源和正負電源工作。
濕度傳感器:DHT11 數字溫濕度傳感器,其相應的技術參數為:DC 3.3~5.5 V的供電電壓;濕度方面,20~90%RH的濕度測量范圍,5%RH的測量精度以及1%RH的濕度分辨率。
蜂鳴器:電磁式蜂鳴器,由振蕩器、電磁線圈、磁鐵、振動膜片及外殼等組成。其接通電源后,振蕩器產生的音頻信號電流通過電磁線圈,使電磁線圈產生磁場。振動膜片在電磁線圈和磁鐵的相互作用下,周期性振動發聲。
ZigBee模塊:XBee S2模塊,工作頻段2.4 GHz,采用802.15.4協議棧,通過串口與Arduino間進行通信,支持點對點通信以及點對多點網絡。其基本的參數為:工作電壓3.3 V,電流50 mA,最大通信速率250 KB/s,功耗1 mW 輸出(0 dBm),通信距離可達100 m。
以太網模塊:W5100以太網模塊,采用堆疊式設計,直接插到Arduino上,可組成簡單Web服務器或者利用網絡控制讀寫Arduino的接口數據。
完成以上硬件設備的物理連接,采用C語言編程,通過Arduino基礎開發環境內集成的GCC開源編譯器將C語言編譯成二進制文件并通過USB端口,寫入Arduino平臺[5],實現Arduino控制的工作流程,完成系統搭建。
3 工作流程與代碼
系統主要由終端、協調器端、Yeelink服務器端三部分構成,分別完成傳感數據的采集、傳感網絡的組建以及數據的傳輸、數據的云端存儲等功能。根據終端、協調器端的功能設計,寫入相應的Arduino代碼,并對Yeelink服務器端進行設置,從而實現整個系統的邏輯功能。
Arduino的代碼編寫有著固定的流程和規范,每個程序只有一個setup( ),一個loop( )。當setup( )函數執行完后,就會循環執行loop( )函數內的代碼[6]。因此Arduino的代碼實現中,setup( )函數主要完成相應的初始化工作,而loop( )函數內完成相應的功能。
3.1 終 端
終端主要功能是采集傳感數據,并利用XBee模塊透明傳輸模式(Transparenet Operation),直接替換控制系統中串口間的傳輸導線,實現無線數據傳輸[7],將傳感器數據發送至協調器;同時監聽和接收協調器的報警信息,驅動蜂鳴器,實現報警功能,其工作流程圖見圖2。
對于終端的XBee模塊,首先要通過X?CTU軟件進行相應的配置,包括個人局域網ID,即PAN ID的配置,接著配置目標地址的高低位。每塊XBee無線模塊的背面都有一個64位序列號地址,地址高位部分0013A200,它屬于DIGI預先分配的地址空間,而每塊模塊地址的地位部分都是惟一的。XBee模塊間的相互通信是根據其對應節點的序列號地址來進行的[8]。
XBee模塊配置完成后,連接傳感器和Arduino可以實現溫濕度的探測。終端在進行數據探測的同時,監聽來自協調器端的信息,沒有報警信息時,與蜂鳴器相連的管腳輸出低電平,當接收到報警信息時,使與蜂鳴器相連的管腳輸出高電平,從而發出報警。其代碼如下:
…
if(Serial.available() >0 //判斷是否有來自協調器端的信息
recv=Serial.read(); //接收字符的讀取
…
digitalWrite(warning,HIGH);//輸出高電平,蜂鳴器發聲報警
delay(1 000); //延遲1 s
}
…
}
…
3.2 協調器端
協調器的主要功能是接收來自ZigBee局域網的傳感數據并將其傳至Yeelink,監聽來自互聯網端的報警信息,若有報警操作,將此消息通過ZigBee發送至對應終端,其工作流程如圖3所示。
協調器作為局域網的網關,通過廣播的形式向局域網內所有終端設備節點發送信息,因此X?CTU會將其目標地址默認地設置為廣播地址。在ZigBee協議初始化后,協調器通過向周圍結點發送廣播信標幀以尋求設備同步,終端結點收到協調器廣播幀時,得到協調器的地址和信道,通過此信息便可申請加入網絡[9],完成系統組網。系統組網完成后,將實現數據在ZigBee局域網內數據的傳輸。實現協調器接收終端傳感器數據的功能部分代碼如下:
if(Serial.available() >0){ //判斷是否有來自終端的數據信息
recv=Serial.read(); //接收的第1個字符讀取
if(recv == ′B′) { //判斷是否為B端的信息
Serial.println("the data of B is received "); //提示字符
int a1= Serial.read(); //接收的第1個字符讀取
int a2= Serial.read(); //接收的第2個字符讀取
a3=a1*10+a2-528;
//利用ASCII碼與十進制碼對應數字相差48將兩次接收到的數據重新組合成接收的數據
}
…
W5100以太網模塊與Yeelink服務器通過DHCP協議進行初始化建立聯系。DHCP協議采用客戶端/服務器模型,主機地址的動態分配任務由網絡主機驅動。當設備登陸網絡時,服務器會向客戶端發送包含分配的IP地址、子網掩碼、DNS服務器和網關等信息的數據包,實現IP地址信息的動態配置[10]。
協調器成功連接服務器后,將傳感數據進一步傳輸至服務器。函數sendData(),利用HTTP協議,實現傳感數據向服務器上傳的功能:
void sendData(intthisData,int flag) {
//如果連接成功,利用80端口
if (client.connect(server, 80)) { //發送HTTP POST請求
…
intthisLength = 10 + getLength(thisData);
client.println(thisLength); //計算傳感器數據長度
…
client.print(thisData);
…
}
…
函數getData(),監聽并獲取用戶通過Yeelink發送的報警信息:
voidgetData(int flag) {
…
if (client.connect(server, 80)) { //發送GET請求
…
client.print(SENSORIDS[flag]);
//通過flag來獲取不同開關信息
…
}
…
以上函數發送POST請求和GET請求來上傳數據和接收服務器的返回信息,從而完成對終端的控制。
…
if (returnValue.charAt(returnValue.length()-1) == ′1′)
…
else if(returnValue.charAt(returnValue.length()-1) == ′0′)
…
當協調器監聽到來自服務器端的開關狀態值為1時,說明用戶發出了報警信息,則向終端發送報警信息,而監聽到開關狀態值為0時,說明狀態正常,不用發送報警信息。
3.3 Yeelink服務器端
Yeelink物聯網云平臺為用戶提供傳感器云服務。其通過實時數據處理,提供安全可靠的狀態監控[11]。要使用Yeelink,需進行注冊并創建相應的傳感器設備,最后調用官方的API。API key用來授權對設備、傳感器的數據等操作。在Yeelink中創建一個設備,會產生一個URL,該URL的一個HTTP POST請求會為指定的傳感器創建一個新的數據點,使用此API來為傳感器存儲歷史數據[12]。設置完成后,Yeelink服務器可以用作數據的云端存儲和遠程訪問,再結合之前的傳感器、ZigBee組網以及協調器的功能,溫濕度監控網絡的搭建基本完成。
4 系統工作的實際測試
給Arduino上電以后,A端探測溫度,B端檢測濕度,并將數據通過ZigBee進行傳輸。協調器端數據上傳至Yeelink上。此時可以通過協調器端的串口監視與Yeelink網頁查看傳感器工作情況以及數據的發送情況。系統實際測試過程中,Yeelink網頁上對應顯示的數據如圖4所示。
經測試,監控系統所探測的溫度、濕度等傳感數據能夠順利上傳至Yeelink服務器上,系統的監測功能正常實現。同樣,通過改變Yeelink上創建的報警開關狀態,終端的蜂鳴器能根據開關狀態發出或者停止報警,其控制報警的功能能夠正常實現。
為了驗證設備工作的穩定性。給設備長時間供電并采集數據,設備工作持續工作時,濕度曲線平穩,變化不大,濕度探測的功能基本正常,能連續長時間工作。和濕度設備一樣,溫度終端所測溫度變化與實際相符。溫度探測的功能正常。
5 結 語
本文工作以Arduino作為開發平臺,利用傳感器、以太網模塊、ZigBee無線模塊以及互聯網平臺Yeelink搭建了一個能夠探測環境溫濕度的監控系統。實現了環境數據的采集及實時上傳。并且具有報警功能。通過該系統,實現了系統對實驗室長期監測的功能。本文所搭建的系統,采用分布式布局,重點解決了ZigBee無線網絡內數據收發的編碼轉換以及多點通信過程中的識別判斷問題,可以進行拓展,利用更多節點擴大檢測范圍。系統將ZigBee無線網絡以及互聯網結合起來,在局域網內利用ZigBee無線協議進行傳輸,減小了采集布線對監控環境本身的影響,增大了探測點設置的靈活性,而結合互聯網,實現了遠程監控。最后,本系統實現具有數據的雙向流通,可實現對溫濕度查看以及遠程報警的功能,增加了系統在監控網絡中的實用性。
注:本文通訊作者為蔡志崗。
參考文獻
[1] AKYILDIZ I F. A survey on sensor network [J]. IEEE communications magazine, 2002, 40(8): 102?114.
[2] 王錦.無線網絡傳感器應用綜述[J].中國科技縱橫,2013(9):45.
[3] 楊增汪,陳斯,顧明亮.基于XBee的無線振動信號檢測傳感器節點設計[J].煤炭技術,2010,29(12):51?52.
[4] 王家兵,楊志群,吳洪明.Arduino高精度靜壓液位測量與控制系統[J].儀表技術與傳感器,2013(8):44?46.
[5] 何澤驊,劉國華.基于Arduino的數控穩壓電源設計[J].現代電子技術,2012,35(20):63?65.
[6] SCHMIDT M. Arduino: a quick?start guide [M]. US: The Pragmatic Programmers, 2011.
[7] 朱志偉.XBee無線數傳模的應用測試[J].電子制作,2014(3):42.
[8] TITUS J A.例說XBee無線模塊開發[M].北京:機械工業出版社,2014:3?8.
[9] 胡小俊,趙濟景.基于ZigBee?GPRS的土壤墑情檢測系統[J].現代電子技術,2014,37(6):59?61.
[10] LEWIS W.思科網絡技術學院教程:網絡基礎知識[M].北京:人民郵電出版社,2009:57?58.
[11] 卞曉曉,方為建,李凡.基于Yeelink的遠程室內空氣檢測系統設計與開發[J].電腦編程技術與維護,2015(10):26?27.
[12] 杜一騰,遲宗濤.基于Arduino與Yeelink平臺的實時環境監測系統[J].技術縱橫,2014(10):27?28.