【问题标题】:Slow Python serial speedPython串行速度慢
【发布时间】:2018-04-22 01:40:57
【问题描述】:

我已将 Arduino UNO 连接到我的树莓派,并希望使用 Python 脚本从连接的传感器读取数据。 当我尝试从 Arduino IDE 读取传感器数据时,它的运行速度非常快,但使用 Python 时它真的很慢。

这是我的代码:

import serial
from subprocess import call
from time import sleep

ser = serial.Serial('/dev/ttyACM0')
ser.baudrate = 9600

a = 0
stop = False

file = open("PulseData/MasterArrayData.txt","w")
if(ser.isOpen() == False):
        ser.open()

print("Start scanning")

while stop == False:
        test = ser.readline()
        try:
                testInt = int(test)
                if testInt > 100 and testInt < 800:
                        print test
                        file.write(str(testInt))
                        file.write("\n")
                        a = a+1
        except ValueError:
                print "Not an integer"
        if(a == 400):
                stop = True
        sleep(0.1)

file.close()


call(["./main", "PulseData/MasterArrayData.txt"])

我已经尝试使用更高的波特率或更短的睡眠时间,但没有成功。

我读过 PyTTY 可以提高速度,但遗憾的是我没有找到任何相关文档。

感谢您的帮助。

【问题讨论】:

  • 你为什么要睡觉?除了您接收数据行的速度之外,该程序似乎无法以任何速度运行,因此我不确定它如何在不完全无法运行的情况下“非常慢”。你能量化一下“真的很慢”是什么意思吗?是否有可能您的大量数据超出 101..799 范围,因此在没有任何迹象的情况下被丢弃?
  • 我正在睡觉,因为在 Arduino 示例代码中,那个时间也有延迟。真的很慢意味着我每秒得到的值少于 10 个。这些值都在 101 到 799 范围内。当我在 Arduino IDE 上运行它时,外面基本上没有任何值,但是当我用 Python 运行它时,有时我会在“正常”值的中间得到一个值,比如 32334 或 5。所以这只是为了踢出这些价值观
  • 在读数之间睡眠十分之一秒是绝对保证,您每秒将获得少于 10 个读数。当串行端口缓冲区不可避免地溢出并且字符丢失时,您偶尔会遇到垃圾值。

标签: python-2.7 arduino raspberry-pi pyserial


【解决方案1】:

来自comment by jasonharper

在读数之间睡眠十分之一秒绝对可以保证您每秒获得的读数少于 10 个。当串行端口缓冲区不可避免地溢出并且字符丢失时,您偶尔会遇到垃圾值。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-12-25
    • 1970-01-01
    • 2018-04-24
    • 1970-01-01
    • 2023-02-17
    • 2015-02-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多