将串行数据输出保存到每小时文件 python
Save serial data output to hourly files python
我在 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])])
我想让脚本每小时生成一个新文件名,而不是我目前遇到的不断增长的单一文件情况。
我怎样才能做到这一点?
我没有你的硬件,所以在下面的代码中用 ##
注释掉了处理它的部分代码。它展示了如何实现我在评论中建议的内容——即生成一个输出文件名,运行 数据捕获循环一个小时,然后冲洗并重复。
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])])
我在 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])])
我想让脚本每小时生成一个新文件名,而不是我目前遇到的不断增长的单一文件情况。 我怎样才能做到这一点?
我没有你的硬件,所以在下面的代码中用 ##
注释掉了处理它的部分代码。它展示了如何实现我在评论中建议的内容——即生成一个输出文件名,运行 数据捕获循环一个小时,然后冲洗并重复。
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])])