Python 开始时检测pin状态,并允许在脚本退出后继续

Python 开始时检测pin状态,并允许在脚本退出后继续,python,raspberry-pi,raspbian,gpio,Python,Raspberry Pi,Raspbian,Gpio,我正试图有一个脚本,我通过cron触发该脚本,根据温度高低改变一个引脚。。我有几个问题 1-当脚本启动并设置GPIO引脚时,它会将引脚拉高或拉低(取决于参数)-似乎没有办法告诉它不要更改引脚的当前状态 这是一个问题,因为如果继电器为高电平,且默认状态为低电平,则继电器将设置为低电平,然后可能会在之后很快再次变为高电平-每分钟执行此操作对于管脚控制的内容非常困难(如果默认状态为高电平,则同样适用) 2-当脚本退出时,它会清除GPIO引脚并更改我的引脚状态。理想情况下,如果脚本将pin变高,那么当它

我正试图有一个脚本,我通过cron触发该脚本,根据温度高低改变一个引脚。。我有几个问题

1-当脚本启动并设置GPIO引脚时,它会将引脚拉高或拉低(取决于参数)-似乎没有办法告诉它不要更改引脚的当前状态

这是一个问题,因为如果继电器为高电平,且默认状态为低电平,则继电器将设置为低电平,然后可能会在之后很快再次变为高电平-每分钟执行此操作对于管脚控制的内容非常困难(如果默认状态为高电平,则同样适用)

2-当脚本退出时,它会清除GPIO引脚并更改我的引脚状态。理想情况下,如果脚本将pin变高,那么当它退出时,我希望pin保持高。如果我删除了cleanup函数,那么下次脚本运行时,它会说pin已经在使用中(问题?)

因此,每分钟运行的脚本如下所示

#!/usr/bin/python
import RPi.GPIO as GPIO
import time
import random
from temp import Temp # custom object to handle the temp sensor.

def main():
    random.seed()
    GPIO.setmode(GPIO.BCM)

    PUMP_ON_TEMP = 38
    PUMP_OFF_TEMP = 30
    GPIO_PIN = 18

    try:
        t = Temp('28-00000168c492')
        GPIO.setup(GPIO_PIN, GPIO.OUT)

        current_temp = t.getTemp()
        print current_temp

        if current_temp > PUMP_ON_TEMP:
            GPIO.output(GPIO_PIN,  1)
            print "Turning the pump on! %s" % current_temp

        if current_temp < PUMP_OFF_TEMP:
                GPIO.output(GPIO_PIN,  0)
                print "Turning the pump off! %s" % current_temp

    except KeyboardInterrupt:
        pass
    finally:
        GPIO.cleanup()

if __name__ == '__main__':
    main()
#/usr/bin/python
将RPi.GPIO导入为GPIO
导入时间
随机输入
从temp import temp#自定义对象处理温度传感器。
def main():
random.seed()
GPIO.setmode(GPIO.BCM)
泵开启温度=38
泵关闭温度=30
GPIO_引脚=18
尝试:
t=温度('28-00000168c492')
GPIO.setup(GPIO_引脚,GPIO.OUT)
当前温度=t.getTemp()
打印当前温度
如果当前温度>泵开启温度:
GPIO.output(GPIO_引脚,1)
打印“打开泵!%s”%current\u temp
如果当前温度<泵关闭温度:
GPIO.output(GPIO_引脚,0)
打印“关闭泵!%s”%current\u temp
除键盘中断外:
通过
最后:
GPIO.cleanup()
如果uuuu name uuuuuu='\uuuuuuu main\uuuuuuu':
main()
它通过cron每分钟运行一次。我不想使用循环


我尝试先读取引脚作为输入,以获取当前的高/低状态,但这会引发一个错误,表示需要先设置引脚。

我不想使用循环。
为什么?这不是最简单的选择吗?@matsjoyce-如果脚本死亡(例如无法读取温度传感器),那么我需要一个监控脚本来重新启动脚本。这也意味着我失去了通过cron控制脚本的能力。例如,我可能只想让它每天上午10点到下午4点运行,因此通过cron系统等非常容易做到。我使用gpiozero控制设备,并且有一个类似的问题。有一个用于创建对象的参数:initial_state=None,它不会因为创建了引用而重置输出。但它似乎总是在脚本退出时重置值。没用。更糟糕的是,当我再次运行脚本时,它知道我将其保留在的状态,并将pin恢复到该状态(只要脚本正在运行)。