python线程串行读取无限循环

时间:2018-09-15 08:49:11

标签: python arduino

我正在做一个初步的脚本,用于在我发送串口时读取串口    “ 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

1 个答案:

答案 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中构建无限循环线程的重要信息。您可能还需要遵循他们在访问串行设备时的锁定说明(如果有多个线程可能同时使用它)。