Python Socket服务器和并行定时任务

问题描述 投票:0回答:2

我对python还是很陌生,只是挂在以下问题上。

我正在尝试建立植物浇水自动化系统。作为基础,使用龙卷风套接字服务器来侦听客户端的轮询并传递数据以进行可视化。

对于浇水自动化,我创建了一个ContinuousCallback(每30分钟),在其中我要检查湿度并控制泵(GPIO输出)。

任务:如果回调开始并且测量为低湿度,则应通过在规定的时间内切换GPIO引脚来开始泵送。 (时间在SQLITE DB中定义)

问题:我该怎么做,我进入Callback并开始泵操作(我有4个泵),并在指定时间后结束? (计时器?计时器中断?)而不会影响Socket Server IOloop?

谢谢您和最良好的祝愿

塞巴斯蒂安

python sockets timer raspberry-pi tornado
2个回答
0
投票

我猜

def on_button_or_whatever():
    setGPIO_HIGH()
    timer = threading.Timer(target=setGPIO_LOW,5.0)
    timer.start() 

0
投票

感谢乔兰,我做到了。

这是我的代码。

GPIO_PUMP_1 = 17
GPIO_PUMP_2 = 27
GPIO_PUMP_3 = 22
GPIO_PUMP_4 = 10

#function which switches the relais off (low-active)
def setGPIO_HIGH(pin):
    GPIO.setmode(GPIO.BCM)
    GPIO.setup(pin,     GPIO.OUT)
    GPIO.output(pin,    GPIO.LOW)
    return True


#function which switches the relais on (low-active)
def setGPIO_LOW(pin):
    GPIO.setmode(GPIO.BCM)
    GPIO.setup(pin,     GPIO.OUT)
    GPIO.output(pin,    GPIO.HIGH)
    return True



#main function for controlling the watering logic
def doStuff():
    setGPIO_HIGH(GPIO_PUMP_1)
    setGPIO_HIGH(GPIO_PUMP_2)
    setGPIO_HIGH(GPIO_PUMP_3)
    setGPIO_HIGH(GPIO_PUMP_4)

    timer1 = threading.Timer(5.0, setGPIO_LOW, [GPIO_PUMP_1])
    timer1.start()
    timer2 = threading.Timer(6.0, setGPIO_LOW, [GPIO_PUMP_2])
    timer2.start()
    timer3 = threading.Timer(7.0, setGPIO_LOW, [GPIO_PUMP_3])
    timer3.start()
    timer4 = threading.Timer(8.0, setGPIO_LOW, [GPIO_PUMP_4])
    timer4.start()

    WebSocketHandler.broadcast("all done")
    return True
最新问题
© www.soinside.com 2019 - 2024. All rights reserved.