使用 PySerial 仅每 2 分钟而不是 1 分钟从 Arduino 获取更新

Getting updates from Ardunio with PySerial only every 2 minutes instead of 1 minute

我有一个 Arduino,每 60 秒报告一次时间(以秒为单位)、电压、电流和焦耳。在这样的串行监视器中:

time,voltage,current,joules
60,1.45,0.39,0.57
120,1.45,0.39,1.13
180,1.45,0.39,1.70
240,1.45,0.39,2.26
...

但是下面的 python 脚本我没有得到这个结果:

import serial
ser = serial.Serial('COM5', 9600)
logfile = open("batterytest.log", 'w')
while True:
    if ser.readline() == b'Test Complete!':
        logfile.close()
        exit()
    logfile.write(ser.readline().decode("utf-8"))
    logfile.flush()

相反,我每 120 秒看到一次结果:

time,voltage,current,joules
120,1.13,0.02,0.05
240,1.13,0.02,0.09
360,1.13,0.02,0.14
480,1.13,0.02,0.19
....

由于某些时间问题,它可能会错过中间数据点。您可以尝试使用腻子来查看您的 arduino 实际上是否输出了正确的数据点。

对于您的 PySerial 程序,我会添加一个变量 "data" 来首先存储您的串行读取行,然后在其上执行您的逻辑。

import serial
ser = serial.Serial('COM5', 9600)
logfile = open("batterytest.log", 'w') 
while True:
    data = ser.readline()
    if data == b'Test Complete!':
        logfile.close()
        exit()
    logfile.write(data.decode("utf-8"))
    logfile.flush()

此外,根据您的 Arduino 输出时序,您可以考虑为串行读取添加超时值:

ser = serial.Serial('COM5', 9600, timeout = 1 )
# Here the time out is 1 second