簡體   English   中英

使用python和heroku網頁中的MQTT發布和訂閱消息

[英]Publish and subscribe messages with MQTT in python and a heroku webpage

我有兩個問題。 我在python中使用MQTT來接收來自heroku網頁的消息。 我的heroku網頁上有兩個文本框(value1和value2)。 我將MQTT的值發送到python腳本。

這段代碼有效 :如果value1大於10則led點亮,或者value2大於10則led點亮。

 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)

我的第一個問題。 我想要這樣:如果value1和value2的總和大於led的10。 此代碼無效。

   **def on_message(client, userdata, msg):**


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

  value1 = int(msg.payload)


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

         value2 = int(msg.payload)

         if ((value1 + value2) > 10):
            GPIO.output(led, GPIO.HIGH)

有人能幫我嗎?

我的第二個問題。 我還有另一個heroku網頁,我嘗試在其中接收消息。 我輸入以下內容: import mysql.connector as mc形式import mysql.connector as mc在我的heroku網頁上,我收到此錯誤: 沒有名為mysql.connector的模塊 我也使用了requirements.txt文件。

有人能幫我嗎? 非常感謝你!

考慮到您要問兩個不同的問題,這個問題有點難以回答,因此,我只解決第一個問題,並鼓勵您將第二個問題分開。

查看您的代碼,我認為問題與嵌套語句的方式有關。 我認為問題在於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循環來處理結果的基本原理。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM