我正在使用Arduino并从我的盾牌和传感器获取值。而且由于监听端口9600,我还将其中一些发送到serial.println。我正在侦听端口9600并将这些值保存到txt。之后,我将这些值上传到数据库并使用Web服务。
但我无法在给定时间内保存9600端口。因为如果我没有关闭python应用程序,它永远不会关闭,也永远不会保存txt文件。
我的代码如下。我想每1分钟保存一次。
我该怎么做?
import serial
ser = serial.Serial('/dev/tty.usbmodem1411', 9600, timeout=1)
while 1:
line = ser.readline() # read a '\n' terminated line
line2=line.decode("utf-8")
ths = open("/Users/macproretina//Desktop/data.txt", "a")
ths.write(line2)
ser.close()
答案 0 :(得分:1)
您可以使用简单的计时器来停止循环。我稍微清理了资源管理,上下文管理器非常有用。
import threading
from contextlib import closing
import serial
continue_looping = True
def stopper():
global continue_looping
continue_looping = False
timer = threading.Timer(60, stopper)
timer.start()
with open("/Users/macproretina/Desktop/data.txt", 'w') as out_file:
with closing(serial.Serial('/dev/tty.usbmodem1411', 9600, timeout=1)) as ser:
while continue_looping:
line = ser.readline() # read a '\n' terminated line
out_file.write(line.decode('utf-8')
out_file.flush()
由于串行超时,可能会有点偏差。请注意,如果您在需要时调用f.flush()
,则会将输出写入文件。