MQTT服務器搭建及客戶端通信實例

MQTT服務器:EMQX v3

客戶端1 PC(Windows10操作系統)

客戶端2 IOT BOARD(RT-Thread與正點原子聯合開發的STM32L475核心芯片的開發板)

1.搭建服務器

在EMQ官網https://www.emqx.io/cn/products/broker下載emq x broker並按照文檔安裝運行即可,安裝併成功運行後,打開http://127.0.0.1:18083 即可看到MQTT服務器的WEB控制檯。

2.客戶端1

在PC上利用python的paho-mqtt庫實現一個簡單的客戶端。該程序實現了自收自發的功能。

如下是EMQ官方使用指南中的一段示例代碼。運行後,可以在PC機上看到成功連接的信息。

如下圖

https://img-blog.csdnimg.cn/20190901152239255.png

 

注意將client.connect("192.168.1.165", 1883, 60)這句中的IP改爲服務器的IP地址。

#-*-coding:utf-8-*-

# 導入 paho-mqtt 的 Client:
import paho.mqtt.client as mqtt
import time
unacked_sub = [] #未獲得服務器響應的訂閱消息 id 列表

# 用於響應服務器端 CONNACK 的 callback,如果連接正常建立,rc 值爲 0
def on_connect(client, userdata, flags, rc):
    print("Connection returned with result code:" + str(rc))


# 用於響應服務器端 PUBLISH 消息的 callback,打印消息主題和內容
def on_message(client, userdata, msg):
    print("Received message, topic:" + msg.topic + "payload:" + str(msg.payload))

# 在連接斷開時的 callback,打印 result code
def on_disconnect(client, userdata, rc):
    print("Disconnection returned result:"+ str(rc))

# 在訂閱獲得服務器響應後,從爲響應列表中刪除該消息 id
def on_subscribe(client, userdata, mid, granted_qos):
    unacked_sub.remove(mid)


# 構造一個 Client 實例
client = mqtt.Client()
client.on_connect = on_connect
client.on_disconnect= on_disconnect
client.on_message = on_message
client.on_subscribe = on_subscribe

# 連接 broker
# connect() 函數是阻塞的,在連接成功或失敗後返回。如果想使用異步非阻塞方式,可以使用 connect_async() 函數。
client.connect("192.168.1.165", 1883, 60)

client.loop_start()

# 訂閱單個主題
result, mid = client.subscribe("hello", 0)
unacked_sub.append(mid)
# 訂閱多個主題
result, mid = client.subscribe([("temperature", 0), ("humidity", 0)])
unacked_sub.append(mid)

while len(unacked_sub) != 0:
    time.sleep(1)

client.publish("hello", payload = "Hello world!")
client.publish("temperature", payload = "24.0")
client.publish("humidity", payload = "65%")

# 斷開連接
time.sleep(5) #等待消息處理結束
client.loop_stop()
client.disconnect()

服務器端的狀態如下圖:

3.客戶端2

採用RT-Thread與正點原子聯手開發的IOT BOARD開發板,在正點原子官網下載其示例代碼(也可在正點原子TAOBAO店找到鏈接)。將MQTT示例下載到板子上,按照手冊連接好WIFI,簡單修改例子中的服務器地址,訂閱與發佈的主題,之後可以在PC機和開發板之間通過MQTT通信。開發板的例子中將接受與發送到的信息通過串口傳輸出來,如下圖所示:

在PC機上可以從訂閱的主題中收到信息,如下圖。

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