将连续数据写入 CSV 文件



我正在使用python中的代码来获取传感器的数据,传感器测量不同轴的振动。 代码运行良好,但我正在尝试自动将输出数据写入 CSV 文件。

这是我正在使用的代码:

import smbus            
from time import sleep          
#some MPU6050 Registers and their Address
PWR_MGMT_1   = 0x6B
SMPLRT_DIV   = 0x19
CONFIG       = 0x1A
GYRO_CONFIG  = 0x1B
INT_ENABLE   = 0x38
ACCEL_XOUT_H = 0x3B
ACCEL_YOUT_H = 0x3D
ACCEL_ZOUT_H = 0x3F
GYRO_XOUT_H  = 0x43
GYRO_YOUT_H  = 0x45
GYRO_ZOUT_H  = 0x47

def MPU_Init():
#write to sample rate register
bus.write_byte_data(Device_Address, SMPLRT_DIV, 7)
#Write to power management register
bus.write_byte_data(Device_Address, PWR_MGMT_1, 1)
#Write to Configuration register
bus.write_byte_data(Device_Address, CONFIG, 0)
#Write to Gyro configuration register
bus.write_byte_data(Device_Address, GYRO_CONFIG, 24)
#Write to interrupt enable register
bus.write_byte_data(Device_Address, INT_ENABLE, 1)
def read_raw_data(addr):
#Accelero and Gyro value are 16-bit
high = bus.read_byte_data(Device_Address, addr)
low = bus.read_byte_data(Device_Address, addr+1)
#concatenate higher and lower value
value = ((high << 8) | low)
#to get signed value from mpu6050
if(value > 32768):
value = value - 65536
return value

bus = smbus.SMBus(1)    # or bus = smbus.SMBus(0) for older version boards
Device_Address = 0x68   # MPU6050 device address
MPU_Init()
print (" Reading Data of Gyroscope and Accelerometer")
while True:
#Read Accelerometer raw value
acc_x = read_raw_data(ACCEL_XOUT_H)
acc_y = read_raw_data(ACCEL_YOUT_H)
acc_z = read_raw_data(ACCEL_ZOUT_H)
#Read Gyroscope raw value
gyro_x = read_raw_data(GYRO_XOUT_H)
gyro_y = read_raw_data(GYRO_YOUT_H)
gyro_z = read_raw_data(GYRO_ZOUT_H)
#Full scale range +/- 250 degree/C as per sensitivity scale factor
Ax = acc_x/16384.0
Ay = acc_y/16384.0
Az = acc_z/16384.0
Gx = gyro_x/131.0
Gy = gyro_y/131.0
Gz = gyro_z/131.0

print ("Gx=%.2f" %Gx, u'u00b0'+ "/s", "tGy=%.2f" %Gy, u'u00b0'+ "/s", "tGz=%.2f" %Gz, u'u00b0'+ "/s", "tAx=%.2f g" %Ax, "tAy=%.2f g" %Ay, "tAz=%.2f g" %Az)     
sleep(2)

"">

现在我尝试使用的写作顺序如下所示:

finaldata = { "Gx=%.2f" %Gx, u'u00b0'+ "/s", "tGy=%.2f" %Gy, u'u00b0'+ "/s", "tGz=%.2f" %Gz, u'u00b0'+ "/s", "tAx=%.2f g" %Ax, "tAy=%.2f g" %Ay, "tAz=%.2f g" %Az }
with open("accell.csv", "a")as output:
writer = csv.writer(output, delimiter=",", lineterminiator = 'n')
writer.writerow(finaldata)
sleep(2)

">

"但是这种写入CSV代码不起作用,我可以知道为什么吗?

首先,将导入 csv添加到你的代码中,然后使用这部分在 csv 文件中编写:


import smbus            
from time import sleep       
import csv
#some MPU6050 Registers and their Address
PWR_MGMT_1   = 0x6B
SMPLRT_DIV   = 0x19
CONFIG       = 0x1A
GYRO_CONFIG  = 0x1B
INT_ENABLE   = 0x38
ACCEL_XOUT_H = 0x3B
ACCEL_YOUT_H = 0x3D
ACCEL_ZOUT_H = 0x3F
GYRO_XOUT_H  = 0x43
GYRO_YOUT_H  = 0x45
GYRO_ZOUT_H  = 0x47

def MPU_Init():
#write to sample rate register
bus.write_byte_data(Device_Address, SMPLRT_DIV, 7)
#Write to power management register
bus.write_byte_data(Device_Address, PWR_MGMT_1, 1)
#Write to Configuration register
bus.write_byte_data(Device_Address, CONFIG, 0)
#Write to Gyro configuration register
bus.write_byte_data(Device_Address, GYRO_CONFIG, 24)
#Write to interrupt enable register
bus.write_byte_data(Device_Address, INT_ENABLE, 1)
def read_raw_data(addr):
#Accelero and Gyro value are 16-bit
high = bus.read_byte_data(Device_Address, addr)
low = bus.read_byte_data(Device_Address, addr+1)
#concatenate higher and lower value
value = ((high << 8) | low)
#to get signed value from mpu6050
if(value > 32768):
value = value - 65536
return value

bus = smbus.SMBus(1)    # or bus = smbus.SMBus(0) for older version boards
Device_Address = 0x68   # MPU6050 device address
MPU_Init()
print (" Reading Data of Gyroscope and Accelerometer")
while True:
#Read Accelerometer raw value
acc_x = read_raw_data(ACCEL_XOUT_H)
acc_y = read_raw_data(ACCEL_YOUT_H)
acc_z = read_raw_data(ACCEL_ZOUT_H)
#Read Gyroscope raw value
gyro_x = read_raw_data(GYRO_XOUT_H)
gyro_y = read_raw_data(GYRO_YOUT_H)
gyro_z = read_raw_data(GYRO_ZOUT_H)
#Full scale range +/- 250 degree/C as per sensitivity scale factor
Ax = acc_x/16384.0
Ay = acc_y/16384.0
Az = acc_z/16384.0
Gx = gyro_x/131.0
Gy = gyro_y/131.0
Gz = gyro_z/131.0

print ("Gx=%.2f" %Gx, u'u00b0'+ "/s", "tGy=%.2f" %Gy, u'u00b0'+ "/s", "tGz=%.2f" %Gz, u'u00b0'+ "/s", "tAx=%.2f g" %Ax, "tAy=%.2f g" %Ay, "tAz=%.2f g" %Az)
finaldata = {"Gx=%.2f" % Gx, u'u00b0' + "/s", "tGy=%.2f" % Gy, u'u00b0' + "/s", "tGz=%.2f" % Gz,
u'u00b0' + "/s", "tAx=%.2f g" % Ax, "tAy=%.2f g" % Ay, "tAz=%.2f g" % Az}
with open("\test.csv", "a")as output:
writer = csv.writer(output, delimiter=",")
writer.writerow(finaldata)
sleep(2)

@nimajv走在正确的轨道上,但我想你忘了以a+模式打开文件。

a+:打开文件以进行追加和读取。如果文件存在,则文件指针位于文件末尾。文件将在追加模式下打开。如果该文件不存在,它将创建一个用于读取和写入的新文件 - Python 文件 IO

当然,当您尚未创建文件时,就是这种情况。如果你这样做了,那么你应该用真实的文件路径替换他的代码部分。此外,你还应该替换他的虚拟路径 -\test.csv你想要的任何真实路径。如果您只是使用test.csv它将在您运行脚本的同一目录中创建文件(当然是a+模式(。

最新更新