Сохранение данных из Arduino с использованием Python - потеря данных - PullRequest
0 голосов
/ 21 января 2020

С помощью Интернета я создал код, который собирает данные из Arduino uno и сохраняет их в CSV-файл. Собранные данные являются необработанными значениями акселерометров MEMS.

Проблема в коде состоит в том, что очень часто я теряю много данных, если не все, если я прекращаю работу Python. Я заметил, что в случайное время выходной CSV-файл имеет нулевые байты. Временное решение - запустить «Серийный монитор» Arduino. Таким образом, большая часть измеренных данных сохраняется.

import serial
import time
import csv
import numpy as np
import pandas as pd

timeHr = []
timeT = []
mem1xD = []
mem1yD = []
mem1zD = []
#
mem2xD = []
mem2yD = []
mem2zD = []


arduinoData = serial.Serial('COM4',9600)


df = pd.DataFrame({
                    'timeHr':0,
                    'timeT':0,
                    'mem1xD':0,
                    'mem1yD':0,
                    'mem1zD':0,
                    'mem2xD':0,
                    'mem2yD':0,
                    'mem2zD':0,
                   }, 
                  index=[0]
                  )

while True:
    while (arduinoData.inWaiting()==0):
        pass
    arduinoString = arduinoData.readline().decode("utf-8")

    dataArray = arduinoString.split(",")

    timehr = dataArray[0]
    time = float(dataArray[1])/1000

    mem1x = float(dataArray[2])
    mem1y = float(dataArray[3])
    mem1z = float(dataArray[4])
    #
    mem2x = float(dataArray[5])
    mem2y = float(dataArray[6])
    mem2z = float(dataArray[7])

    timeHr.append(timehr)
    timeT.append(time)
    mem1xD.append(mem1x)
    mem1yD.append(mem1y)
    mem1zD.append(mem1z)
    #
    mem2xD.append(mem2x)
    mem2yD.append(mem2y)
    mem2zD.append(mem2z)

    df = pd.DataFrame({
                        'timeHr':timeHr,
                        'timeT':timeT,
                        'mem1xD':mem1xD,
                        'mem1yD':mem1yD,
                        'mem1zD':mem1zD,
                        'mem2xD':mem2xD,
                        'mem2yD':mem2yD,
                        'mem2zD':mem2zD,

                         }
         )
    df.to_csv(r'time4.csv')

1 Ответ

1 голос
/ 21 января 2020

Вам необходимо добавить новые данные в ваш фрейм данных. Передача mode='a' в pd.Dataframe.to_csv позволит вам сделать это.

import time 

tStart = str(time.time()).split('.')[0]
fileOut = tStart+'.csv'

while True:
    while (arduinoData.inWaiting()==0):
        pass
    arduinoString = arduinoData.readline().decode("utf-8")

    dataArray = arduinoString.split(",")

    timehr = dataArray[0]
    time = float(dataArray[1])/1000

    mem1x = float(dataArray[2])
    mem1y = float(dataArray[3])
    mem1z = float(dataArray[4])
    #
    mem2x = float(dataArray[5])
    mem2y = float(dataArray[6])
    mem2z = float(dataArray[7])

    timeHr.append(timehr)
    timeT.append(time)
    mem1xD.append(mem1x)
    mem1yD.append(mem1y)
    mem1zD.append(mem1z)
    #
    mem2xD.append(mem2x)
    mem2yD.append(mem2y)
    mem2zD.append(mem2z)

    df = pd.DataFrame({
                        'timeHr':timeHr,
                        'timeT':timeT,
                        'mem1xD':mem1xD,
                        'mem1yD':mem1yD,
                        'mem1zD':mem1zD,
                        'mem2xD':mem2xD,
                        'mem2yD':mem2yD,
                        'mem2zD':mem2zD,

                         }
         )
    df.to_csv(fileOut,mode='a', header=False)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...