如何使用python库将数据字符串发送到XBee?

时间:2012-11-18 01:01:16

标签: python xbee

我应该使用哪个库,以及如何使用?

Python XBee似乎只能在API模式下发送命令,我找不到任何人使用它来发送字符串的示例。也许我误解了API模式是什么,但我在文档中找不到有效载荷......

Digi's Python Socket extensions是否已融入Python?我似乎无法获得他们声称在我的Python(2.7.3rc2)中定义的任何常量,也无法找到如何在他们的网站上获得这些扩展。看起来这可能是一种传递字符串的方法,但我该如何使用呢?

4 个答案:

答案 0 :(得分: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库。

答案 1 :(得分:7)

如果你有一个非常简单的设置并且只有两个XBees,我也建议使用pySerial,但是如果你有更复杂的东西,那么你最好使用一个库。

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设置为任何字符串,并用于识别正确的回复。

答案 2 :(得分:0)

第一个问题是"您确定您的设备处于API模式吗?"。 您看到此错误,因为接收端正在看到类型为' tx' (类型0x01)进来。虽然这是你请求发送的帧,但我相信你会期望它被收到类型' rx' (接收端输入0x81)。

如果你查看/xbee/ieee.py中的代码,你会看到两个列表: * api_commands =传出:你永远不会期望这些帧类型中的一个传入。 * api_responses = Incoming:你应该只看到这些帧类型传入。

如果库检测到其中一个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'在另一端的帧 - 可能在所有XBees上都没有启用API模式?

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

答案 3 :(得分:-1)

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

如果失败,请尝试使用ZigBee而不是XBee。