树莓派上 python 中的 paho 循环问题

时间:2021-03-18 11:12:19

标签: python mqtt raspbian paho

我正在尝试编写一个 python 脚本(用于 Raspbian),它在按下按钮时发送 mqtt 消息,并在收到 mqtt 消息时更改 LED 的开/关。

我可以放心发送,我在 4 个 RPi 上的脚本结构是一样的;

import
set variables
while true:
   do stuff endlessly

但是,我无法在此结构中为 paho 接收运行基本脚本。

我尝试遵循 paho 指南,但无法使其适应无限循环应用程序。

为什么我收不到 mqtt 消息?我与 2 个终端交叉检查;蚊子和酒吧,它们肯定是在网络上的其他地方发送/接收的。

编辑; 新的 on_connect 回调每 2 秒显示一次“已连接”,但脚本仍不接收/打印 mqtt 消息。当我按下按钮时它仍然会发送它们。

尝试在 Docker 中启动不同的 MQTT 代理,没有任何区别。

编辑3;作品! :D 最后我测试我一定没有醒着,并且在 on_connect 回调中注释掉了订阅行。 我还从我从教程中复制的 mqtt.Client 内容中删除了“P1”。

可以愉快地确认,它发送和接收mqtt消息。现在我可以集成到我更大的脚本中。感谢hardlib

新代码是这样的;

import sys
sys.path.append('/usr/local/lib/python2.7/dist-packages/paho/mqtt') 
import os
import time
import paho.mqtt.client as mqtt
from gpiozero import Button
from time import sleep

def on_message(client, userdata, message):
    print("message received " ,str(message.payload.decode("utf-8")))
    print("message topic=",message.topic)
    print("message qos=",message.qos)
    print("message retain flag=",message.retain)

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

button = Button(25)
broker_address="192.168.1.10"
client = mqtt.Client()

client.on_message=on_message
client.on_connect=on_connect
client.connect(broker_address, 1883, 60)
#client.subscribe("button")
client.loop_start()

while 1:
        if button.is_pressed:
               print("button pressed")
               client.publish("button","ON",1)
               sleep(0.1)
        sleep(0.1)
        print("*")

0 个答案:

没有答案