2017-08-11 119 views
0

我想使用Digi XStick2 ZB作爲一個ZigBee傳感器和執行器(溫度和溼度,接觸傳感器,漏水,電源插頭等)的ZigBee控制器(通過USB連接,並作爲串行接口在/dev/ttyUSB0上可見) 。換句話說,我正在尋找配置網狀網絡並與傳感器/執行器進行通信的方式。通過xbee.send()發送的命令的協議是什麼?

我發現python xbee並寫了一個簡單的Python腳本的USB記憶棒進行通信:

#!/usr/bin/python 
import serial 
import time 
from xbee import ZigBee 

def print_data(data): 
    print "Data received:", data 

serial_port=serial.Serial('/dev/ttyUSB0', 9600) 
zbee = ZigBee(serial_port, callback=print_data) 

print "Sending some command" 
zbee.send("at", frame='A', command='MY', parameter=None) 
print "Waiting..." 
while True: 
    try: 
     time.sleep(0.001) 
    except KeyboardInterrupt: 
     break 

zbee.halt() 
serial_port.close() 

它的工作原理,我得到我的命令的一些反應:

$ ./test.py 
Sending some command 
Waiting... 
Data received: {'status': '\x00', 'frame_id': '\x01', 'parameter': '\x00\x00', 'command': 'MY', 'id': 'at_response'} 

但我可以」 t找到關於使用的協議的任何內容(即,我可以發送的消息的內容) - 是否有一些我可以使用的命令參考或協議定義?

另外,有沒有一種更簡單的方法(更高級別的庫?)通過USB棒控制傳感器?

回答

0

像往常一樣,我找到了答案,詢問後不久......我看起來像XBee ZB型支持兩種模式:

要報價:

這個例子演示了AT模式下的XBee操作。 AT模式是 與「透明」模式的代名詞。在AT模式下,任何發送至 XBee模塊的數據都會立即發送至內存中由 目標地址標識的遠程模塊。當模塊處於AT模式時,用戶或主機微控制器可以配置 ,方法是先將模塊 置於命令模式,然後通過UART端口發送預定義的AT命令 。當您不需要經常更改目標地址,或者您有一個非常簡單的網絡或簡單的點對點通信時,此模式非常有用。對於涉及到節點與多個目標交談的較大網絡 ,API模式更有用 。在API模式下,不是串行發送AT命令,而是組裝包含目標地址的數據包。 API模式 允許您更快地更改目標地址,因爲不需要輸入命令模式 。如果 用戶需要更改遠程模塊的配置,則API模式也很有用。這個 項目專注於AT模式操作。

文章包含鏈接的文檔兩種模式:https://eewiki.net/download/attachments/24313921/XBee_ZB_User_Guide.pdf?version=1&modificationDate=1380318639117&api=v2


一份簡短的工作比如現在是:

#!/usr/bin/python 
import serial 
import time 
from xbee import ZigBee 

def print_data(data): 
    print "Data received:", data 

serial_port=serial.Serial('/dev/ttyUSB0', 9600) 
xbee = ZigBee(serial_port, callback=print_data) 

xbee.send("at", frame='A', command='SH', parameter=None) 
xbee.send("at", frame='A', command='SL', parameter=None) 
while True: 
    try: 
     time.sleep(0.001) 
    except KeyboardInterrupt: 
     break 

xbee.halt() 
serial_port.close() 

輸出:

Data received: {'status': '\x00', 'frame_id': '\x01', 'parameter': '\x00\x01\x02\x03', 'command': 'SH', 'id': 'at_response'} 
Data received: {'status': '\x00', 'frame_id': '\x01', 'parameter': '\x04\x05\x07\x07', 'command': 'SL', 'id': 'at_response'} 

這檢索串口控制器的編號(在這種情況下爲01020304050607)。

希望它可以幫助別人。