【问题标题】:GPIO Raspberry Pi pin maintain last status when interrupt script and restart itGPIO Raspberry Pi 引脚在中断脚本并重新启动时保持最后状态
【发布时间】:2016-09-25 02:25:02
【问题描述】:

我正在使用 MQTT 和 GPIO,我注意到 pin 像内存一样保持最后的状态,我举一个例子,这是我的脚本:

#!/usr/bin/python3

#required libraries
import sys                                 
import ssl
import paho.mqtt.client as mqtt
import RPi.GPIO as gpio
import json
from time import sleep

try:

    ledPin = 25
    gpio.setmode(gpio.BCM)
    gpio.setup(ledPin, gpio.OUT)

    def on_connect(client, userdata, flags, rc):
        print("Connected with result code "+str(rc))
        client.subscribe("topic/led_switch",1)

    def on_message(client, userdata, msg):

        json_data = msg.payload.decode('utf-8')

        print("Message received: "+json_data)

        parsed_json = json.loads(json_data)

        if "on" in parsed_json:
            gpio.output(ledPin, gpio.HIGH)
        elif "off" in parsed_json:
            gpio.output(ledPin, gpio.LOW)


    def on_subscribe(mqttc, obj, mid, granted_qos):
        print("Subscribed: "+str(mid)+" "+str(granted_qos)+"data"+str(obj))


    mqttc = mqtt.Client(client_id="RaspberryPi_Sub", clean_session=True)

    mqttc.on_connect = on_connect
    mqttc.on_message = on_message
    mqttc.on_subscribe = on_subscribe



    mqttc.connect("...my_server", port=8883)

    mqttc.loop_forever()

except KeyboardInterrupt:
    pass
finally:
    gpio.cleanup()

如果我用 CTRL+C 停止脚本并且 LED 为例如 HIGH,当我再次启动脚本时 LED 开始为 HIGH,但它应该从 LOW 状态开始,反之亦然,如果我在 LOW 时停止,然后重新启动 LOW ,有什么想法吗?

【问题讨论】:

  • 您为什么认为这与 MQTT 相关?或者您是否在启动时看到传入消息?例如您是否正在发布“保留”的控制消息?
  • 我试图评论订阅行,当我启动脚本并且 LED 启动时
  • 如果您启动脚本但不发布任何控制消息,您是否仍会看到类似“收到消息:...”的日志消息?
  • 是的,GPIO 保持它的状态。这就是它的工作原理。如果你在启动时需要它处于特殊状态,你必须将它设置为它。

标签: python raspberry-pi mqtt gpio


【解决方案1】:

如果您希望客户端在重新启动时有效地记住上次状态,那么您应该发布控制消息,并将 retained 标志设置为 true。

这意味着代理将在订阅时将最后发布的消息传递给客户端。

这是需要在发布客户端而不是订阅者中设置的东西。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-07-15
    • 2015-08-11
    • 2018-10-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多