參考資料1:MQTT教學(一):認識MQTT
常用的MQTT broker:
iot.dfrobot.com (本次使用,參考附圖1)
參考資料2:RobotsInteractionMQTT
單純subscribe並不必使用thread。
注意連線iot.dfrobot.com時,topic 要使用名稱下的。
使用其它的mqtt還是會轉成simple_mqtt,所以直接以simple_mqtt操作即可。
附圖1:iot.dfrobot.com 測試資訊
附圖2:mblock預覽python code
附圖3:Python介面
【code】
說明:
cyberpi沒有適合的預設延伸集, 不熟python的話,可以改用halocode再傳回cyberpi.
請自行更改無線基地台SSID與密碼。
程式並沒有設定重新連接無線網路與MQTT,請自行修改。
學校網路不適合測試MQTT,可改用手機分享網路。
有時候燒錄程式或連接MQTT server(client.connect)會出現不明錯誤,請重新接線或重開網路。
接收MQTT訊息常見問題:
wait_msg() 會進行等待,等收到訊息再繼續。
check_msg()會直接確認,並往後面執行程式,但在此設備會出現異常,不建議使用。(在其它esp32是可行的)
直接使用cyberpi中的獨立python編輯器會無法混合使用積木中的程式,但可以上傳檔案及安裝套件,純python再考慮使用。
此範例可混合積木與python。
操作步驟:
可以先在mblock積木介面撰寫程式,完成後點選python預覽圖示複製code,再到python中編輯後上傳燒錄,可參考附圖2。
python介面會儲存在cyberpi中,但切換回積木再編輯時,python介面不會同時變更,需要重新進行步驟一再於Python介面進行上傳燒錄,可參考附圖3。
存檔時記得分別儲存下載積木程式與python code。
以cyberpi進行python debug時並不會顯示詳細的錯誤訊息,請注意縮排及其它語法錯誤。
實作結果:
接收到訊息中有1_ 會顯示接到的訊息與rfid 1。
其它會顯示接到的訊息與rfid 0。
由mqtt接收的訊息為二進位字串b' ' , 在此設備使用msg.decode()轉換時出現過錯誤 (在其它esp32是可行的), 故直接改用in msg方式偵測。
註:自行設定網路連線可能會跟原本啟動設定、wifi及mesh等網路用積木衝突,如果要手動重寫的話,可以考慮使用_thread 以multi thread加函式修改全部的mesh及廣播訊息。