使用python中的MQTT和heroku webag发布和订阅消息

2024-06-16 11:31:26 发布

您现在位置:Python中文网/ 问答频道 /正文

我有两个问题。 我在python中使用MQTT从heroku网页接收消息。 我的heroku网页上有两个文本框(value1和value2)。我用MQTT将值发送到python脚本。在

此代码有效: 如果值1大于10,则指示灯亮起;如果值2大于10,则指示灯亮起。在

 def on_message(client, userdata, msg):

if(msg.topic=="/send/value1/to/led"):

  if ( int(msg.payload) > 10):

   GPIO.output(led, GPIO.HIGH)



if(msg.topic=="/send/value2/to/led"):

  if ( int(msg.payload) > 10):

   GPIO.output(led, GPIO.HIGH)

我的第一个问题。 我想要这个:如果值1和值2之和大于10,则指示灯亮起。 此代码不起作用。

^{pr2}$

有人能帮我吗?在

我的第二个问题。 我有另一个heroku网页,我尝试接收消息。 我输入这个:import mysql.connector as mc 在我的heroku网页上,我得到这样的错误:没有命名的模块mysql.connector。我还使用要求.txt文件。在

有人能帮我吗? 非常感谢你!在


Tags: to代码send消息网页herokutopicled
1条回答
网友
1楼 · 发布于 2024-06-16 11:31:26

这个问题有点难回答,因为你问的是两个不同的问题,所以我只讲第一个问题,鼓励你把第二个问题分开。在

看看你的代码,我认为问题与你嵌套语句的方式有关。我认为问题是on_message回调每次被调用时都会收到一条消息,因此第二个条件永远无法满足。但鉴于我不确定你的空白是否准确,这是不清楚的。在

但是,我会避免以这种方式开始使用if语句,只需使用库中的message_callback_add函数(我假设您使用的是Paho客户机)来调用两个独立的函数,然后使用全局函数传递变量。然后使用while循环处理这两个变量。以下是文档:https://pypi.python.org/pypi/paho-mqtt/1.1#callbacks。这将为你提供一个更干净的方法,应该很容易开始工作。在

下面是一些示例代码:

import paho.mqtt.client as mqtt
import time

def on_connect(client, userdata, flags, rc):
    client.subscribe('led/#')

def value_one(client, userdata, message):
    global value1
    value1 = int(message.payload)

def value_two(client, userdata, message):
    global value2
    value2 = int(message.payload)


MQTT_BROKER = []
client = mqtt.Client(client_id='whatever')
client.on_connect = on_connect
client.message_callback_add('led/value_one', value_one)
client.message_callback_add('led/value_two', value_two)
client.connect(MQTT_BROKER)
client.loop_start()

while True:
    if value1 + value2 > 10:
        #Do Something
        pass
    time.sleep(30)

我是从内存中完成的,所以可能会有错误,但它说明了使用基于主题的回调、全局变量和while循环来处理结果的基本原理。在

相关问题 更多 >