我正在使用2个XBee pro S1,我想读取我的PC上协调器收到的数据包,它启用了API_2,所有其他连接都正常完成,我可以看到带有XCTU的数据包,我是使用python xbee库,但它没有输出:
守则:
import serial.tools.list_ports
from xbee import XBee
import serial
ports = list(serial.tools.list_ports.comports())
for p in ports: #print the list of ports
print p
def toHex(s):
lst = []
for ch in s:
hv = hex(ord(ch)).replace('0x', '')
if len(hv) == 1:
hv = '0'+hv
hv = '0x' + hv
lst.append(hv)
def decodeReceivedFrame(data):
source_addr_long = toHex(data['source_addr_long'])
source_addr = toHex(data['source_addr'])
id = data['id']
samples = data['samples']
options = toHex(data['options'])
return [source_addr_long, source_addr, id, samples]
PORT = '/dev/ttyUSB0'
BAUD_RATE = 9600
ser = serial.Serial(PORT, BAUD_RATE)
print "Serial ports initialised...."
xbee = XBee(ser,escaped=True)
print "XBee object created"
while True:
try:
response = xbee.wait_read_frame()
sleep(0.5)
decodedData = decodeReceivedFrame(response)
print decodedData
print "data decoded"
except KeyboardInterrupt:
break
ser.close()
端口号和波特率是连接的,每次我将协调器重新插入我的PC时,我都会将其更改为相应的端口号。 我的输出如下:
Serial ports initialised....
XBee object created
它保持这样并且没有输出,即使我看到RX指示灯闪烁。 下面是仅用pyserial编写的代码:
import serial
from time import sleep
port = '/dev/ttyUSB0'
baud = 9600
ser = serial.Serial(port, baud)
data = ""
while True:
try:
while ser.in_waiting:
sleep(1)
data = ser.read()
print data
except KeyboardInterrupt:
break
ser.close()
它提供以下输出。
有人可以帮忙。
答案 0 :(得分:0)
您确定拥有正确的串口和波特率吗? xbee
包是否支持API模式2?它可能只适用于API模式1。
该软件包是否具有访问原始字节流而不是尝试读取帧的方法?你能配置它来解析错误吗?
我会先打印response
,直到您看到您正在接收数据。为什么在该循环中包含sleep()
调用?
我不确定您要在toHex()
中尝试完成什么,但您可能希望查看Python方法struct.unpack()
或替换您在hv
上执行的所有工作与'0x%02X' % ord(ch)
。