魏 鋼(錦州師范高等??茖W(xué)校,遼寧 錦州 121000)
?
基于聯(lián)創(chuàng)中控物聯(lián)網(wǎng)平臺(tái)應(yīng)用程序與ZigBee網(wǎng)關(guān)通信協(xié)議的研究
魏鋼
(錦州師范高等??茖W(xué)校,遼寧錦州121000)
摘要:ZigBee網(wǎng)絡(luò)節(jié)點(diǎn)之間的數(shù)據(jù)傳輸具有一定數(shù)據(jù)格式,物聯(lián)網(wǎng)應(yīng)用程序通過對這些數(shù)據(jù)讀寫實(shí)現(xiàn)對設(shè)備的控制。本文通過對“聯(lián)創(chuàng)中控物聯(lián)網(wǎng)平臺(tái)”應(yīng)用程序與ZigBee網(wǎng)關(guān)通信協(xié)議的研究,介紹數(shù)據(jù)通信的格式,促進(jìn)開發(fā)人員對設(shè)備的了解和應(yīng)用程序的編寫。
關(guān)鍵詞:ZigBee;物聯(lián)網(wǎng);網(wǎng)關(guān)
ZigBee是基于IEEE802.15.4標(biāo)準(zhǔn)的低功耗局域網(wǎng)協(xié)議,它是一種短距離、低功耗的無線通信技術(shù)。聯(lián)創(chuàng)中控研發(fā)的無線傳感網(wǎng)絡(luò)實(shí)驗(yàn)教學(xué)平臺(tái)整體上包括ZigBee網(wǎng)絡(luò),Android智能網(wǎng)關(guān)服務(wù)程序和Android終端應(yīng)用程序三部分。通信過程是傳感器節(jié)點(diǎn)通過CC2530無線射頻將數(shù)據(jù)傳輸?shù)膮f(xié)調(diào)器節(jié)點(diǎn)上,協(xié)調(diào)器節(jié)點(diǎn)通過串口與Android智能網(wǎng)關(guān)服務(wù)程序進(jìn)行通信,Android終端應(yīng)用程序通過3G/WIFI或以太網(wǎng)方式與Android智能網(wǎng)關(guān)服務(wù)程序進(jìn)行通信,進(jìn)而實(shí)現(xiàn)控制各個(gè)傳感器節(jié)點(diǎn)。實(shí)際開發(fā)中Android終端應(yīng)用程序主要使用了以太網(wǎng)Socket編程技術(shù),Android終端應(yīng)用程序作為TCP通信的客戶端,Android智能網(wǎng)關(guān)程序作為TCP通信的服務(wù)端,客戶端把數(shù)據(jù)通過TCP通信把數(shù)據(jù)發(fā)送到服務(wù)端,服務(wù)端以串口通信方式把數(shù)據(jù)發(fā)送給協(xié)調(diào)器節(jié)點(diǎn),協(xié)調(diào)器節(jié)點(diǎn)解析數(shù)據(jù)發(fā)送給各個(gè)傳感器節(jié)點(diǎn)實(shí)現(xiàn)控制[1]。研究終端應(yīng)用程序與ZigBee網(wǎng)關(guān)應(yīng)用程序通信協(xié)議是開發(fā)應(yīng)用程序的前提,協(xié)議的測試與使用方法具體內(nèi)容如下:
首先,上位機(jī)的網(wǎng)絡(luò)配置。對于Win7操作系統(tǒng)右擊桌面的網(wǎng)絡(luò),點(diǎn)擊屬性打開網(wǎng)絡(luò)和共享中心,點(diǎn)擊本地連接,前提是網(wǎng)卡與無線路由器設(shè)備之間有物理連接,點(diǎn)擊屬性進(jìn)行網(wǎng)卡配置,使用靜態(tài)IP地址,輸入IP地址為192.168.1.2,子網(wǎng)掩碼為255.255.255.0,默認(rèn)網(wǎng)關(guān)為192.168.1.1。
其次,準(zhǔn)備一臺(tái)無線路由器,用于實(shí)現(xiàn)通訊設(shè)備間無線或有線組網(wǎng)。啟動(dòng)IE瀏覽器,在地址欄里輸入http://192.168.1.1,進(jìn)行無線路由器配置。對于不同廠家的無線路由器的IP和配置方式可能不同,查看產(chǎn)品使用說明書即可。設(shè)置無線路由器的登錄密碼,設(shè)置密碼與確認(rèn)密碼保持一致,如果忘記密碼,按Reset鍵可以恢復(fù)出廠設(shè)置。上網(wǎng)設(shè)置可以跳過,輸入無線名稱和無線密碼,IP地址使用默認(rèn)192.168.1.1。
最后,網(wǎng)關(guān)的網(wǎng)絡(luò)配置。物理連接好網(wǎng)關(guān)和無線路由器,啟動(dòng)智能網(wǎng)關(guān)的Android系統(tǒng)。點(diǎn)擊設(shè)置關(guān)閉WIFI,選擇以太網(wǎng)絡(luò)。點(diǎn)擊打開網(wǎng)絡(luò),進(jìn)行網(wǎng)絡(luò)配置。獲取IP方式選擇靜態(tài)IP,輸入IP地址192.168.1.3,子網(wǎng)掩碼為255.255.255.0,網(wǎng)關(guān)為192.168.1.1,保存配置。配置結(jié)束后,在上位機(jī)上啟動(dòng)命令提示符,輸入ping 192.168.1.3,測試上位機(jī)與網(wǎng)關(guān)設(shè)備組網(wǎng)是否成功。
終端應(yīng)用程序與ZigBee網(wǎng)關(guān)的通信協(xié)議是具有一定格式的,每一條命令由起始位、命令、數(shù)據(jù)長度、數(shù)據(jù)和校驗(yàn)五部分構(gòu)成,具體說明如表1所示。
表1 命令格式
SOP表示命令的開始,長度為1個(gè)字節(jié),取固定值為0x02。
CMD表示命令標(biāo)識(shí)碼,長度為2個(gè)字節(jié),用于區(qū)別不同的命令。其中0x2900表示上位機(jī)向網(wǎng)關(guān)發(fā)送數(shù)據(jù);0x6900表示網(wǎng)關(guān)向上位機(jī)響應(yīng);0x6980表示網(wǎng)關(guān)向上位機(jī)響應(yīng)具體數(shù)據(jù)。
LEN表示DATA域的長度,長度為1個(gè)字節(jié),為0表示沒有數(shù)據(jù)域。DATA表示數(shù)據(jù)格式,長度為n個(gè)字節(jié),由EP和APP_MSG構(gòu)成。其中EP為固定一個(gè)字節(jié)取值為 0x02;APP_MSG為具體的數(shù)據(jù)通信幀,由2個(gè)字節(jié)的網(wǎng)絡(luò)地址、2個(gè)字節(jié)的命令id和x個(gè)字節(jié)數(shù)據(jù)包構(gòu)成,詳細(xì)說明如表2所示。
表2 APP_MSG格式
FCS表示數(shù)據(jù)校驗(yàn),長度為1個(gè)字節(jié),從CMD到DATA的異或和。
ZigBee有兩種類型地址,一種是64位IEEE地址,即MAC地址,它是全球唯一的地址,一經(jīng)分配就將跟隨設(shè)備一生,它通常由制造商或者被安裝時(shí)設(shè)置,這些地址由IEEE組織來維護(hù)和分配。另一種是16位的網(wǎng)絡(luò)地址,相對于IEEE地址又叫做短地址,可以由開發(fā)人員自己指定,但是為了防止指定網(wǎng)絡(luò)地址沖突,通常使用分布式尋址方案來動(dòng)態(tài)分配網(wǎng)絡(luò)地址,從而保證整個(gè)網(wǎng)絡(luò)中所有分配的地址都是唯一的[2]。在單一的ZigBee網(wǎng)絡(luò)內(nèi)部主要通過網(wǎng)絡(luò)地址來區(qū)分不同的設(shè)備,默認(rèn)ZigBee網(wǎng)絡(luò)的協(xié)調(diào)器節(jié)點(diǎn)的網(wǎng)絡(luò)地址為0x0000。
測試傳感器節(jié)點(diǎn)網(wǎng)絡(luò)地址可以通過測試協(xié)調(diào)器節(jié)點(diǎn)鄰居表的辦法來獲得,鄰居表的參數(shù)標(biāo)示為0015。啟動(dòng)Android智能網(wǎng)關(guān),選擇啟用ZigBee網(wǎng)關(guān)。在上位機(jī)上安裝網(wǎng)絡(luò)調(diào)試助手工具,協(xié)議選擇TCP Client,本地主機(jī)地址自動(dòng)獲得為192.168.1.2,遠(yuǎn)程主機(jī)地址和端口為192.168.1.3:8320,其中8320為智能網(wǎng)關(guān)TCP服務(wù)端的端口號(hào),點(diǎn)擊連接,按鈕變成紅色表示網(wǎng)絡(luò)連接成功,選中按十六進(jìn)制發(fā)送,輸入命令02 29 00 07 02 00 00 00 01 00 15 38,表示向協(xié)調(diào)器詢問鄰居表信息,命令說明如下:
02表示命令開始,2900表示上位機(jī)向網(wǎng)關(guān)發(fā)送數(shù)據(jù),07表示發(fā)送數(shù)據(jù)的長度,02表示數(shù)據(jù)開始,0000表示目標(biāo)地址是協(xié)調(diào)器,0001表示要讀信息,0015表示要讀取節(jié)點(diǎn)的鄰居表信息,38表示29 00 07 02 00 00 00 01 00 15的異或和結(jié)果。在協(xié)議研究中由于經(jīng)常要用到異或和,可以設(shè)計(jì)一個(gè)用于實(shí)現(xiàn)異或計(jì)算的類,實(shí)現(xiàn)自動(dòng)計(jì)算異或功能[3],代碼如下:
點(diǎn)擊發(fā)送后,接收區(qū)返回?cái)?shù)據(jù)為02 69 00 01 00 68 02 69 80 0C 00 00 80 01 00 00 15 02 2F 3E 46 D6 F2,信息說明如下:
第一部分,02 69 00 01 00 68,表示網(wǎng)關(guān)向上位機(jī)響應(yīng)。
第二部分,02 69 80 0C 00 00 80 01 00 00 15 02 2F 3E 46 D6 F2,表示網(wǎng)關(guān)向上位機(jī)響應(yīng)的數(shù)據(jù)信息。其中02表示命令開始,6980表示網(wǎng)關(guān)向上位機(jī)響應(yīng),0C表示響應(yīng)數(shù)據(jù)的長度,0000表示響應(yīng)的節(jié)點(diǎn)地址,8001表示讀參數(shù)響應(yīng),00表示讀參數(shù)響應(yīng)正常,0015表示鄰居表參數(shù),02表示鄰居表個(gè)數(shù),2F3E表示第一個(gè)鄰居表網(wǎng)絡(luò)地址,46D6表示第二個(gè)鄰居表網(wǎng)絡(luò)地址,F(xiàn)2表示69 80 0C 00 00 80 01 00 00 15 02 2F 3E 46 D6異或和。
傳感器在加入ZigBee網(wǎng)之前要進(jìn)行設(shè)備類型編號(hào),設(shè)備類型參數(shù)為0005,常用類型編號(hào)如表3所示。
表3 傳感器設(shè)備編號(hào)
由于網(wǎng)絡(luò)地址是由ZigBee網(wǎng)絡(luò)動(dòng)態(tài)生成,每次實(shí)驗(yàn)的數(shù)據(jù)可能有所不同。經(jīng)測試協(xié)調(diào)器鄰居表的網(wǎng)絡(luò)地址為a75d,在網(wǎng)絡(luò)通訊助手工具上發(fā)送02 29 00 07 02 a7 5d 00 01 00 05 d2,查看傳感器的設(shè)備類型編號(hào),命令說明如下:
02表示命令開始,2900表示上位機(jī)向網(wǎng)關(guān)發(fā)送數(shù)據(jù),07表示數(shù)據(jù)長度,02表示數(shù)據(jù)開始,a75d表示目標(biāo)設(shè)備的網(wǎng)絡(luò)地址,0001表示讀信息,0005表示設(shè)備類型,d2表示29 00 07 02 a7 5d 00 01 00 05異或和。
點(diǎn)擊發(fā)送后,接受區(qū)返回?cái)?shù)據(jù)為02 69 00 01 00 68 02 69 80 08 a7 5d 80 01 00 00 05 42 DD,其中倒數(shù)第2個(gè)字節(jié)數(shù)據(jù)42表示設(shè)備的編號(hào),對照傳感器設(shè)備編號(hào)表,確認(rèn)為直流電機(jī)傳感器。
傳感器節(jié)點(diǎn)操作可以分為讀和寫兩種。例如對直流電機(jī)傳感器節(jié)點(diǎn)的讀操作,可以查看當(dāng)前電機(jī)的狀態(tài);對直流電機(jī)傳感器節(jié)點(diǎn)的寫操作,可以控制電機(jī)正轉(zhuǎn),反轉(zhuǎn)和停止。關(guān)于直流電機(jī)傳感器節(jié)點(diǎn)的設(shè)備參數(shù)說明如表4所示。
表4 直流電機(jī)傳感設(shè)備參數(shù)
5.1查看直流電機(jī)傳感器狀態(tài)
發(fā)送數(shù)據(jù):02 29 00 07 02 a7 5d 00 01 42 02 97
接受數(shù)據(jù):02 69 00 01 00 68 02 69 80 08 a7 5d 80 01 00 42 02 00 DA,其中4202表示讀設(shè)備參數(shù),00表示電機(jī)處于停止?fàn)顟B(tài)。
5.2控制直流電機(jī)傳感器正轉(zhuǎn)
發(fā)送數(shù)據(jù):02 29 00 08 02 a7 5d 00 02 42 01 01 99,其中0002表示寫請求,4201表示寫設(shè)備參數(shù),01表示電機(jī)的正轉(zhuǎn)數(shù)度。
收到數(shù)據(jù):02 69 00 01 00 68 02 69 80 05 A7 5D 80 02 00 94 02 69 80 07 a7 5d 00 03 42 02 01 56,其中8002表示寫響應(yīng),00表示寫成功,0003表示自動(dòng)上報(bào)直流電機(jī)傳感器的狀態(tài),01是正轉(zhuǎn)。
5.3控制直流電機(jī)傳感器反轉(zhuǎn)
發(fā)送數(shù)據(jù):02 29 00 08 02 a7 5d 00 02 42 01 ff 67,其中0002表示寫請求,4201表示寫設(shè)備參數(shù),ff表示電機(jī)的反轉(zhuǎn)的數(shù)度。
收到數(shù)據(jù):02 69 00 01 00 68 02 69 80 05 A7 5D 80 02 00 94 02 69 80 07 a7 5d 00 03 42 02 ff 58,其中8002表示寫響應(yīng),00表示寫成功,0003表示自動(dòng)上報(bào)直流電機(jī)傳感器的狀態(tài),ff是反轉(zhuǎn)。
5.4控制直流電機(jī)傳感器停止
發(fā)送數(shù)據(jù):02 29 00 08 02 a7 5d 00 02 42 01 00 98,,其中0002表示寫請求,4201表示寫設(shè)備參數(shù),00表示電機(jī)停止。
收到數(shù)據(jù):02 69 00 01 00 68 02 69 80 05 A7 5D 80 02 00 94 02 69 80 07 a7 5d 00 03 42 02 00 57,其中8002表示寫響應(yīng),00表示寫成功,0003表示自動(dòng)上報(bào)直流電機(jī)傳感器的狀態(tài),00是停止。
通過對“聯(lián)創(chuàng)中控物聯(lián)網(wǎng)平臺(tái)”的使用,對傳感器節(jié)點(diǎn)網(wǎng)絡(luò)地址、傳感器節(jié)點(diǎn)設(shè)備類型和傳感器節(jié)點(diǎn)使用的測試,深入分析了應(yīng)用程序與ZigBee網(wǎng)關(guān)通信協(xié)議的數(shù)據(jù)格式和使用方式,并給出了具體的測試方案,對于物聯(lián)網(wǎng)應(yīng)用層程序開發(fā)人員具有一定指導(dǎo)作用。
參考文獻(xiàn):
[1]聯(lián)創(chuàng)中控(北京)科技有限公司.ZigBee無線傳感網(wǎng)技術(shù)與應(yīng)用系統(tǒng)開發(fā).
[2]周武斌.ZigBee無線組網(wǎng)技術(shù)的研究[D].湖南:中山大學(xué),2009.
[3]劉文杰,鄭玉,劉志昊.Java 7實(shí)用教程[M].北京:清華大學(xué)出版社,2013.
DOI:10.16640/j.cnki.37-1222/t.2016.11.129
作者簡介:魏鋼(1978-),男,遼寧盤錦人,碩士,講師,主要從事Java Web開發(fā)、物聯(lián)網(wǎng)應(yīng)用程序開發(fā)研究。