SlideShare a Scribd company logo
MQTT on
ESP32/ESP8266
BY MICROPYTHON
先決條件
◼MicroPython韌體
◼MQTT Broker
◼ Mosquitto broker on Raspberry Pi
◼ESP8266 模組 x2
◼Raspberry Pi
◼uPyCraft IDE
正修科技大學 資訊工程系 涂紳騰 2
MQTT
◼MQTT v3.1.1 於 2014/ 10 / 29 成為 OASIS 標準。
◼MQTT v5.0 於 2019/04/03 發佈
◼Message Queuing Telemetry Transport (訊息佇列遙測傳輸)
◼發佈/訂閱訊息協議 (publish-subscribe messaging protocol)
正修科技大學 資訊工程系 涂紳騰 3
專案概覽
正修科技大學 資訊工程系 涂紳騰 4
ESP#1
發佈hello的主題
訂閱notification的主題
ESP#2
訂閱hello的主題
發佈notification的主題
Hello 1,Hello 2,
Hello 3, ….
received,
received,
received, ….
樹莓派安裝並執行Mosquitto broker
正修科技大學 資訊工程系 涂紳騰 5
準備ESP#1 -導入umqtttsimple library
◼導入umqtttsimple library
◼ https://github.com/RuiSantosdotme/ESP-
MicroPython/blob/master/code/MQTT/umqttsimple.py
◼uPyCraft IDE > 開新檔案
◼複製上述連結內umqtttsimple library的代碼
◼保存並命名umqtttsimple.py
◼點擊Download and Run 將umqtttsimple.py傳進ESP#1
正修科技大學 資訊工程系 涂紳騰 6
準備ESP#1 – boot.py
◼uPyCraft IDE > 開啟ESP#1的boot.py
◼將以下連結的boot.py代碼複製到ESP#1的boot.py
◼https://github.com/RuiSantosdotme/ESP-
MicroPython/blob/master/code/MQTT/MQTT_Hello_World/ESP_1/
boot.py
正修科技大學 資訊工程系 涂紳騰 7
準備ESP#1 – boot.py程式碼如何運作
◼導入以下所有libraries:
正修科技大學 資訊工程系 涂紳騰 8
準備ESP#1 – boot.py程式碼如何運作
◼將除錯設置為None並啟用垃圾收集器:
正修科技大學 資訊工程系 涂紳騰 9
準備ESP#1 – boot.py程式碼如何運作
◼在以下變數中,您需要輸入網絡憑證和代理(broker)IP地址:
正修科技大學 資訊工程系 涂紳騰 10
準備ESP#1 – boot.py程式碼如何運作
◼要創建MQTT客戶端,我們需要獲取ESP唯一ID。將它保存在
client_id變數中。
正修科技大學 資訊工程系 涂紳騰 11
準備ESP#1 – boot.py程式碼如何運作
◼接下來,編寫ESP#1訂閱的主題,以及它將發布消息的主題:
正修科技大學 資訊工程系 涂紳騰 12
準備ESP#1 – boot.py程式碼如何運作
◼last_message變數將保留上次發送消息的時間
◼ message_interval是每條消息發送之間的時間。在這裡,我們
將其設置為5秒(這意味著將每5秒發送一條新消息)。
◼counter變數只是一個要添加到消息中的計數器。
正修科技大學 資訊工程系 涂紳騰 13
準備ESP#1 – boot.py程式碼如何運作
◼之後,我們定義連接到網絡的程序:
正修科技大學 資訊工程系 涂紳騰 14
準備ESP#1 – main.py
◼uPyCraft IDE > 開啟ESP#1的main.py
◼將以下連結的boot.py代碼複製到ESP#1的main.py
◼https://github.com/RuiSantosdotme/ESP-
MicroPython/blob/master/code/MQTT/MQTT_Hello_World/ESP_1/
main.py
正修科技大學 資訊工程系 涂紳騰 15
準備ESP#1 – main.py程式碼如何運作
◼創建一個回調函數sub_cb(),該函數將在ESP訂閱的主題有消息
發布時運行。
◼回調函數應接受主題(topic)和消息(msg)作為參數。
正修科技大學 資訊工程系 涂紳騰 16
準備ESP#1 – main.py程式碼如何運作
◼connect_and_subscribe()函數負責連接到broker以及訂閱主題。
◼首先將client_id,mqtt_server和topic_sub變數宣告為全局變數。
這樣,我們就可以在整個代碼中訪問這些變數。[第9行]
正修科技大學 資訊工程系 涂紳騰 17
準備ESP#1 – main.py程式碼如何運作
◼然後,創建一個名為client的MQTTClient物件。我們需要傳遞
cliend_id和MQTT代理的IP地址(mqtt_server)作為參數。這些變
量已在boot.py文件中設置。[第10行]
正修科技大學 資訊工程系 涂紳騰 18
準備ESP#1 – main.py程式碼如何運作
◼之後,為client設置回調函數sub_cb()。[第11行]
◼接下來,使用MQTTClient物件上的connect()方法將client連接
到代理。[第12行]
正修科技大學 資訊工程系 涂紳騰 19
準備ESP#1 – main.py程式碼如何運作
◼連接後,我們訂閱了topic_sub主題。已在boot.py文件中設置
topic_sub。[第13行]
◼最後,打印一條訊息並返回client。[第14~15行]
正修科技大學 資訊工程系 涂紳騰 20
準備ESP#1 – main.py程式碼如何運作
◼我們創建一個名為restart_and_reconnect()的函數。如果ESP32
或ESP8266無法連接到代理,將調用此函數。
◼此函數打印一條消息,通知連接未成功。我們等10秒鐘。然後,
我們使用reset()方法重置ESP。
正修科技大學 資訊工程系 涂紳騰 21
準備ESP#1 – main.py程式碼如何運作
◼到目前為止,我們已經創建了與MQTT通訊相關任務的函數。
從現在開始,代碼將調用這些函數來實現MQTT通訊。
◼第一件事是連接到MQTT代理並訂閱主題。因此,通過調用
connect_and_subscribe()函數來創建client。
◼如果我們無法連接到MQTTT代理,我們將通過調用
restart_and_reconnect()函數重啟ESP
正修科技大學 資訊工程系 涂紳騰 22
準備ESP#1 – main.py程式碼如何運作
◼在while循環中,我們將接收和發布消息。我們使用try和except
語句來防止ESP在出現問題時崩潰。如果出現意外情況,我們調
用restart_and_reconnect()函數。
正修科技大學 資訊工程系 涂紳騰 23
準備ESP#1 – main.py程式碼如何運作
◼在try區塊中,我們首先在client上應用check_msg()方法來檢查
來自服務器的聽候(pending)消息是否可用。[第29行]
◼它等待單個傳入的MQTT消息並處理它。訂閱的消息被傳遞給
我們之前定義的回調函數sub_cb()。如果沒有待處理消息,則返
回None。
正修科技大學 資訊工程系 涂紳騰 24
準備ESP#1 – main.py程式碼如何運作
◼然後,我們添加一個if語句來檢查自上一條消息發送以來是否
已經過了5秒(message_interval)。[第30行]
◼如果是時候發送新消息,我們使用“Hello”文本後跟計數器創
建一個msg變數。[第31行]
正修科技大學 資訊工程系 涂紳騰 25
準備ESP#1 – main.py程式碼如何運作
◼要在特定主題上發布消息,只需在client上應用publish()方法,
並將topic_pub,msg其作為參數。 topic_pub變數已在boot.py文
件中設置為hello。[第32行]
◼發送消息後,我們通過將last_message變數設置為當前時間來更
新上次收到消息的時間。最後,我們在每個循環中增加counter
變數。[第33~34行]
正修科技大學 資訊工程系 涂紳騰 26
準備ESP#2 -導入umqtttsimple library
◼導入umqtttsimple library
◼ https://github.com/RuiSantosdotme/ESP-
MicroPython/blob/master/code/MQTT/umqttsimple.py
◼uPyCraft IDE > 開新檔案
◼複製上述連結內umqtttsimple library的代碼
◼保存並命名umqtttsimple.py
◼點擊Download and Run 將umqtttsimple.py傳進ESP#1
正修科技大學 資訊工程系 涂紳騰 27
準備ESP#2 – boot.py
◼uPyCraft IDE > 開啟ESP#2的boot.py
◼將以下連結的boot.py代碼複製到ESP#2的boot.py
◼https://github.com/RuiSantosdotme/ESP-
MicroPython/blob/master/code/MQTT/MQTT_Hello_World/ESP_2/
boot.py
正修科技大學 資訊工程系 涂紳騰 28
準備ESP#2 – boot.py程式碼如何運作
◼boot.py與ESP#1相似,這裡唯一的區別是我們訂閱了hello主題
並在notification主題上發布。
正修科技大學 資訊工程系 涂紳騰 29
準備ESP#2 – main.py
◼uPyCraft IDE > 開啟ESP#2的main.py
◼將以下連結的boot.py代碼複製到ESP#2的main.py
◼https://github.com/RuiSantosdotme/ESP-
MicroPython/blob/master/code/MQTT/MQTT_Hello_World/ESP_1/
main.py
正修科技大學 資訊工程系 涂紳騰 30
準備ESP#2 – main.py程式碼如何運作
◼與ESP#1中的main.py非常相似。我們創建了sub_cb(),
connect_and_subscribe()和restart_and_reconnect()函數。這次,
sub_cb()函數只打印有關主題和已接收消息的信息。
正修科技大學 資訊工程系 涂紳騰 31
準備ESP#2 – boot.py程式碼如何運作
◼在while循環中,我們檢查是否有新消息並將其保存在
new_message變數中。
◼如果我們收到一條新消息,我們會在topic_sub主題(notification)
上發布一條消息“received。
正修科技大學 資訊工程系 涂紳騰 32
示範
ESP#2應該從ESP#1
接收”Hello”消息
正修科技大學 資訊工程系 涂紳騰 33
示範
另一方面,ESP#1板
應該收到”received”消
息。
正修科技大學 資訊工程系 涂紳騰 34
參考
◼MicroPython – Getting Started with MQTT on ESP32/ESP8266
◼ https://randomnerdtutorials.com/micropython-mqtt-esp32-esp8266/
◼How to Install Mosquitto Broker on Raspberry Pi
◼ https://randomnerdtutorials.com/how-to-install-mosquitto-broker-on-
raspberry-pi/
正修科技大學 資訊工程系 涂紳騰 35

