我正在使用pySerial库将Arduino的基本示例“ AnalogReadSerial”中的串行数据读取到Python 3.7.2中。大约不稳定的延迟。 16毫秒和异常峰值。在每次录制中观察到1.5秒。 (Arduino的打印时间约为5毫秒/数据点)
使用pySerial时此延迟正常吗?还是我的代码有问题?
如果通常看到pySerial出现延迟,那么您可以建议一个更好的库来读取串行数据吗?
尝试的技巧:
import serial
import time
serialport = serial.Serial('COM3',9600) #define my port
count =1
timedata = []
while count<=100: #run for 100 serial values
if serialport.in_waiting > 0: #buffer
count += 1
t1 = int(round(time.time()*1000)) #time before reading
reading = serialport.readline().decode() #read serial data and decode
t2 = int(round(time.time()*1000)) #time after reading
finalt = t2 - t1 #time taken to read
timedata.append(finalt) #store all time values in a list
print(timedata[-1]) #print time for reading every new value
几乎每次都得到相似的结果。 在代码运行过程中,峰值为1.5秒,否则延迟为16ms。
感谢您的时间。
答案 0 :(得分:1)
您的USB转串行接口芯片(可能是FTDI设备)可能会遇到此延迟问题。
https://projectgus.com/2011/10/notes-on-ftdi-latency-with-arduino/
在Linux和Windows上,默认延迟计时器设置为16ms。例如,假设您以115200bps的速度从Arduino发送3字节MIDI消息。作为串行数据,MIDI消息从Arduino的微控制器传输到FTDI芯片需要0.3毫秒的时间。但是,FTDI在延迟计时器到期之前将消息进一步保留在缓冲区中15.8ms(第一个字节到达后16ms),然后它将USB数据包发送到计算机。
本文继续说明如何调整设置。