2012-11-18 56 views
5

我應該使用哪個庫,以及如何使用?如何使用python庫將數據串發送到XBee?

Python XBee似乎只能在API模式下發送命令,而且我找不到任何人使用它發送字符串的示例。也許我誤解了什麼API模式,但我無法在文檔中找到有效載荷...

Digi's Python Socket extensions是否被烘焙到Python?我似乎無法得到他們聲稱在我的Python(2.7.3rc2)中定義的任何常量,我也不能找到如何在他們的網站上獲得這些擴展的提及。看起來這可能是一種傳遞字符串的方式,但我該如何使用它?

回答

8

如果Xbee作爲串行設備連接到計算機,則可以使用串行庫,如pySerial。以下是我剛完成的一個項目的一些代碼片段。

# Connect to Xbee 
self.ser = serial.Serial(port, baud, timeout=timeout) 

# Send data (a string) 
self.ser.write(packet) 

# Read data 
self.data += self.ser.read() 

,我們在透明模式下使用Xbees - 每次一端寫字節是與讀取的另一端可見。不需要特殊的Xbee庫。

+0

所以的XBee串行端口將重複串到的XBee網絡,並且還寫它從遠程XBees接收到串行的所有數據?我假設兩個XBees都需要處於透明模式? –

+0

我只用過兩個Xbees直接通信,從來沒有一個更大的網絡。如果兩者都處於透明模式,那麼您在一端寫入的任何字節都將出現在另一端,就像正常串行一樣。 – Tim

7

我也推薦使用pySerial,如果你有一個非常簡單的設置和只有兩個XBees,但如果你有更復雜的事情,那麼你最好用一個庫。

python-xbee庫的使用非常簡單,但缺少任何綜合性文檔。要發送和使用它得到簡單的信息:

from xbee import XBee 
from serial import Serial 

PORT = '/dev/ttyUSB0' 
BAUD = 9600 

ser = Serial(PORT, BAUD) 

xbee = XBee(ser) 
# Send the string 'Hello World' to the module with MY set to 1 
xbee.tx(dest_addr='\x00\x01', data='Hello World') 

# Wait for and get the response 
print(xbee.wait_read_frame()) 

ser.close() 

您可以通過執行發送AT命令:

xbee.at(frame_id='A', command='MY') 
reply = xbee.wait_read_frame() 
print(reply) 

# Getting the integer value out of reply 
import struct  
print(struct.unpack('>h', reply['parameter'])[0]) 

您可以將frame_id設置爲任何字符串,它是用來識別正確的答覆。

+0

我最近接管了python-xbee(你的pip安裝的那個)的管理,因爲它已經多年沒有更新過了。我很高興接受提高文檔質量的pull請求! https://github.com/nioinnovation/python-xbee/blob/master/docs/source/index.rst – hansmosh

0
ser = serial.Serial(SERIAL_PORT, 9600) 
bee = ZigBee(ser) # <-- 

嘗試使用ZigBee而不是XBee,如果失敗的話。

0

第一個問題是「您確定您的設備處於API模式嗎?」。 你看到這個錯誤是因爲接收端看到一個類型爲'tx'(類型0x01)的幀。儘管這是你請求發送的幀,但我相信你會期望它被接收爲類型'rx '(鍵入0x81)由接收端。

如果你看一下代碼/xbee/ieee.py你會看到兩個列表: * api_commands =傳出:你會永遠不要指望這些幀類型的傳入之一。 * api_responses =傳入:你應該只看到這些幀類型傳入。

如果磁帶庫檢測api_commands的一個來電,它將引發你看到的錯誤: "Incoming frame with id 1 looks like a command frame of type 'tx' (these should not be received). Are you sure your devices are in API mode?"

我不知道你的情況100%,但它看起來像你的外出「TX」框架沒有被翻譯到另一端的傳入「rx」幀 - 可能API模式在所有XBees上都未啓用?

另見https://github.com/nioinnovation/python-xbee/issues/44

相關問題