More Related Content

PDF
2015 JSDC Build Anything with JavaScript
Web Arduino
 
PPTX
LinkIt Smart 7688程式開發
Wei-Tsung Su
 
ODP
Linux Introduction
Michael Huai
 
PDF
Proxmox VE 功能概觀、案例分享與實用工具 [2019/12/07] @Proxmox VE 中文使用者社團 2019 年會
Jason Cheng
 
PDF
NFC近場通訊-twMVC#9
twMVC
 
PPTX
2018 VLSI/CAD Symposium Tutorial (Aug. 7, 20:00-21:00 Room 3F-VII)
Simen Li
 
PDF
Solution ahn lab scm(4100+1100)-education
ahnlabchina
 
PDF
Introduction MQTT in Chinese
Eric Xiao
 
2015 JSDC Build Anything with JavaScript
Web Arduino
 
LinkIt Smart 7688程式開發
Wei-Tsung Su
 
Linux Introduction
Michael Huai
 
Proxmox VE 功能概觀、案例分享與實用工具 [2019/12/07] @Proxmox VE 中文使用者社團 2019 年會
Jason Cheng
 
NFC近場通訊-twMVC#9
twMVC
 
2018 VLSI/CAD Symposium Tutorial (Aug. 7, 20:00-21:00 Room 3F-VII)
Simen Li
 
