python 编写客户端连接 MQTT 服务器

目录

  • 一、pychar 下载第三库 paho-mqtt
  • 二、代码编写及显示结果
    • 1)固定消息发送
    • 2)自定义消息发送
  • 三、MQTT 与 REST 比较
  • 四、总结
  • 五、参考资料

说明:本文基于上篇博客:详介 MQTT 服务器的搭建与客户端连接 ,下面来使用 python 编写客户端连接服务器,并实现消息的发布和订阅。

phthon 编写工具 pychar 安装步骤:https://zhuanlan.zhihu.com/p/108439489

一、pychar 下载第三库 paho-mqtt

  • 按照上面链接内容,创建一个新项目。
  • 创建完毕后,点击 File ——> Settings...
    python 编写客户端连接 MQTT 服务器_第1张图片
  • 然后点击 Python Interpreter ,再点击 添加包。
    python 编写客户端连接 MQTT 服务器_第2张图片
  • 搜索 paho-mqtt 并选中,然后点击 Install Package 安装包。
    python 编写客户端连接 MQTT 服务器_第3张图片
  • 安装成功。
    python 编写客户端连接 MQTT 服务器_第4张图片

二、代码编写及显示结果

1)添加 py 文件

  • 添加新的 Python Package(右击 hello 项目 ——> New ——> Python Package)。
    python 编写客户端连接 MQTT 服务器_第5张图片
  • 修改文件名(右击 _init_.py 文件 ——> Refactor ——> Rename...)。
    python 编写客户端连接 MQTT 服务器_第6张图片
  • 添加 py 文件(右击 hello 包 ——> New ——> Python File
    python 编写客户端连接 MQTT 服务器_第7张图片
  • 准备完文件后,如下图所示:
    python 编写客户端连接 MQTT 服务器_第8张图片

1)固定消息发送

①代码编写

  • client_send.py 编写如下代码:
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="192.168.43.98", 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_accept.py 编写如下代码:

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="192.168.43.98", port = 61613, keepalive=60)  # 订阅频道
time.sleep(1)
# client.subscribe("public")
client.subscribe([("public", 0), ("test", 2)])
client.loop_forever()

②运行结果:

  • 客户端 client_send 作为发布者,每间隔 5s 发布一条主题名为 public 的消息,客户端 client_accept 作为订阅者,订阅了主题名为 public 的消息。客户端 client_send 每发布一条消息,服务器就会将该消息发送给客户端 client_accept 。
  • client_send:
    python 编写客户端连接 MQTT 服务器_第9张图片

2)自定义消息发送

①编写代码

  • client_send.py 编写如下代码:
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="192.168.43.98", port = 61613, keepalive=60)  # 订阅频道
time.sleep(1)
i = 0
while True:
    sensor_data=input("请输入要发表消息内容(0表示退出):")
    if(sensor_data=='0'):
        break
    try:
        # 发布MQTT信息
        client.publish(topic="weather", payload=sensor_data, qos=0)
        time.sleep(5)
        # i += 1
    except KeyboardInterrupt:
        print("EXIT")
        client.disconnect()
        sys.exit(0)

  • client_accept.py 代码不用改变。

②运行结果:

  • client_send.py:
    python 编写客户端连接 MQTT 服务器_第10张图片
  • client_accept.py
    python 编写客户端连接 MQTT 服务器_第11张图片
  • 服务器上的信息:
    python 编写客户端连接 MQTT 服务器_第12张图片

三、MQTT 与 REST 比较

MQTT REST
TCP协议 TCP协议
长连接 短连接
适合做设备反向控制 不适合做设备实时反向控制
实时性控制 实时性控制不是很好
主要应用于各大物联网平台 主要应用于各种 API

四、总结

  • 就我个人来说,MQTT 的使用非常方便,发布者和订阅者互不干扰,订阅者订阅了某个主题后,如果有这个主题,则会发送消息给订阅者,如果没有,则不会接受到消息,而发布者也就只管发布某个主题的消息而已,在各种,在物联网的通信方面应用前景很大。

五、参考资料

编写MQTT客户端程序——python

你可能感兴趣的:(python,mqtt)