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