通过USB从arduino接收到的pyserial丢失数据

时间:2019-08-27 07:43:16

标签: python arduino pyserial

我正在使用pyserial通过arduino微控制器从USB端口访问传感器数据。不幸的是,在接收数据点一秒钟后,又丢失了另一秒钟,这对于我的应用程序是不可接受的。 同时,Arduino IDE中的串行监视器显示正在连续发送的数据。 我可以在我的Python代码中解决此问题吗?

import serial
import time
import matplotlib.pyplot as plt
import numpy as np
import os

### Reading the serial port

mylist = []

ArduinoLeonardoSerial = serial.Serial('com3',115200)
time.sleep(2)

timeout = 3                  # period for reading serial data
timeout_start = time.time()

while time.time() < timeout_start + timeout:
        line = ArduinoLeonardoSerial.readline().strip()
        values = line.decode('ascii').split(',')
        mylist.append(values)

ArduinoLeonardoSerial.close()


### Data processing

mylist.remove(mylist[0])
mylist.remove(mylist[-1])

accX = [x[0] for x in mylist]
accY = [x[1] for x in mylist]
accZ = [x[2] for x in mylist]
timestamp = [x[3] for x in mylist]

aX = np.asarray(accX, dtype=np.float32)
aY = np.asarray(accY, dtype=np.float32)
aZ = np.asarray(accZ, dtype=np.float32)
ts = np.asarray(timestamp, dtype=np.uint32)

start_timestamp = np.full((len(ts)), ts[0], dtype=np.uint32)
ts_normalized = ts - start_timestamp

ts_normalized的值(以毫秒为单位)如下:

    945  947  949  952  954  956  959  961  963  966  969  972  974  976 
    979  981  983  986  988 2101 2104 2106 2109 2111 2113 2116 2118 2121

因此,约一秒钟的测量数据被切断。

1 个答案:

答案 0 :(得分:2)

删除time.sleep(2)。之所以麻烦,是因为不轮询信息,内部缓冲区将溢出并且信息将丢失。