【发布时间】: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