Solution ahn lab scm(4100+1100)-education
ahnlabchina
 
Introduction MQTT in Chinese
Eric Xiao
 

Similar to MQTT on ESP32(ESP8266) (20)

PDF
Cocos2d x presentation cocoachina-王哲
csdnmobile
 
PDF
Solution ahn lab scm(manufactory)
ahnlabchina
 
PDF
20170415- 智慧空調通訊系統實務_柯大
MAKERPRO.cc
 
PDF
20200905_tcn_python_opencv_part1_omnixri
OmniXRI Studio
 
PDF
twMVC#41 hololens2 MR
twMVC
 
PDF
2010 08-14 web-sitei18n
tsunghaolee
 
PPT
防火墙产品原理介绍20080407
paulqi
 
PPT
Ccns 網路基礎概論
世平 梁
 
PDF
Proxmox VE 開源虛擬化平台實際應用架構與案例 [2025/06/02] @vLAB線上研討會
Jason Cheng
 
PPTX
LinkIt 7697 IoT tutorial
CAVEDU Education
 
PPTX
Raspberry pi 基本操作
艾鍗科技
 
PDF
容器式高效率 ChatBot 開發方法
Philip Zheng
 
PDF
OpenWrt Case Study 2008
Rex Tsai
 
PDF
OpenWRT, A value-add base solution for your product. (1st part, chihchun)
Rex Tsai
 
PPT
OpenWRT, A value-add base solution for your product. (2nd, Macpual)
Macpaul Lin
 
PDF
Ipaq with linux
descent Sung
 
PPT
Xml Lab 電腦&網路
aecro
 
PDF
物聯網科技與實作 Iot technology and projects
Kuo-Yi Chen
 
PDF
02 86 duino_簡介
CAVEDU Education
 
Cocos2d x presentation cocoachina-王哲
csdnmobile
 
Solution ahn lab scm(manufactory)
ahnlabchina
 
20170415- 智慧空調通訊系統實務_柯大
MAKERPRO.cc
 
20200905_tcn_python_opencv_part1_omnixri
OmniXRI Studio
 
twMVC#41 hololens2 MR
twMVC
 
2010 08-14 web-sitei18n
tsunghaolee
 
防火墙产品原理介绍20080407
paulqi
 
Ccns 網路基礎概論
世平 梁
 
Proxmox VE 開源虛擬化平台實際應用架構與案例 [2025/06/02] @vLAB線上研討會
Jason Cheng
 
LinkIt 7697 IoT tutorial
CAVEDU Education
 
Raspberry pi 基本操作
艾鍗科技
 
容器式高效率 ChatBot 開發方法
Philip Zheng
 
OpenWrt Case Study 2008
Rex Tsai
 
OpenWRT, A value-add base solution for your product. (1st part, chihchun)
Rex Tsai
 
OpenWRT, A value-add base solution for your product. (2nd, Macpual)
Macpaul Lin
 
Ipaq with linux
descent Sung
 
Xml Lab 電腦&網路
aecro
 
物聯網科技與實作 Iot technology and projects
Kuo-Yi Chen
 
02 86 duino_簡介
CAVEDU Education
 
Ad

MQTT on ESP32(ESP8266)