gpt4 book ai didi

python - 从串行端口使用 PySerial 读取二进制数据

转载 作者:太空宇宙 更新时间:2023-11-04 01:40:23 25 4
gpt4 key购买 nike

PyQT 4.7 没有从 QIODevice 继承类,允许直接与串口通信(例如 QSerialDevice)。所以我认为使用 QProcess 类并从将使用 QProcess 接口(interface)与我的主要 QT 应用程序交互的不同进程实现对串行端口的实际读/写会更容易。

现在的问题是,当我使用下面的代码时,发送和接收的字节数不一样。 所以我的问题是如何从串行端口正确读取二进制数据,然后将所有内容转发到标准输出?

这是我创建 QProcess 的主要 QT 程序的摘录:

        self.micromouse_socket = QProcess()
self.micromouse_socket.start("/home/ansis/Source/Perforce-pele/Pele/tools/console/comtalker.py", "")
self.micromouse_socket.started.connect(self.on_micromouse_socket_started)
self.label_8.setText("Starting COM...")

这是将与串行端口通信的进程(comtalker.py;非阻塞部分尚未完成):

#!/usr/bin/python
import serial
import sys

if __name__ == "__main__":

ser = serial.Serial(0)

while 1 :
x = ser.read(1)
sys.stdout.write(x)
sys.stdout.flush()

附言问题可能出在其他地方而不是 PySerial 中。在另一台计算机上,我正在使用此命令“./binary_data_generator >/dev/ttyS0”写入 ttyS0。当我只发送 ASCII 字符(文本+数字)时,相同的代码似乎工作正常

最佳答案

PySerial(或 Pyserial 所依赖的库)似乎正在将单个“0x0a”(\n) 字符转换为两个字符“0x0d 0x0a”(\r\n)。两个通信端点都在 Linux 上运行,所以我不确定为什么有人甚至愿意翻译这些行结尾......

这里strace表示sender只发送\n到ttyS0:

write(1, "M\n", 2)                      = 2
write(1, "\n", 1) = 1
write(1, "M\n", 2) = 2
write(1, "\n", 1) = 1

在调试 PySerial 输出时,我看到每个\n 都以\r 为前缀。

在声称这是一个 Bug 之前,我将做进一步的调查以找出是谁以及为什么添加这个回车...

关于python - 从串行端口使用 PySerial 读取二进制数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5643925/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com