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