Python xbee 库没有输入帧的输出
Python xbee library no output for incoming frames
我正在使用 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()
端口号和波特率是连接的,每次我把协调器重新插到我的电脑上时,我都会把它改成合适的端口号。
我的输出看起来像:
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()
它给出了以下输出。
有好心人帮忙吗
您确定串口和波特率正确吗? xbee
包是否支持 API 模式 2?它可能只适用于 API 模式 1。
该包是否有访问原始字节流而不是尝试读取帧的方法?您可以将其配置为在解析错误时抛出异常吗?
我将从打印 response
开始,直到您看到您正在接收数据。为什么要在该循环中包含 sleep()
调用?
我不确定您要在 toHex()
中完成什么,但您可能想查看 Python 方法 struct.unpack()
或替换您所做的所有工作hv
与 '0x%02X' % ord(ch)
.
我正在使用 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()
端口号和波特率是连接的,每次我把协调器重新插到我的电脑上时,我都会把它改成合适的端口号。 我的输出看起来像:
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()
它给出了以下输出。
有好心人帮忙吗
您确定串口和波特率正确吗? xbee
包是否支持 API 模式 2?它可能只适用于 API 模式 1。
该包是否有访问原始字节流而不是尝试读取帧的方法?您可以将其配置为在解析错误时抛出异常吗?
我将从打印 response
开始,直到您看到您正在接收数据。为什么要在该循环中包含 sleep()
调用?
我不确定您要在 toHex()
中完成什么,但您可能想查看 Python 方法 struct.unpack()
或替换您所做的所有工作hv
与 '0x%02X' % ord(ch)
.