【问题标题】:Pyserial read is not returning what I write outPyserial 读取没有返回我写出的内容
【发布时间】:2019-07-19 15:37:15
【问题描述】:

目前我有一个连接到两个串行设备的树莓派端口。这些设备是 USB 到 RS485/RS422 转换器。两者都通过电线连接到正确的端子(设备 A 的端子 1 到设备 B 的端子 2,设备 A 的端子 2 到设备 B 的端子 1)。

我能够成功地从一个设备读取和写入另一个设备,但是返回的读取数据与我写入的数据不同。

例如,如果我要发送的消息是“Te”,那么我阅读的消息是b'U\x13\x00'

我目前正在 buster 上运行 python 3。

ser = serial.Serial(port='port 1', baudrate = 9600)
message = "Te"
message = message.encode('ascii')
while True:
     ser.write(message)
     time.sleep(1)

写.py

ser = serial.Serial(port = 'port 2', baudrate = 9600)
while True:
     serial_line = ser.read(50)#placehoder until I am able to get correct values
     print(serial_line)

read.py

我除了将读取中的字节输出转换为我在 write.py 中编写的字符串,但是输出总是完全不同的。

编辑: link to serial devices(USB转RS-485/RS-422)

【问题讨论】:

  • 为什么要在发送前对消息进行编码?
  • 如果我在没有编码的情况下编写,它会抛出一个类型错误,指出不支持 Unicode 字符串并将其编码为字节
  • 这些设备到底是什么?没有更多信息,谈论“终端1”和“终端2”是没有意义的。你到底在给他们写什么?您发布的代码写了test,它没有在任何地方定义。
  • 感谢您发现这一点,这是清理我的代码并将其放在这里的错字。正确的变量应该是消息。至于设备,它们是连接到同一个树莓派的两个germo mini usb to RS485/RS422转换器ftdi芯片。

标签: python encoding raspberry-pi pyserial


【解决方案1】:

你的接线似乎是错误的:

...设备A的终端1到设备B的终端2,设备A的终端2到设备B的终端1...

对于 UART 或 RS232 来说没问题,但对于 RS485,正确的接线是 A 到 A 和 B 到 B(直线而不是交叉 RX 到 TX)。

重新接线,它会起作用的。

【讨论】:

  • 非常感谢,就是这样!正如我所说的那样,我被严格告知要接线,所以这可能是我检查的最后一件事。你是一个救生员!
  • 写一个详细的问题给你价格。很高兴你修好了。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-11-28
  • 2019-04-25
  • 2019-07-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多