[英]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.