成人午夜视频全免费观看高清-秋霞福利视频一区二区三区-国产精品久久久久电影小说-亚洲不卡区三一区三区一区

在樹莓派上如何使用MQTT

這篇文章主要為大家展示了“在樹莓派上如何使用MQTT ”,內(nèi)容簡而易懂,條理清晰,希望能夠幫助大家解決疑惑,下面讓小編帶領(lǐng)大家一起研究并學(xué)習(xí)一下“在樹莓派上如何使用MQTT ”這篇文章吧。

企業(yè)建站必須是能夠以充分展現(xiàn)企業(yè)形象為主要目的,是企業(yè)文化與產(chǎn)品對外擴(kuò)展宣傳的重要窗口,一個(gè)合格的網(wǎng)站不僅僅能為公司帶來巨大的互聯(lián)網(wǎng)上的收集和信息發(fā)布平臺(tái),創(chuàng)新互聯(lián)面向各種領(lǐng)域:成都公路鉆孔機(jī)成都網(wǎng)站設(shè)計(jì)公司、營銷型網(wǎng)站建設(shè)解決方案、網(wǎng)站設(shè)計(jì)等建站排名服務(wù)。


環(huán)境搭建

安裝 Python3

本項(xiàng)目使用 Python3 進(jìn)行開發(fā),一般情況下,樹莓派系統(tǒng)會(huì)內(nèi)置 Python3,如果不確定系統(tǒng)內(nèi)是否已經(jīng)安裝,可以使用下面的命令進(jìn)行確認(rèn)。

python3 --version

如果顯示 Python 3.x.x(x 表示數(shù)字)則表示已經(jīng)安裝,否則請使用 apt 命令安裝(或跟隨 Python3 安裝指南 操作 )。

sudo apt install python3

安裝 MQTT 客戶端庫

為了方便連接到 MQTT 服務(wù)器,我們需要安裝 paho-mqtt 庫。可以選擇以下兩種方法之一進(jìn)行安裝。

使用源碼安裝

git clone https://github.com/eclipse/paho.mqtt.python 
cd paho.mqtt.python 
python3 setup.py install

使用 pip3 安裝

pip3 install paho-mqtt

MQTT 的使用

連接 MQTT 服務(wù)器

本文將使用 EMQ X 提供的 免費(fèi)公共 MQTT 服務(wù)器,該服務(wù)基于 EMQ X 的 MQTT 物聯(lián)網(wǎng)云平臺(tái) 創(chuàng)建。服務(wù)器接入信息如下:

  • Broker: broker.emqx.io

  • TCP Port: 1883

  • Websocket Port: 8083

如果有需要,您也可以使用 docker 在本地快速安裝 EMQ X 服務(wù)器。

docker run -d --name emqx -p 1883:1883 -p 8083:8083 -p 8084:8084 -p 18083:18083 emqx/emqx

連接示例代碼

# test_connect.py 
import paho.mqtt.client as mqtt 

# 回調(diào)函數(shù)。當(dāng)嘗試與 MQTT broker 建立連接時(shí),觸發(fā)該函數(shù)。
# client 是本次連接的客戶端實(shí)例。
# userdata 是用戶的信息,一般為空。但如果有需要,也可以通過 user_data_set 函數(shù)設(shè)置。
# flags 保存服務(wù)器響應(yīng)標(biāo)志的字典。
# rc 是響應(yīng)碼。
# 一般情況下,我們只需要關(guān)注 rc 響應(yīng)碼是否為 0 就可以了。
def on_connect(client, userdata, flags, rc):
    if rc == 0:
        print("Connected success")
    else:
        print(f"Connected fail with code {rc}")

client = mqtt.Client() 
client.on_connect = on_connect 
client.connect("broker.emqx.io", 1883, 60) 
client.loop_forever()

將上面的代碼保存為 test_connect.py 文件,并運(yùn)行

python3 test_connect.py

我們在 on_connect 函數(shù)里對響應(yīng)碼進(jìn)行了判斷,為 0 則輸出 Connected success 表示連接成功。如果返回的是其它數(shù)字,我們就需要對照下面的響應(yīng)碼進(jìn)行判斷。

0: 連接成功
1: 連接失敗-不正確的協(xié)議版本
2: 連接失敗-無效的客戶端標(biāo)識(shí)符
3: 連接失敗-服務(wù)器不可用
4: 連接失敗-錯(cuò)誤的用戶名或密碼
5: 連接失敗-未授權(quán)
6-255: 未定義
如果是其它問題,可以檢查網(wǎng)絡(luò)情況,或者確認(rèn)是否安裝了 `paho-mqtt`。

在 MQTT 協(xié)議的概念中,消息是通過主題傳遞的,比如設(shè)備 A 向主題 T 發(fā)送消息,那么只有訂閱了主題 T 的設(shè)備才能接收到。所以僅僅接入 MQTT 服務(wù)器并沒有太大意議,要完整地使用 MQTT 服務(wù),我們還需要知道如何訂閱和發(fā)布消息。

訂閱消息

打開任意編輯器,輸入下面的代碼,并保存為 subscriber.py 文件:

# subscriber.py
import paho.mqtt.client as mqtt

def on_connect(client, userdata, flags, rc):
    print(f"Connected with result code {rc}")
    # 訂閱,需要放在 on_connect 里
    # 如果與 broker 失去連接后重連,仍然會(huì)繼續(xù)訂閱 raspberry/topic 主題
    client.subscribe("raspberry/topic")

