Python 将连续数据写入csv文件

Python 将连续数据写入csv文件,python,python-3.x,csv,sensors,mpu6050,Python,Python 3.x,Csv,Sensors,Mpu6050,我正在使用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

我正在使用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)
“好的”


但是写入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)

导入smbus
从时间上导入睡眠
导入csv
#一些MPU6050寄存器及其地址
压水堆管理1=0x6B
SMPLRT_DIV=0x19
配置=0x1A
陀螺配置=0x1B
INT_ENABLE=0x38
加速度x输出H=0x3B
加速时间=0x3D
加速圈H=0x3F
陀螺输出H=0x43
陀螺仪输出H=0x45
陀螺仪输出H=0x47
def MPU_Init():
#写入采样率寄存器
总线写入字节数据(设备地址,SMPLRT分区,7)
#写入电源管理寄存器
总线写入字节数据(设备地址,PWR管理1,1)
#写入配置寄存器
总线写入字节数据(设备地址,配置,0)
#写入陀螺配置寄存器
总线写入字节数据(设备地址,陀螺配置,24)
#写入中断使能寄存器
总线写入字节数据(设备地址,INT启用,1)
def读取原始数据(addr):
#加速度计和陀螺仪值为16位
高=总线读取字节数据(设备地址,地址)
低=总线读取字节数据(设备地址,地址+1)
#连接高值和低值
值=((高32768):
值=值-65536
返回值
总线=smbus.smbus(1)#或总线=smbus.smbus(0)用于较旧版本的板
设备地址=0x68#MPU6050设备地址
MPU_Init()
打印(“读取陀螺仪和加速度计数据”)
尽管如此:
#读取加速计原始值
acc x=读取原始数据(加速输出)
acc_y=读取原始数据(加速)
acc_z=读取原始数据(加速)
#读取陀螺仪原始值
陀螺x=读取原始数据(陀螺x输出H)
gyro_y=读取原始数据(gyro_YOUT_H)
gyro_z=读取原始数据(gyro_ZOUT_H)
#满标度范围+/-250度/C,根据灵敏度标度系数
Ax=附件x/16384.0
Ay=附件y/16384.0
Az=acc_z/16384.0
Gx=陀螺仪x/131.0
Gy=陀螺y/131.0
Gz=陀螺z/131.0
打印(“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)
最终数据={“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}
以open(\\test.csv”,“a”)作为输出:
writer=csv.writer(输出,分隔符=“,”)
writer.writerow(最终数据)
睡眠(2)

首先,将导入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)

导入smbus
从时间上导入睡眠
导入csv
#一些MPU6050寄存器及其地址
压水堆管理1=0x6B
SMPLRT_DIV=0x19
配置=0x1A
陀螺配置=0x1B
INT_ENABLE=0x38
加速度x输出H=0x3B
加速时间=0x3D
加速圈H=0x3F
陀螺输出H=0x43
陀螺仪输出H=0x45
陀螺仪输出H=0x47
def MPU_Init():
#写入采样率寄存器
总线写入字节数据(设备地址,SMPLRT分区,7)
#写入电源管理寄存器
总线写入字节数据(设备地址,PWR管理1,1)
#写入配置寄存器
总线写入字节数据(设备地址,配置,0)
#写入陀螺配置寄存器
总线写入字节数据(设备地址,陀螺配置,24)
#写入中断使能寄存器
总线写入字节数据(设备地址,INT启用,1)
def读取原始数据(addr):
#加速度计和陀螺仪值为16位
高=总线读取字节数据(设备地址,地址)
低=总线读取字节数据(设备地址,地址+1)
#连接高值和低值
值=((高32768):
值=值-65536
返回值
总线=smbus.smbus(1)#或总线=smbus.smbus(0)用于较旧版本的板
设备地址=0x68#MPU6050设备地址
MPU_Init()
打印(“读取陀螺仪和加速度计数据”)
尽管如此:
#读取加速计原始值
acc x=读取原始数据(加速输出)
acc_y=读取原始数据(加速)
acc_z=读取原始数据(加速)
#读取陀螺仪原始值
陀螺x=读取原始数据(陀螺x输出H)
gyro_y=读取原始数据(gyro_YOUT_H)
gyro_z=读取原始数据(gyro_ZOUT_H)
#满标度范围+/-250度/C,根据灵敏度标度系数
Ax=附件x/16384.0
Ay=附件y/16384.0
Az=acc_z/16384.0
Gx=陀螺仪x/131.0
Gy=陀螺y/131.0
Gz=陀螺z/131.0
打印(“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)
最终数据={“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}
以open(\\test.csv”,“a”)作为输出:
writer=csv.writer(输出,分隔符=“,”)
writer.writerow(最终数据)
睡眠(2)

@nimajv是正确的,但我想你忘了在
a+
模式下打开文件

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

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