我正在做一个初步的脚本,用于在我发送串口时读取串口 “ 1” 每3分钟连续无限次运行。我需要一个线程脚本 因为 这将必须与其他功能集成在一起。 的 串行端口连接到带有传感器的arduino,但我不确定程序 是 正式更正。有人可以帮我吗?谢谢
#!/usr/bin/python
import time
import serial
import threading
import time
import io
ser=serial.Serial('/dev/ttyUSB0', 57600, timeout=3)
def printit():
threading.Timer(180.0, printit).start()
ser.write(b'1\n')
lettura=ser.readline()
print lettura
try:
printit()
except:
print "Error: unable to start thread"
while 1:
pass
答案 0 :(得分:0)
您已经定义了printit
函数的递归方式将创建一个无限循环,但是,该定义使控制线程的执行变得有些复杂。您可能需要考虑编写一个自定义Thread
类,该类接受要在给定间隔和要等待的间隔(类似于传递给Timer
的间隔)上运行的功能。 / p>
import threading
import time
class RepeatThread(threading.Thread):
def __init__(self, interval, f):
self.interval = interval
self.f = f
def start(self):
while True:
self.f()
time.sleep(self.interval)
然后您可以使用此类,
import serial
ser = serial.Serial('/dev/ttyUSB0', 57600, timeout=3)
def send_bytes():
ser.write(b'1\n')
t = RepeatThread(180.0, send_bytes)
t.start()
while True:
pass
此外,对此question的回答提供了许多有关如何在python中构建无限循环线程的重要信息。您可能还需要遵循他们在访问串行设备时的锁定说明(如果有多个线程可能同时使用它)。