【发布时间】: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