使用python

时间:2019-07-16 22:41:17

标签: python pandas dataframe arduino

我正在使用arduino分析模拟输入,并且正在使用pyfirmata库访问arduino,并且我使用arduino Uno上的6个模拟输入来笨拙地测量电压。我需要找到一种方法来实时将这些数据实时有效地输入到CSV中……我不确定采用哪种最佳方法

任何建议都会有所帮助,但请写下您建议的代码。如果可能的话,我宁愿使用熊猫,因为它更容易

从voltage0到voltage5是我的变量,我试图以一种很好的格式报告这些内容,以后必须对其进行分析

import time
from datetime import datetime
import pyfirmata
import pandas as pd

board = pyfirmata.Arduino('/dev/ttyACM1')

analog_pin0 = board.get_pin('a:0:i')
analog_pin1 = board.get_pin('a:1:i')
analog_pin2 = board.get_pin('a:2:i')
analog_pin3 = board.get_pin('a:3:i')
analog_pin4 = board.get_pin('a:4:i')
analog_pin5 = board.get_pin('a:5:i')

it = pyfirmata.util.Iterator(board)
it.start()

analog_pin0.enable_reporting()
analog_pin1.enable_reporting()
analog_pin2.enable_reporting()
analog_pin3.enable_reporting()
analog_pin4.enable_reporting()
analog_pin5.enable_reporting()

data = []

count = 0
x = 0
start = 0

while x <= 1000:

reading0 = analog_pin0.read()
if reading0 != None:
    voltage0 = reading0 * 5
    voltage0 = round(voltage0,2)
else:
    voltage0 = float('nan')
reading1 = analog_pin1.read()    
if reading1 != None:
    voltage1 = reading1 * 5
    voltage1 = round(voltage1,2)
else:
    voltage1 = float('nan')
reading2 = analog_pin2.read()
if reading2 != None:
    voltage2 = reading2 * 5
    voltage2 = round(voltage2,2)
else:
    voltage2 = float('nan')
reading3 = analog_pin3.read()    
if reading3 != None:
    voltage3 = reading3 * 5
    voltage3 = round(voltage3,2)
else:
    voltage3 = float('nan')
reading4 = analog_pin4.read()
if reading4 != None:
    voltage4 = reading4 * 5
    voltage4 = round(voltage4,2)
else:
    voltage4 = float('nan')
reading5 = analog_pin5.read()    
if reading5 != None:
    voltage5 = reading5 * 5
    voltage5 = round(voltage5,2)
else:
    voltage5 = float('nan')

datarow = {'Voltage0': voltage0, 'Voltage1': voltage1, 'Voltage2' : voltage2, 'Voltage3': voltage3, 'Voltage4' : voltage4, 'Voltage5' : voltage5, 'Time' : time.strftime("%Y-%m-%d_%H:%M:%S")}
data.append(datarow)

if count%500 == 0:
    dataframe = pd.DataFrame(data)
    dataframe.to_csv('data.csv')

x += 1
count += 1

#time.sleep(1)enter code here

1 个答案:

答案 0 :(得分:0)

您的代码似乎可以运行,但是效率不高。每500次迭代,您将重写所有数据,而不是最后使用新数据更新文件。您可以考虑以这种方式保存它:

if count%500 == 0:
    dataframe = pd.DataFrame(data)
    dataframe.to_csv('data.csv',mode='a',header=False)
    data = []

如果仍然不够快,您可以考虑将数据保存为二进制格式,例如.npy(numpy格式),然后将其转换为csv。