Xbee python通过串行接口无线接收数据

时间:2019-04-24 15:29:17

标签: python serial-port raspberry-pi3 xbee

我正在使用连接到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库的情况下进行串行读写。但是,我愿意提出适合我的情况的建议。

1 个答案:

答案 0 :(得分:0)

首先,您可能希望将ser.write()的呼叫留在while True:之外,否则会发送很多数据包。

尝试设计大循环以始终检查串行线上的字节,并在发生某些事件(例如可能有按键或经过一定时间)后触发写操作。

看起来您正在接收一帧-~0x7Eser.read()是否总是返回单个字符?您可以使用print(hex(ord(data)))打印它以获得字符序号值的十六进制值,并且它可能开始看起来像您期望的十六进制值列表。

您说您不想使用Python库,但是您可能想考虑使用Digi's python-xbee library来减少花在获得准系统工作代码上的时间,并将时间集中在应用程序层编码上