我正在使用连接到Raspberry pi3,API-mode = 2的Xbee,并通过工作良好的串行接口从xbee发送数据。但是,我需要读取即将到达同一Xbee的数据(此部分无法正常工作)。请在下面找到我的代码,其中包含用于通过串行接口传输和接收数据的脚本:
ser=serial.Serial(PORT, BAUDRATE)
while True:
#SEND DATA
msg=[0x10,
0x00,
0x00,
0x00,
0x00,
0x00,
0x00,
0x00,
0xFF,
0xFF,
0xFF,
0xFE,
0x00,
0xCC,
0x66,
0x00,
0x00,
0x01,
0x00,
0x03,
0xFF,
0x01,
0x00,
0x01,
0x77,
0x00,
0x1D]
ser.write(chr(0x7e)+
chr(len(msg)//256)+
chr(len(msg)%256))
ser.write(''.join(chr(x) for x in msg))
check=(0xFF - ( sum(msg) & 0xFF ))
ser.write(chr(check))
#READ DATA
msg=[0x90,
0x00,
0x13,
0xA2,
0x00,
0x41,
0x88,
0xA5,
0x2C,
0xFF,
0xFE,
0x00,
0x66,
0x00,
0x00,
0x01,
0x00,
0x03,
0xFF,
0x01,
0x00,
0x01,
0x77,
0x00,
0x1D]
ser.write(chr(0x7e)+
chr(len(msg)//256)+
chr(len(msg)%256))
ser.write(''.join(chr(x) for x in msg))
check=(0xFF - ( sum(msg) & 0xFF ))
ser.write(chr(check))
data = ser.read()
print(data)
ser.close()
我能够发送数据。但是,已读脚本正在向我显示以下内容:
~
▒
}
3
▒
A
▒
▒
▒
▒
▒
▒
f
▒
w
▒
对此我将不胜感激。我更喜欢在不使用python库的情况下进行串行读写。但是,我愿意提出适合我的情况的建议。
答案 0 :(得分:0)
首先,您可能希望将ser.write()
的呼叫留在while True:
之外,否则会发送很多数据包。
尝试设计大循环以始终检查串行线上的字节,并在发生某些事件(例如可能有按键或经过一定时间)后触发写操作。
看起来您正在接收一帧-~
是0x7E
。 ser.read()
是否总是返回单个字符?您可以使用print(hex(ord(data)))
打印它以获得字符序号值的十六进制值,并且它可能开始看起来像您期望的十六进制值列表。
您说您不想使用Python库,但是您可能想考虑使用Digi's python-xbee library来减少花在获得准系统工作代码上的时间,并将时间集中在应用程序层编码上