# 回調(diào)函數(shù),當(dāng)收到消息時(shí),觸發(fā)該函數(shù)
def on_message(client, userdata, msg):
    print(f"{msg.topic} {msg.payload}")
    
client = mqtt.Client()
client.on_connect = on_connect
client.on_message = on_message

# 設(shè)置遺囑消息,當(dāng)樹莓派斷電,或者網(wǎng)絡(luò)出現(xiàn)異常中斷時(shí),發(fā)送遺囑消息給其他客戶端
client.will_set('raspberry/status', {"status": "Off"})

# 創(chuàng)建連接,三個(gè)參數(shù)分別為 broker 地址,broker 端口號,?;顣r(shí)間
client.connect("broker.emqx.io", 1883, 60)

# 設(shè)置網(wǎng)絡(luò)循環(huán)堵塞,在調(diào)用 disconnect() 或程序崩潰前,不會(huì)主動(dòng)結(jié)束程序
client.loop_forever()

調(diào)用 subscribe() 函數(shù),可以讓樹莓派訂閱一個(gè)主題。在上面的代碼中,我們使用它訂閱了 raspberry/topic 主題,并監(jiān)聽消息。

另外,我們還使用 will_set() 設(shè)置了遺囑消息。 遺囑消息是 MQTT 的一個(gè)特性,當(dāng)設(shè)備在意外斷開網(wǎng)絡(luò)連接后,會(huì)向某個(gè)特定的主題發(fā)送消息。通過這個(gè)特性,我們可以得知樹莓派是否斷電,或者出現(xiàn)網(wǎng)絡(luò)異常。

發(fā)布消息

打開任意編輯器,輸入下面的代碼,并保存為 publisher.py 文件:

import paho.mqtt.client as mqtt
import time

def on_connect(client, userdata, flags, rc):
    print(f"Connected with result code {rc}")
    
client = mqtt.Client()
client.on_connect = on_connect
client.connect("broker.emqx.io", 1883, 60)

# 每間隔 1 秒鐘向 raspberry/topic 發(fā)送一個(gè)消息,連續(xù)發(fā)送 5 次
for i in range(5):
  	# 四個(gè)參數(shù)分別為:主題,發(fā)送內(nèi)容,QoS, 是否保留消息
    client.publish('raspberry/topic', payload=i, qos=0, retain=False)
    print(f"send {i} to raspberry/topic")
    time.sleep(1)

client.loop_forever()

調(diào)用 publish() 函數(shù),可以向一個(gè)主題發(fā)送消息。在上面的代碼中,我們使用了它向主題 raspberry/topic 發(fā)送消息。其中參數(shù) QoS 是另一個(gè) MQTT 特性,如果你想了解更多 QoS 的內(nèi)容,可以查看 MQTT QoS(服務(wù)質(zhì)量)介紹,這里我們暫且設(shè)為 0。

測試

我們使用 MQTT 5.0 客戶端工具 - MQTT X 進(jìn)行以下測試。

測試訂閱消息

運(yùn)行 Python 代碼,并主動(dòng)發(fā)送一個(gè)消息。

  1. 打開終端,運(yùn)行 Python 代碼,監(jiān)聽消息 。

    python3 subscriber.py

  2. 使用 MQTT X 客戶端與 MQTT 服務(wù)器建立連接,并向主題 raspberry/topic 發(fā)送消息 。

在樹莓派上如何使用MQTT

  1. 查看樹莓派終端信息,將會(huì)看到已成功接收到 MQTT X 發(fā)布的消息。

在樹莓派上如何使用MQTT

測試發(fā)布消息

  1. 在 MQTT X 客戶端中訂閱 raspberry/topic 主題 。

  2. 在終端運(yùn)行 Python 代碼。 在樹莓派上如何使用MQTT

  3. 在 MQTT X 客戶端中,查看樹莓派發(fā)送的消息。

在樹莓派上如何使用MQTT

測試遺囑消息

接下來測試一下遺囑消息是否設(shè)置成功。

  1. 在 MQTT X 客戶端中,訂閱 raspberry/status。

在樹莓派上如何使用MQTT

  1. 中斷程序,或者斷開樹莓派的網(wǎng)絡(luò)。

  2. 在 MQTT X 客戶端中,查看 raspberry/status 主題接收到的消息。

在樹莓派上如何使用MQTT

以上是“在樹莓派上如何使用MQTT ”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內(nèi)容對大家有所幫助,如果還想學(xué)習(xí)更多知識(shí),歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道!

分享文章:在樹莓派上如何使用MQTT
網(wǎng)頁路徑:http://jinyejixie.com/article42/psphhc.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供小程序開發(fā)、網(wǎng)站設(shè)計(jì)公司網(wǎng)站維護(hù)、關(guān)鍵詞優(yōu)化用戶體驗(yàn)靜態(tài)網(wǎng)站

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

網(wǎng)站優(yōu)化排名
灌南县| 柯坪县| 安化县| 怀柔区| 临颍县| 怀来县| 谢通门县| 岚皋县| 乌鲁木齐市| 合作市| 丁青县| 吕梁市| 永春县| 横山县| 南漳县| 乐至县| 河南省| 兴业县| 宽城| 盘锦市| 宽城| 宁陕县| 芷江| 遵义县| 射阳县| 黑龙江省| 博罗县| 东山县| 财经| 沙田区| 罗山县| 瓦房店市| 宁强县| 马公市| 吴江市| 元谋县| 友谊县| 息烽县| 扎鲁特旗| 中方县| 綦江县|