2012-11-18 61 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

相关问题