
1、前言
Python 語言的是一款非常容易使用的解釋性語言,它的主要特點如下:易學易用;可擴展可移植;豐富的三方庫,正是由于以上這些特點,使得Python在一些邏輯簡單,功能復雜的場景應用非常廣泛,近幾年,隨著人工智能的飛速發展,Python 的優點得到的充分的體現,因此成為了AI開發的首選語言,
Python輕應用主要是基于micropython實作,在保留了Python語言主要特性的基礎上,他還對嵌入式系統的底層做了非常不錯的封裝,它的特點如下:
- 安全便捷的上云能力
依托阿里云物聯網平臺,通過客戶自定義物模型,滿足各種不同場景的的資料上云需求,同時通過阿里云安全團隊提供的ID2,保證資料安全,
- 豐富強大的AI能力
背靠達摩院,提供150+ 視覺AI演算法,統一視覺演算法的呼叫流程,讓開發者通過簡單的幾個API 實作各種不同場景的AI需求,
- 簡單易用的開發除錯手段
基于VS Code的IDE插件,提供代碼快速編輯功能,一鍵熱更新功能,實作應用開發和系統開發解耦,降低開發門檻,提高開發效率,
今天要介紹的是如何使用Python =輕應用,進行mqtt訊息的訂閱和發布!
2、MQTT協議簡介
MQTT(Message Queuing Telemetry Transport,訊息佇列遙測傳輸協議),是基于一種發布/訂閱(publish/subscribe)模式的 “ 輕量級 ” 通訊協議,該協議構建于 TCP/IP 協議上,由IBM在1999 年發布,MQTT 最大優點在于可以以極少的代碼和有限的帶寬,為連接遠程設備提供實時可靠的訊息服務,作為一種低開銷、低帶寬占用的即時通訊協議,使其在物聯網、小型設備、移動應用等方面有較廣泛的應用,MQTT 協議當前版本為,2014年發布的MQTTv3.1.1,
2.1、MQTT的特點
- 使用的發布/訂閱訊息模式,它提供了一對多訊息分發,以實作與應用程式的解耦;
- 對負載內容屏蔽的訊息傳輸機制;
- 對傳輸訊息有三種服務質量(QoS):
- 最多一次,這一級別會發生訊息丟失或重復,訊息發布依賴于底層TCP/IP網路,即:<=1;
- 至多一次,這一級別會確保訊息到達,但訊息可能會重復,即:>=1;
- 只有一次,確保訊息只有一次到達,即:=1,在一些要求比較嚴格的計費系統中,可以使用此級別;
- 資料傳輸和協議交換的最小化(協議頭部只有2位元組),以減少網路流量;
- 通知機制,例外中斷時通知傳輸雙方;
2.2、MQTT 協議原理

MQTT協議中有三種身份:發布者(Publish)、代理(Broker)(服務器)、訂閱者(Subscribe),其中,訊息的發布者和訂閱者都是客戶端,訊息代理是服務器,訊息發布者可以同時是訂閱者,
MQTT傳輸的訊息分為:主題(Topic)和負載(payload)兩部分
Topic,可以理解為訊息的型別,訂閱者訂閱(Subscribe)后,就會收到該主題的訊息內容(payload)
payload,可以理解為訊息的內容,是指訂閱者具體要使用的內容
本文將要介紹的就是,通過pc 充當服務端,使用搭載Python輕應用的HaaS開發板作為客戶端,實作pc端到設備端的訊息訂閱和發布,

3、PC環境搭建
本文中,pc端的環境是 ununtu 16.04, PC 端環境分為兩個部分:mqtt服務端啟動,以及mqtt客戶端(發布者和訂閱者),
MQTT Server安裝和常用命令
- 下載mosquitto原始碼
wget http://mosquitto.org/files/source/mosquitto-1.6.8.tar.gz
- 解壓,編譯,安裝
echo "解壓"
tar -zxvf mosquitto-1.6.8.tar.gz
echo "進入mosquitto-1.6.8"
cd mosquitto-1.6.8
echo "編譯"
make
echo "安裝"
sudo make install
如果找不到libmosquitto.so.1這個問題,修改鏈接路徑,重新加載元件
sudo ln -s /usr/local/lib/libmosquitto.so.1 /usr/lib/libmosquitto.so.1
sudo ldconfig
- 設定用戶名(haas)和密碼
mosquitto_passwd -c pwfile.example haas
輸入上述命令后,會要求連續輸入兩次密碼進行確認
- 修改啟動組態檔mosquitto.conf,不允許匿名登錄
allow_anonymous false
- 啟動mqtt server
mosquitto -c mosquitto.conf -p 1885
啟動成功以后,server 的列印如下:

4、設備端環境搭建
4.1、韌體燒錄
HaaS設備需要確保燒錄了Python輕應用的韌體,如果沒有請參考Python輕應用快速上手,中的韌體燒錄部分,
4.2、MQTT應用代碼更新和運行
通過Python輕應用的IDE 工具將以下代碼推送到設備上去執行(或者拷貝到檔案系統手動執行),
#!/usr/bin/env python
# -*- encoding: utf-8 -*-
'''
@File : mqtt_test.py
@Description: file description
@Date : 2021/06/04 18:00:06
@Author : guoliang.wgl
@version : 1.0
'''
import mqtt
import time
# 初始化mqtt 客戶端
client = mqtt.client("haas")
# 定義訊息訂閱回呼函式
def on_subcribe(topic,payload):
print("on_subcribe: topic is:" + topic)
print("on_subcribe: payload is:" + payload)
client.on_subcribe(on_subcribe)
# 用戶名和密碼替換成自己的服務器上面設定的用戶名和密碼
client.username_pw_set('haas','20210604')
# 連接mqtt服務端,修改自己服務器的 ip 地址和 啟動埠(本例中是1885)
client.connect("xxx.xxx.xxx.xxx",1885,60)
#訂閱訊息:test/haas/python
client.subscribe("/test/haas/python",1)
# 每隔2s 向test/pc/python topic 發布訊息一次,一共5 次
for i in range(5):
client.publish("/test/pc/python","msg" +str(i)+ " send by haas",1)
time.sleep(2)
while True:
client.loop(1000)
client.disconnect()
以上代碼中,我們在HaaS設備上連接了mqtt服務,并訂閱了一個topic : test/haas/python ,并且每隔5s ,向topic: /test/pc/python 發送一次訊息,
需要注意的是,執行以上代碼之前,需要確保設備端網路是連通的,
5、PC 端測驗
5.1、訂閱訊息
mosquitto_sub -p 1885 -t '/test/pc/python' -u haas -P 20210604
在PC 端啟動server 以后,通過以上命令訂閱topic:/test/pc/python 以后,當設備端啟動Python輕應用,pc端會收到如下訊息:

5.2、發送訊息
mosquitto_pub -p 1885 -t '/test/haas/python' -m "來自pc的訊息" -u haas -P 20210604
當pc 端發布以上訊息以后,設備端會收到相關的訊息,

技術交流
Python輕應用繼承了Python易學易用的特點,同時提供了基于嵌入式硬體的基礎庫封裝,讓開發者可以很方便的通過互動式的環境,實時進行嵌入式開發,讓嵌入式開發也變得簡單方便,
如需更多技術支持,可加入釘釘開發者群,享受一對一的技術支持,

轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/287272.html
標籤:其他
