当前位置: 首页 > 面试题库 >

在Python中实时读取串行数据

仉昂熙
2023-03-14
问题内容

我正在Python中使用脚本,通过串行端口以2Mbps速度从PIC微控制器收集数据

PIC以2Mbps的完美时序工作,FTDI usb串行端口也以2Mbps的出色性能(均已通过示波器验证)

我发送消息(大约15个字符的大小)大约每秒100-150x次,并且该消息的数量递增(以检查我是否丢失了消息等等)

在我的笔记本电脑上,我的Xubuntu作为虚拟机运行,我可以通过Putty和脚本(python 2.7和pySerial)读取串行端口。

问题:

  • 通过Putty打开串行端口时,我看到所有消息(消息中的计数器以1递增1)。完善!
  • 通过pySerial打开串行端口时,我看到了所有消息,但不是每秒接收100-150x,而是以每秒约5的速度接收它们(消息仍然以1递增),但是当我关闭电源时,它们可能存储在某些缓冲区中PIC,我可以去厨房再回来,即时消息仍在接收。

这是代码(我省略了大部分代码,但是循环是相同的):

ser = serial.Serial('/dev/ttyUSB0', 2000000, timeout=2, xonxoff=False, rtscts=False, dsrdtr=False) #Tried with and without the last 3 parameters, and also at 1Mbps, same happens.
ser.flushInput()
ser.flushOutput()
While True:
  data_raw = ser.readline()
  print(data_raw)

谁知道pySerial为什么要花这么多时间从串行端口读取直到行尾?有什么帮助吗?

我想实时拥有。

谢谢


问题答案:

您可以inWaiting()用来获取输入队列中可用的字节数。

然后,您可以使用它read()来读取字节,如下所示:

While True:
    bytesToRead = ser.inWaiting()
    ser.read(bytesToRead)

为什么不在readline() 这种情况下 使用Docs:

Read a line which is terminated with end-of-line (eol) character (\n by default) or until timeout.

您正在等待每次读取的超时,因为它正在等待eol。串行输入Q保持不变,只是需要很多时间才能到达缓冲区的“末端”,为了更好地理解它:您就像赛车一样写入输入Q,就像旧车一样阅读:)



 类似资料:
  • 我无法通过串行连接读取来自arduino的串行数据。为了解决串行和gui需要同时运行的问题,我使用了。函数后,每100ms调用一次更新序列。然而,当我运行这段代码时,没有弹出窗口,并且我得到一个错误,说我已经超过了最大递归深度。这是我的密码:

  • 我试图在一些python代码和arduino代码之间来回“乒乓”信息。我想定期向arduino代码发送两个设定点(例如,在分钟内),在arduino上读取它们 现在,我无法获得可靠的信息来来回跳转。我在搜索中没有找到任何与此类似的内容,我试图修改的所有内容都不起作用。最接近我的是这个(实际上它并没有在发送和接收之间来回切换): python 阿杜伊诺: 我最终得到的只是重复的相同值(不是实际发送的

  • 我有一个Arduino与2个DS18B20温度传感器连接。我对python非常(非常)陌生。我正在寻找一种读取串行输入并将其解析到sqlite数据库的方法,但这已经超出了我的能力。为什么在尝试将串行端口定义为变量时出错? 首先<代码>sys.version 我的当前,只是读取串行连接程序的输入。 我目前无法编译它。我发现这个错误的大多数结果告诉添加,但在这种情况下,它不起作用。 错误。 另外,如果

  • 我做了一个python程序,从串行端口读取gps数据。GPS冰球流NMEA数据语句连续插入USB时。我的程序打开端口,然后尝试读取数据,解析它,然后将其与从Arduino提取的其他数据一起写入文本文件。 我遇到的问题是,当我第一次运行程序时,有时它无法读取数据。我放入了一些Try/Exception捕获,发现以某种方式无法从GPS串行端口读取数据 如果我点击Cntrl-C几次,这似乎可以解决它遇到

  • 我有一个Velleman k8090中继板,我试图从中读取一些数据。我可以很好地写入电路板,但每当我输出读取的数据时,我都会得到奇怪的字符,比如菱形或倒置的问号。以下是我的部分代码: 为什么我会有这些奇怪的角色?文件规定它应该返回年份和星期。 编辑:经过一些搜索和故障排除,我现在非常确定它与Python代码或数据类型有关,而不是与硬件有关。这个论坛包含了一个C语言的例子,它从黑板上读取。我从黑板上

  • 问题内容: 我想在阅读文本文件时跳过前17行。 假设文件看起来像: 我只想要好东西。我正在做的事情要复杂得多,但这是我遇到的麻烦。 问题答案: 使用切片,如下所示: 如果文件太大而无法加载到内存中: