SlideShare a Scribd company logo
1 of 35
Download to read offline
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

Similar to MQTT on ESP32(ESP8266)

Cocos2d x presentation cocoachina-王哲
Cocos2d x presentation cocoachina-王哲Cocos2d x presentation cocoachina-王哲
Cocos2d x presentation cocoachina-王哲csdnmobile
 
Solution ahn lab scm(manufactory)
Solution ahn lab scm(manufactory)Solution ahn lab scm(manufactory)
Solution ahn lab scm(manufactory)ahnlabchina
 
20170415- 智慧空調通訊系統實務_柯大
20170415- 智慧空調通訊系統實務_柯大20170415- 智慧空調通訊系統實務_柯大
20170415- 智慧空調通訊系統實務_柯大MAKERPRO.cc
 
20200905_tcn_python_opencv_part1_omnixri
20200905_tcn_python_opencv_part1_omnixri20200905_tcn_python_opencv_part1_omnixri
20200905_tcn_python_opencv_part1_omnixriOmniXRI Studio
 
twMVC#41 hololens2 MR
twMVC#41 hololens2 MRtwMVC#41 hololens2 MR
twMVC#41 hololens2 MRtwMVC
 
2010 08-14 web-sitei18n
2010 08-14 web-sitei18n2010 08-14 web-sitei18n
2010 08-14 web-sitei18ntsunghaolee
 
防火墙产品原理介绍20080407
防火墙产品原理介绍20080407防火墙产品原理介绍20080407
防火墙产品原理介绍20080407paulqi
 
Ccns 網路基礎概論
Ccns 網路基礎概論 Ccns 網路基礎概論
Ccns 網路基礎概論 世平 梁
 
Raspberry pi 基本操作
Raspberry pi 基本操作Raspberry pi 基本操作
Raspberry pi 基本操作艾鍗科技
 
容器式高效率 ChatBot 開發方法
容器式高效率 ChatBot 開發方法容器式高效率 ChatBot 開發方法
容器式高效率 ChatBot 開發方法Philip Zheng
 
OpenWrt Case Study 2008
OpenWrt Case Study 2008OpenWrt Case Study 2008
OpenWrt Case Study 2008Rex Tsai
 
OpenWRT, A value-add base solution for your product. (1st part, chihchun)
OpenWRT, A value-add base solution for your product. (1st part, chihchun)OpenWRT, A value-add base solution for your product. (1st part, chihchun)
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)
OpenWRT, A value-add base solution for your product. (2nd, Macpual)OpenWRT, A value-add base solution for your product. (2nd, Macpual)
OpenWRT, A value-add base solution for your product. (2nd, Macpual)Macpaul Lin
 
Xml Lab 電腦&網路
Xml Lab 電腦&網路Xml Lab 電腦&網路
Xml Lab 電腦&網路aecro
 
物聯網科技與實作 Iot technology and projects
物聯網科技與實作 Iot technology and projects物聯網科技與實作 Iot technology and projects
物聯網科技與實作 Iot technology and projectsKuo-Yi Chen
 
Ibm dnt-dcos-v9-3
Ibm dnt-dcos-v9-3Ibm dnt-dcos-v9-3
Ibm dnt-dcos-v9-3Guangya Liu
 

Similar to MQTT on ESP32(ESP8266) (20)

Cocos2d x presentation cocoachina-王哲
Cocos2d x presentation cocoachina-王哲Cocos2d x presentation cocoachina-王哲
Cocos2d x presentation cocoachina-王哲
 
Solution ahn lab scm(manufactory)
Solution ahn lab scm(manufactory)Solution ahn lab scm(manufactory)
Solution ahn lab scm(manufactory)
 
20170415- 智慧空調通訊系統實務_柯大
20170415- 智慧空調通訊系統實務_柯大20170415- 智慧空調通訊系統實務_柯大
20170415- 智慧空調通訊系統實務_柯大
 
20200905_tcn_python_opencv_part1_omnixri
20200905_tcn_python_opencv_part1_omnixri20200905_tcn_python_opencv_part1_omnixri
20200905_tcn_python_opencv_part1_omnixri
 
twMVC#41 hololens2 MR
twMVC#41 hololens2 MRtwMVC#41 hololens2 MR
twMVC#41 hololens2 MR
 
2010 08-14 web-sitei18n
2010 08-14 web-sitei18n2010 08-14 web-sitei18n
2010 08-14 web-sitei18n
 
防火墙产品原理介绍20080407
防火墙产品原理介绍20080407防火墙产品原理介绍20080407
防火墙产品原理介绍20080407
 
How to setup mastodon in chinese
How to setup mastodon in chineseHow to setup mastodon in chinese
How to setup mastodon in chinese
 
Ccns 網路基礎概論
Ccns 網路基礎概論 Ccns 網路基礎概論
Ccns 網路基礎概論
 
LinkIt 7697 IoT tutorial
LinkIt 7697 IoT tutorialLinkIt 7697 IoT tutorial
LinkIt 7697 IoT tutorial
 
Raspberry pi 基本操作
Raspberry pi 基本操作Raspberry pi 基本操作
Raspberry pi 基本操作
 
容器式高效率 ChatBot 開發方法
容器式高效率 ChatBot 開發方法容器式高效率 ChatBot 開發方法
容器式高效率 ChatBot 開發方法
 
OpenWrt Case Study 2008
OpenWrt Case Study 2008OpenWrt Case Study 2008
OpenWrt Case Study 2008
 
OpenWRT, A value-add base solution for your product. (1st part, chihchun)
OpenWRT, A value-add base solution for your product. (1st part, chihchun)OpenWRT, A value-add base solution for your product. (1st part, chihchun)
OpenWRT, A value-add base solution for your product. (1st part, chihchun)
 
OpenWRT, A value-add base solution for your product. (2nd, Macpual)
OpenWRT, A value-add base solution for your product. (2nd, Macpual)OpenWRT, A value-add base solution for your product. (2nd, Macpual)
OpenWRT, A value-add base solution for your product. (2nd, Macpual)
 
Ipaq with linux
Ipaq with linuxIpaq with linux
Ipaq with linux
 
Xml Lab 電腦&網路
Xml Lab 電腦&網路Xml Lab 電腦&網路
Xml Lab 電腦&網路
 
物聯網科技與實作 Iot technology and projects
物聯網科技與實作 Iot technology and projects物聯網科技與實作 Iot technology and projects
物聯網科技與實作 Iot technology and projects
 
02 86 duino_簡介
02 86 duino_簡介02 86 duino_簡介
02 86 duino_簡介
 
Ibm dnt-dcos-v9-3
Ibm dnt-dcos-v9-3Ibm dnt-dcos-v9-3
Ibm dnt-dcos-v9-3
 

MQTT on ESP32(ESP8266)