iT邦幫忙

0

esp8266透過mqtt傳給python的訊息 處理 想請教前輩

  • 分享至 

  • xImage

小弟用ESP8266裝了兩個感測器透過MQTT Broker回傳兩個數值給PYTHON
但我想要進行字串分割 A變數=1號感測數值 B變數=2號感測數值 井水不犯河水
有上網找方法於是寫了<程式一>簡易的這個方法是可以的
但是我用相同的方法給帶入MQTT訊息變數<程式二>,附一張結果圖

<程式一>

msgs = '987,654,321'
strlist = msgs.split(',')

sa = strlist[0]
sb = strlist[1]
sc = strlist[2]

print('分割',sa,sb,sc)

<程式二>

def on_message(client, userdata, msg):
    # 轉換編碼utf-8才看得懂中文 
    global msgs , msg01

    msgs = (msg.payload.decode('utf-8'))
    strlist = msgs.split(',')
    sa = strlist[0]#1號數值
    sb = strlist[0]#2號數值
    print('1號感測數值:',sa)#1號數值
    print('2號感測數值:',sb)#2號數值

<結果圖>
https://ithelp.ithome.com.tw/upload/images/20200911/20126577WiSl8Khhzi.png
我需要的情境是如下 感測數值分明
1號感測數值: 2
2號感測數值: 28415
1號感測數值: 2
2號感測數值: 28415
1號感測數值: 2
2號感測數值: 28415
請問各位前輩是出了什麼問題

看更多先前的討論...收起先前的討論...
sa = strlist[0]#1號數值
sb = strlist[0]#2號數值
你有看出你的code , 好像都是 抓 位置0
我填1的話會沒有值,沒有東西傳
已解決
client.loop_start()
#運行視窗
window.mainloop()
client.loop_start()
#運行視窗
window.mainloop()

這樣可以解決?
真是厲害厲害
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

1 個回答

0
海綿寶寶
iT邦大神 1 級 ‧ 2020-09-11 11:02:45

根據這篇的說法

Note the message parameter is a message class with members topic, qos, payload, retain.

我猜
可以用 msg.payload 取得資料
並且用 msg.topic 去判斷是「1號感測器」或「2號感測器」
總之
先把 msg.topic, msg.qos, msg.payload, msg.retain 都顯示出來先

我要發表回答

立即登入回答