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機上看到成功連接的信息。
如下圖
注意將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機上可以從訂閱的主題中收到信息,如下圖。