python实现mqtt通信和对应的环境搭建

概要

  此次分享的是使用python去实现mqtt通信。mqtt通信在物联网当中应用很广泛。如图所示为MQTT简单的概括总结。

每个客户端都可以成为消息的发布者或者订阅者,实现设备之间的互相通信。

1、paho-mqtt安装

    这边建议使用1.6.1版本,版本过高的话,会出现一些报错。

pip install paho-mqtt==1.6.1

2、Apollo服务(搭建服务器)

  2.1 下载apache-apollo

    apache-apollo-1.7.1-windows-distro.zip
    链接:https://pan.baidu.com/s/1z1Hr8t9vtaq_9jGCyY1XpA?pwd=1122 
    提取码:1122 

    通过以上链接下载该文件,并解压。

   注:这个服务的运行需要电脑有java环境,建议提前弄好java环境,jdk最好是1.8的,这样比较不会报错,不然容易出现一些奇奇怪怪的报错问题。

 2.2 创建服务

  1)打开cmd 使用命令cd 进入到 apache-apollo-1.7.1\bin的目录(根据自己解压的路径选择)


C:\Users\lai>cd C:\Users\lai\Downloads\apache-apollo-1.7.1-windows-distro\apache-apollo-1.7.1\bin

  2)在1)的基础上 输入命令"apollo.cmd creat test"

3)在上一步的基础上,进入我们新建立的这个名称为test的文件夹(也可以在第一步的解压路径可以看到)

4)重复上述操作,进入到test文件夹的bin文件夹(这里就不贴图了)

5)运行bin文件夹里面的 'apollo-broker.cmd '文件,有如同下图所示,就说明开启成功了

6)后台连接控制

7)会显示如下页面:账号是admin   密码是password

  8)这样我们的后台服务就算启动了,这时候可以先放着,也可以每个功能点一点,熟悉一下。

3、python代码

   为了方便理解,我先分为一个发布者,一个订阅者,分两部分,创建两个.py文件。

 3.1 发布者部分

    发布者(publish),调用函数publish(),该函数有5个参数,topic(主题)、payload(消息体)、qos(网络服务质量)、retain(数据是否保留)、properties(消息的属性)

  topic(主题):发布的消息属于哪个主题,这样订阅该主题的客户端才可以收到发布的消息

  payload(消息体):这次发布的消息的主要内容

 qos(网络服务质量):一般为0即可

 retain(数据是否保留):看具体的应用需求,为False还是True

 properties(消息的属性):消息体的属性。比如,发送的消息是文本或者是二进制或者是其他数 据类型

在以上的5个参数当中,其中topic、payload这两个是必须要配置的,其余的三个看具体应用情况。

3.1.1 引入库
import paho.mqtt.client as mqtt
3.1.2 实例化mqtt对象
client = mqtt.Client(client_id="1")

注:client_id这个参数这边写死为1,可以加一个random函数,使得其为随机。

3.1.3 回调函数

on_connect():在客户连接到MQTT broke的时候被调用;

def on_connect(client, userdata, flags, rc):
    if rc == 0:
        print("连接成功")
        print("Connected with result code " + str(rc))

on_publis():在客户端发送消息的时候被调用;

注:以上的代码很简洁,只是为了学习使用,在应用当中,可根据具体的业务需求做相对应的处理。

3.1.4 账号密码设置
client.username_pw_set("admin", "password")

username_pw_set函数有两个参数:username和password,就是连接上broke的账户和密码,本次的服务使用Apollo,所以账号和密码就是和上面的一致。

3.1.5 连接
client.connect(host="127.0.0.1", port=61613, keepalive=60) 

连接使用connect函数,host参数为ip地址,port是对应的端口号,keeplive是保持连接间隔,若在60s内没有收到来自发布者的消息,则默认退出连接。

3.1.6 发布函数
client.publish(topic="Top", payload=data, qos=0)

topic的主题名称要我们自己去定义,payload是发送消息的内容,这些在上面都已经提到 

3.1.7 完整代码
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_publish(self,one,two):
    print("消息发送成功")
client = mqtt.Client(client_id="1")
client.username_pw_set("admin", "password")
client.on_connect = on_connect
client.on_publish= on_publish
client.connect(host="127.0.0.1", port=61613, keepalive=60)  # 订阅频道
time.sleep(1)
i = 0
while True:
   
       
        data = "message" + str(i)
        client.publish(topic="Top", payload=data, qos=0)
        time.sleep(5)
        i += 1
        if(i == 100):
            print("发送了100条消息了,退出")
            client.disconnect()
           

3.2 订阅者部分

订阅者(subscribe),调用函数subscribe(),该函数有5个参数,topic(主题)、payload(消息体)、qos(网络服务质量)、retain(数据是否保留)、properties(消息的属性)

*参数详情请参看3.1

*引入库、实例化mqtt对象、账号密码设置、连接部分对应3.1.1、3.1.2、3.1.4、3.1.5,可以自行对照查看。

3.2.1 回调函数

 on_connect():在连接上服务器的时候调用

def on_connect(client, userdata, flags, rc):
    if rc == 0:
        print("连接成功")
        print("Connected with result code " + str(rc))

 on_message():在收到消息的时候被调用

def on_message(client, userdata, msg):
    print(msg.topic + " " + str(msg.payload))
3.2.2 接收函数
client.subscribe(topic="Top")

主题要与发布者一致!!!!

3.2.3 完整代码
import time
import paho.mqtt.client as mqtt
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(topic="Top")
client.loop_forever()

* 最后调用loop_forever()是为了使得可以一致保持接收信息的状态

3.3 运行结果

发布端: 

接收端:

代理服务器可以看到两个客户端的流量情况和连接情况

4、写在最后

 以上就是通过python实现mqtt的一个简要过程和例子,若有什么不正确的地方,欢迎批评指正。

最后祝各位看官身体健康,发大财!!!(鞠躬)

  • 23
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

重生之我在厦门做测试

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值