接收的消息与通过串行连接发送的消息不同

时间:2019-07-05 14:48:06

标签: python-3.x serial-port pyserial uart

我试图用pyserial通过串行连接连接两个树莓。我写了两个小脚本,用于发送和接收。虽然两者之间正在发生通信,但是接收到的消息与发送的消息完全不同。

例如,如果我这样做

print(serial2.readline().hex())
fa9b9fff

在raspi1上,然后raspi2接收:

ú›Ÿÿ

这是def send_msg(_ser, _msg): if _ser.isOpen(): # isOpen() is deprecated since version 3.0 try: _ser.flushInput() # flush input buffer, discarding all its contents _ser.flushOutput() # flush output buffer, aborting current output  # and discard all that is in buffer _ser.write(_msg) _ser.flush() except IOError: print('error communicating...') else: print('cannot open serial port') return 的十六进制表示形式。

编辑:这是接收和发送方法:

发件人:

def read_line(_ser, _eol_character=b'\n', _timeout=1, _encoding='utf-8'):
    buffer = ""
    timer = time.time()
    while (time.time()-timer)<_timeout:
        one_byte = _ser.read(1)
        print(one_byte.hex())
        if one_byte == _eol_character:
            return buffer.encode(_encoding)
        else:
            buffer += str(one_byte, _encoding, errors='replace')
    raise TimeoutError("Timed out while read_line(), make sure there is an EOF!")

接收器:

=IF(MIN(A1,B2,C3,D4,E5,F6)=MAX(A1,B2,C3,D4,E5,F6),"Equal", "Not Equal")

1 个答案:

答案 0 :(得分:2)

您得到的胡言乱语表示三种可能的原因:

-设置不匹配,很可能是不同的波特率

-总线上的噪声:通常是由于缺乏通用的地面参考。当您不仅未连接好仅连接TX和RX信号而使GND悬空时,就会发生这种情况(在台式计算机上,即使由于房屋布线的安全接地而没有连接GND信号,您也可能具有公共接地)但是在笔记本电脑或其他电池供电的设备上,这是一个问题,您必须使用第三条电缆在总线的两侧连接GND。

-您正在尝试使用不同的逻辑级别进行通信。如果总线的一侧在TTL电平(5V)上工作而另一侧在3.3V上工作,或者当您将真实的RS232电平(差分)与任何其他电平组合在一起时,就会发生这种情况。更不用说您是否尝试将RS485与RS232或TTL混合使用,当然也不能使用。