之前我們手機端使用的 MQTT App 為 MQTT Dash ,裡面的顯示介面大致上長這個樣子
推薦大家使用另一款 App 名為 Linear MQTT Dashboard
可惜的是他的無法抓出某一個 topic 的歷史數據,亦無法以圖表的方式顯示出歷史數據
在使用上還遇到另一個關於 retained message 的問題
還沒有空仔細撰寫及研究,如果是用前一篇程式碼的讀者,請在 App 裡面對某個 topic 發佈訊息時暫且不要勾選任何有關 retained message 的東西(例如不要對 leds/esp8266 ),否則 NodeMCU 將不再可以被手動控制
PS : Linear MQTT Dashboard 裡面的 'Switch' 也別使用,因我發現他在設定裡面沒有辦法可以勾選 "是否" 發佈的是 retained message ,且經過測試發現他發佈的就是 retained message
一個解法是,更改 NodeMCU 的程式碼,將對 leds/esp8266 的訊息也設定為 retained,例如
MqttClient.publish(LTopic,"Led trun ON by NodeMCU", true);
但要很注意的是,當你對 LTopic 發佈一個 retained 的訊息
而在 void loop() 又使用 MqttClient.subscribe(LTopic,1); 對 Ltopic 進行訂閱
會使得程式不斷的進入 void callback(char* topic, byte* payload, unsigned int length) 函式裡面
此問題待解決
另外,我們介紹了兩個 MQTT APP ,我發現同時開啟兩個 MQTT 的 APP 會發現衝突狀況(應該不是 APP 本身問題,而是架構上本身就不應該這樣子做) ,導致 "後開" 的 APP 會進入死當的狀態
PS: 若你不幸的發現你已經喪失使用 NodeMCU 對 LED 的控制,請參考下文的文末,刪除所有 topic 的 message
一起學 Python 115 : Rapsberry pi 與 NodeMCU (ESP8266) 溝通 基於 MQTT - 2 安全性