基于mosquitto与PyQt创建一个MQTTbroker和client调试窗口——1、如何建MQTT服务器(broker)(超详细!!(1)

一、如何建服务器

(说是服务器应该是Broker更合适,下面全文都使用broker来表示这里的服务器)

因为终端设备不多,不用过多考虑性能问题和算法优化,所以直接用的是本地的PC作为MQTT的。在许多主流平台如mosquitto,VerneMQ,EMQTT中,我选择了Mosquitto

1、安装下载mosquitto
  • Download | Eclipse Mosquitto官网下载,选择你需要的版本,我是在windows上操作的.下载之后,安装到你要安装的路径下即可

注:这里建议将mosquitto加入到环境变量中,会更方便操作一些,在加入之后可以直接在cmd中进行命令操作。不加也没有大影响,切入到刚刚安装的mosquitto文件夹下,直接运行exe文件也可以。

2、简单的测试一下

-v选项进入调试状态(这里是加入到了环境变量中,所以可以直接作为命令使用)

更要的是,-h查看一下所有的选项,后面代码中会有使用

-h(这里是直接打开exe文件)

在这里插入图片描述

如果是向上面这样,那么就是添加环境变量或者安装成功了

⚠️:注意,修改环境变量之后,要重新打开shell或者cmd窗口才能生效

3、使用python启动该任务(线程)

从上面的第一张图(-v)中可以看到,这里已经在本地(localhost)的1883端口上开启了MQTT服务器。

所以说,这样是可行的,但是我想要将所有的功能能够一体化,而不是一边打开一个shell开启broker,一边打开一个QT作为测试。两者要想结合在一起,就要让所有的事情都在代码里完成,所以,下面来看一下怎么在python里面去运行相应的exe文件
(不过如果你只是直接在命令行启动的话,那么按照下面的操作也是一样的,只是直接在命令行窗口操作,更简单)

python代码如下(命令行操作入上两图)

import subprocess,shlex

# 定义exe文件路径和参数
exe_path = "D:\Code\mosquitto\mosquitto.exe"
conf_path = "D:\Code\mosquitto\mosquitto.conf"
com = shlex.split('{}'.format(shlex.quote(exe_path)) + ' -c ' + '{}'.format(shlex.quote(conf_path)) )

# 启动进程
process = subprocess.Popen(com, stdout=subprocess.PIPE, stderr=subprocess.PIPE)

# 等待进程执行完成
process.communicate()

如同上面help中所说,我们需要通过-c方法将配置导入(配置.conf文件可以在你所安装mosquitto的目录下找到)

对于配置的修改有两种方式(主要区别于是否允许匿名连接),下面先看第一种:

第一种(允许匿名连接)
  1. 修改监听端口

在这里插入图片描述

其中1883为监听的端口,0.0.0.0表示任意地址的意思。组合起来,也就是说,允许任何ip地址的设备访问到该MQTTbroker。

你也可以进行修改,选择自己想要的端口和允许的ip。
2. 允许匿名连接

在这里插入图片描述

按照上面的方法去配置完成之后,启动broker,client再去连接broker即可,这里主要演示树莓派端(因为我的broker用的是本机PC)

mqtt_client = mqtt.Client(client_name)
def on\_connect(client, userdata, flags, rc):
        if rc == 0:
            print("Connected to MQTT Broker!")
        else:
            print("Failed to connect, return code %d\n", rc)
mqtt_client.on_connect = on_connect

mqtt_client.connect('your host',port=1883)
mqtt_client.loop_start()

这里是client端的连接主要代码。如上。为了检测连接是否成功,所以在on_connect函数中加入一些提示信息

如果成功的话,会输出

Connected to MQTT Broker!

否则,会提示

一些error,比如timeout,拒绝访问
或者是提示语句Failed to connect, return code --

如果出现错误,请仔细检查跑起来了broker和conf配置是否正确

第二种(不允许匿名连接)
  1. 修改监听端口

和第一种一样
2. 不允许匿名连接

在这里插入图片描述

与上面不同,这里修改为false,也就是不允许匿名连接
3. 注册用户

既然不允许匿名连接,那么就需要为每个连接进来的设备(client)分配一个账号和密码

先按照如下去操作

切换到mosquitto目录下,输入如下代码,之后会提示你输出和确认密码

 .\mosquitto_passwd.exe -c .\piPass.txt username

* 其中.\piPass.txt位置,是用来存放账户密码的文件,可以自己命名
* username是你准备为client分配的设备名,这个也是你自己决定**请注意⚠️:-c会清除整个文件,只留下该次写入的用户,如果你想继续添加用户,请不要加-c。**
.\mosquitto_passwd.exe  .\piPass.txt username2

在这里插入图片描述

从上面也可以看到,-c会overwrite整个文件。

同样的,如果你想删除或者更新(这里是重新对密码进行hash的意思),都可以参考进行操作。不过请不要在这样添加用户之后,再-U刷新,这样会导致已经进行hash的密码再次hash计算,会使用户的密码失效。

最后

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数Java工程师,想要提升技能,往往是自己摸索成长,自己不成体系的自学效果低效漫长且无助。

因此收集整理了一份《2024年嵌入式&物联网开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。

img

img

img

img

img

img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上嵌入式&物联网开发知识点,真正体系化!

如果你觉得这些内容对你有帮助,需要这份全套学习资料的朋友可以戳我获取!!

由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新!!

习提升的进阶课程,基本涵盖了95%以上嵌入式&物联网开发知识点,真正体系化!**

如果你觉得这些内容对你有帮助,需要这份全套学习资料的朋友可以戳我获取!!

由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新!!

  • 11
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值