我正在尝试读取发送到插入USB的ZigBee模块的帧。每个帧都被Python xBee包丢弃,因为当它应该是0x7E时,分隔符是0x00。实际上似乎每个字节也都是零。
XCTU完美地接收帧。
我使用OS X,PyCharm,Python 3.4并从Internet借用此代码:
# Open serial port
ser = serial.Serial(PORT, BAUD_RATE)
# Create API object
xbee = ZigBee(ser,escaped=True)
# Continuously read and print packets
while True:
try:
response = xbee.wait_read_frame()
sa = hex(response['source_addr_long'][4:])
rf = hex(response['rf_data'])
datalength=len(rf)
# if datalength is compatible with two floats
# then unpack the 4 byte chunks into floats
if datalength==16:
h=struct.unpack('f',response['rf_data'][0:4])[0]
t=struct.unpack('f',response['rf_data'][4:])[0]
print (sa,' ',rf,' t=',t,'h=',h)
# if it is not two floats show me what I received
else:
print (sa,' ',rf)
except KeyboardInterrupt:
ser.close()
break
ser.close()
程序执行xbee.wait_read_frame()调用并永远等待,因为没有帧到达。
我跟踪了xBee包中对“base.py”的调用:
while True:
if self._callback and not self._thread_continue:
raise ThreadQuitException
if self.serial.inWaiting() == 0:
time.sleep(.01)
continue
byte = self.serial.read()
if byte != APIFrame.START_BYTE:
continue
对serial.read()的调用始终返回零。
答案 0 :(得分:1)
我在您提供的代码片段中看不到任何错误。如果您正在从该串行端口读取零(是吗?) - 串口设置很可能出现问题(例如,当数据在9600传输时,您正在读取115200)。你正在使用的 BAUD_RATE 是什么?
如果您只使用哑终端访问设备,那么测试它也是值得的。