Python xbee库没有输入帧的输出

时间:2017-06-30 05:59:38

标签: python python-2.7 pyserial xbee

我正在使用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()

它提供以下输出。

有人可以帮忙。

1 个答案:

答案 0 :(得分:0)

您确定拥有正确的串口和波特率吗? xbee包是否支持API模式2?它可能只适用于API模式1。

该软件包是否具有访问原始字节流而不是尝试读取帧的方法?你能配置它来解析错误吗?

我会先打印response,直到您看到您正在接收数据。为什么在该循环中包含sleep()调用?

我不确定您要在toHex()中尝试完成什么,但您可能希望查看Python方法struct.unpack()或替换您在hv上执行的所有工作与'0x%02X' % ord(ch)