将串行数据输出保存到每小时文件python

时间:2019-06-04 13:23:31

标签: python cron serial-port raspberry-pi3

我有一个在Raspberry Pi 3B +上运行的python脚本,该脚本正在从连接到串行端口的气压计读取数据。该脚本运行良好,可以从气压计捕获10 Hz数据(每秒10行数据)。

我有一个@reboot cron作业,每当Pi启动时都会启动脚本。 在启动时会生成一个文件名。

import io
import serial
import sys
import time
from time import sleep
from datetime import datetime, timedelta

#serial port
port = "/dev/serial/by-id/usb-FTDI_US232R_FT1TSTRU-if00-port0"

#try to connect to barometer at 9600bps:
ser=serial.Serial(port, 9600, timeout=1, parity=serial.PARITY_NONE, stopbits=serial.STOPBITS_ONE,bytesize=serial.EIGHTBITS)

# File storage
SSD_path="/media/pi/USBDRIVE/"
filename=time.strftime('barometer-%Y-%m-%d-%H%M.dat')
path=SSD_path + filename

#write data to file on SSD
ser.write(b'*0100E6\r\n')

with open(path, 'w+') as f:
    while True:
        line = str(ser.readline())
        f.writelines([line.strip(), " t = %s \n " % (datetime.now().strftime("%Y-%m-%d-%H:%M:%S.%f")[:-5])])

我希望脚本每小时生成一个新的文件名,而不是我目前不断增长的单个文件的情况。 我该如何实现?

1 个答案:

答案 0 :(得分:1)

我没有您的硬件,因此在下面的代码中用##注释掉了处理该代码的部分代码。它显示了如何实现我在注释中建议的内容,即生成输出文件名,运行数据捕获循环一个小时,然后冲洗并重复。

import io
import os
import random  # for testing
##import serial
import sys
import time
from time import sleep
from datetime import datetime, timedelta

TIME_INTERVAL = 3600  # Seconds.

#serial port
port = "/dev/serial/by-id/usb-FTDI_US232R_FT1TSTRU-if00-port0"

#try to connect to barometer at 9600bps:
##ser = serial.Serial(port, 9600, timeout=1, parity=serial.PARITY_NONE,
##                    stopbits=serial.STOPBITS_ONE, bytesize=serial.EIGHTBITS)

# File storage
##SSD_path = "/media/pi/USBDRIVE/"
SSD_path = r"C:\vols\Files\PythonLib\Stack Overflow"
#write data to file on SSD
##ser.write(b'*0100E6\r\n')

print('running')
while True:
    filename = time.strftime('barometer-%Y-%m-%d-%H%M%S.dat')
    path = os.path.join(SSD_path, filename)

    with open(path, 'w+') as f:
        start = time.time()
        while (time.time() - start) < TIME_INTERVAL:
##            line = str(ser.readline())
            line = str(random.randint(0, 100))
            time.sleep(.1)
##            f.writelines([line.strip(), " t = %s \n " % (datetime.now().strftime("%Y-%m-%d-%H:%M:%S.%f")[:-5])])
            f.writelines([line.strip(), " t = %s \n " % (datetime.now().strftime("%Y-%m-%d-%H:%M:%S.%f")[:-5])])