5

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

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

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

4

4 回答 4

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 库。

于 2012-11-18T01:17:42.247 回答
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 设置为任何字符串,它用于识别正确的回复。

于 2012-11-22T18:23:16.263 回答
0

第一个问题是“您确定您的设备处于 API 模式吗?”。您看到此错误是因为接收端看到一个类型为“tx”(类型 0x01)的帧进入。虽然这是您要求发送的帧,但我相信您希望它以类型“rx”的形式接收(类型 0x81)由接收端。

如果您查看 /xbee/ieee.py 中的代码,您将看到两个列表: * api_commands = Outgoing:您永远不会期望这些帧类型之一传入。* 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”帧——可能所有 XBees 上都没有启用 API 模式?

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

于 2017-04-18T16:01:39.503 回答
-1
ser = serial.Serial(SERIAL_PORT, 9600)
bee = ZigBee(ser) # <--

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

于 2014-03-13T13:20:45.923 回答