用python实现串行数据记录
简介:用python实现串行数据记录,python,logging,serial-port,export-to-csv,pyserial,Python,Logging,Serial Port,Export To Csv,Pyserial,简介: from __future__ import print_function import serial, time, io, datetime from serial import Serial addr = "COM1" ## serial port to read data from baud = 9600 ## baud rate for instrument ser = serial.Serial( port = addr,\ baudrate = baud,
from __future__ import print_function
import serial, time, io, datetime
from serial import Serial
addr = "COM1" ## serial port to read data from
baud = 9600 ## baud rate for instrument
ser = serial.Serial(
port = addr,\
baudrate = baud,\
parity=serial.PARITY_NONE,\
stopbits=serial.STOPBITS_ONE,\
bytesize=serial.EIGHTBITS,\
timeout=0)
print("Connected to: " + ser.portstr)
## this will store each line of data
seq = []
count = 1 ## row index
while True:
for i in ser.read():
seq.append(i) ## convert from ACSII?
joined_seq = ''.join(str(v) for v in seq) ## Make a string from array
if i == '\n':
print("Line: " + str(count) + "" + str(datetime.datetime.now()) + joined_seq) ## append a timestamp to each row of data
seq = []
count += 1
break
ser.close()
我需要编写一个小程序,实时读取串行数据并将其写入文本文件。我在读取数据方面取得了一些进展,但我没有成功地将这些信息存储到新文件中
这是我的代码:
from __future__ import print_function
import serial, time, io, datetime
from serial import Serial
addr = "COM1" ## serial port to read data from
baud = 9600 ## baud rate for instrument
ser = serial.Serial(
port = addr,\
baudrate = baud,\
parity=serial.PARITY_NONE,\
stopbits=serial.STOPBITS_ONE,\
bytesize=serial.EIGHTBITS,\
timeout=0)
print("Connected to: " + ser.portstr)
## this will store each line of data
seq = []
count = 1 ## row index
while True:
for i in ser.read():
seq.append(i) ## convert from ACSII?
joined_seq = ''.join(str(v) for v in seq) ## Make a string from array
if i == '\n':
print("Line: " + str(count) + "" + str(datetime.datetime.now()) + joined_seq) ## append a timestamp to each row of data
seq = []
count += 1
break
ser.close()
谢谢也许您可以将以下内容改编为代码:
filename="myFile.txt"
datafile=open(filename, 'a')
while True:
data = ser.readline()
datafile.write(data)
datafile.close()
ser.close()
编辑
如果只是在文件中写入,一切正常,请尝试:
from __future__ import print_function
import serial, time, io, datetime
from serial import Serial
addr = "COM1" ## serial port to read data from
baud = 9600 ## baud rate for instrument
ser = serial.Serial(
port = addr,\
baudrate = baud,\
parity=serial.PARITY_NONE,\
stopbits=serial.STOPBITS_ONE,\
bytesize=serial.EIGHTBITS,\
timeout=0)
print("Connected to: " + ser.portstr)
filename="myFile.txt"
datafile=open(filename, 'a')
## this will store each line of data
seq = []
count = 1 ## row index
while True:
for i in ser.read():
seq.append(i) ## convert from ACSII?
joined_seq = ''.join(str(v) for v in seq) ## Make a string from array
if i == '\n':
datafile.write("Line: " + str(count) + "" + str(datetime.datetime.now()) + joined_seq) ## append a timestamp to each row of data
seq = []
count += 1
break
datafile.close()
ser.close()
这是一个很好的起点,但是您的示例删除了我添加的时间戳。这带来了一个我还没有克服的新障碍。我正在研究使用numpy和np.append函数向原始串行数据添加时间戳列。我现在意识到使用数组格式可能是我的最佳选择。好的,否则,在创建时间戳之后,您只能
datafile.write(“stampedDataHere”)
。好的,谢谢,我将研究创建stampedData对象。我刚刚意识到我的示例代码只打印时间戳,但它还没有将它附加到每一行数据中。目前正试图找出如何使其正常工作。stampedata
只是一个名称,我的意思是把它放在实际存在的地方,print…
类似于:datafile.write(“行:”+str(count)+“+str(datetime.datetime.now())+joined\seq)
我编辑了我的帖子。。。我无法在我的计算机中尝试此代码。。。。但主要思想在这里。。。。