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机上可以从订阅的主题中收到信息,如下图。