python 實現 MQTT通信(客戶端與服務器端)

Python paho-mqtt 模塊使用

庫的使用已經有人寫的比較詳細了,這裏就借用了下人家寫好的
https://blog.csdn.net/youshenmebutuo/article/details/79779387

服務器端搭建

下載apache-apollo-1.7.1-windows-distro

現在網上已經很找不到了,我給大家上存到了雲盤裏,供大家下載,裏面還有一些調試工具

鏈接:https://pan.baidu.com/s/1yez9rE-wEyZ4jT6bBq7XpA 
提取碼:jm03 
複製這段內容後打開百度網盤手機App,操作更方便哦

安裝apache-apollo-1.7.1-windows-distro

解壓到你對應的磁盤裏

例如我解壓在D:\mqtt裏

進入bin目錄

D:\mqtt\apache-apollo-1.7.1-windows-distro\apache-apollo-1.7.1\bin

創建你的服務

 apollo.cmd create mytest

mytest 爲你的服務名,創建好如圖所示,
在這裏插入圖片描述

啓動服務

創建好會在bin目錄下創建一個名爲mytest的文件夾,進入你文件夾的bin目錄的終端

   D:\mqtt\apache-apollo-1.7.1-windows-distro\apache-apollo-1.7.1\bin\mytest\bin

輸入 apollo-broker.cmd run啓動服務,啓動好如圖所示。
在這裏插入圖片描述

進入後臺管理

打開網頁,輸入ip + : 61680 進入後臺管理 ,默認用戶名admin 密碼 password
例如 127.0.0.1:61680在這裏插入圖片描述
在這裏插入圖片描述

python 實現客戶端

建議再看訂閱和發佈的時候,把文章第一部分paho-matt庫的使用看一下,對你代碼的理解有很大的幫助

下載pip庫

pip install paho-mqtt

訂閱主題

import time

import paho.mqtt.client as mqtt
# The callback for when the client receives a CONNACK response from the server.
def on_connect(client, userdata, flags, rc):
    if rc == 0:
        print("連接成功")
        print("Connected with result code " + str(rc))

def on_message(client, userdata, msg):
    print(msg.topic + " " + str(msg.payload))
client = mqtt.Client(protocol=3)
client.username_pw_set("admin", "password")
client.on_connect = on_connect
client.on_message = on_message
client.connect(host="127.0.0.1", port = 61613, keepalive=60)  # 訂閱頻道
time.sleep(1)
# client.subscribe("public")
client.subscribe([("public", 0), ("test", 2)])
client.loop_forever()

發佈主題

import paho.mqtt.client as mqtt
import time
import sys
def on_connect(client, userdata, flags, rc):
    print("Connected with result code " + str(rc))
def on_subscribe(client,userdata,mid,granted_qos):
    print("消息發送成功")
client = mqtt.Client(protocol=3)
client.username_pw_set("admin", "password")
client.on_connect = on_connect
client.on_subscribe = on_subscribe
client.connect(host="127.0.0.1", port = 61613, keepalive=60)  # 訂閱頻道
time.sleep(1)
i = 0
while True:
    try:
        # 發佈MQTT信息
        sensor_data = "test" + str(i)
        client.publish(topic="public", payload=sensor_data, qos=0)
        time.sleep(5)
        i += 1
    except KeyboardInterrupt:
        print("EXIT")
        client.disconnect()
        sys.exit(0)

運行結果

在這裏插入圖片描述

關於訂閱主題介紹

  • /+/*
client.subscribe('public/+/#', qos=2)

可訂閱到以下主題

public/1
public/2
public/2/2
  • /+
client.subscribe('public/+, qos=2)

可訂閱到以下主題

public/1
public/2
  • /#
client.subscribe('public/#, qos=2)

可訂閱到以下主題

public/1
public/2
public/1/2/2
public/1/2
  • /2/+
client.subscribe('public/2/+, qos=2)

可訂閱到以下主題

public/2/2
public/2/1
  • /+/2
client.subscribe('public/+/2, qos=2)

可訂閱到以下主題

public/2/2
public/1/2
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章