基于ESP32搭建物联网服务器十三(自已搭建一个MQTT服务器)

在之前的文章中:ESP32搭建WEB服务器十二(使用MQTT协议与ESP32互动)_你的幻境的博客-CSDN博客

我们已经实现了ESP32通过MQTT协议连接到公共MQTT服务器上,但是公共服务器在稳定性或安全性上,很多时候无法保证。这时,我们除了可以购买比如:

阿里巴巴的物联网平台:物联网平台_设备接入_设备管理_监控运维_数据分析-阿里云

华为的IoT物联网平台:华为云IoT全栈云服务_IoT物联网解决方案-华为云

腾讯的物联网通信平台:物联网通信 | 腾讯云

等等平台服务,但在个人学习或者开发测试中,自已搭建一个个人的MQTT服务器是更好的一个选择。

即然目标是个人学习或开发测试,这里所选的工具或服务,都会偏向于操作简单、免费、更低的价格的工具或者服务。

目录

安装MQTT服务器应用

配置mosquitto

创建用户

配置文件mosquitto.conf的常用配置选项

启动MQTT服务

 后台启动MQTT服务


安装MQTT服务器应用

MQTT服务器来说,这里选择Eclipse mosquitto当前版本可以最高可以支持MQTT 5.0协议。下载地址:Download | Eclipse Mosquitto

 在windows系统下,我们应该先查看自已系统类型是64位还是32位,选择相应的安装文件。

安装步骤十分简单,

的安装的选项中,最好勾选如图的Service选项,勾选该选项后,在window系统服务时,会生成"Mosquitto Broker"的服务,可以让你的电脑在启动时自动启动MQTT服务器。

中间你可以选择你想要安装的目录(最好安装在非C盘的根目录下和默认的Program Files目录下,选择安装在其它硬盘分区的根目录下,如:F:\mosquitto,因为在有的系统中因为安全权限问题,可能造成不同因为权限运行不正常的问题,也因为默认安装目录"Program Files"是带有空格的目录,也可能引起一些不必要的麻烦。但注意记录下你的安装目录路径。

可选操作,设置环境变量

安装完成后,在桌面右键 "我的电脑"(win10为"此电脑") => 点击"属性"菜单 => 找到"高级系统属性"进入 => 选择"高级"标签 => 在高级标签下找到"环境变量" =>在下方的系统变量中找到"Path"变量属性双击 => 在弹出的窗口中点击"新建" => 输入之前记录下来的安装目录路径。

如果设置完成,可以在命令行介面无需进入安装的文件夹,运行指令,但在实际操作中,会出现不同的状况。所以,以下在命令行(CMD)中的操作最好都cd至安装目录内操作。

配置mosquitto

Mosquitto并没有UI介面,他的操作大多是用命令行(CMD)来操作。使用键盘按下 WINDOW + R ,输入"cmd",点击确定来打开命令行输入介面。进入安装目录

f:

cd mosquitto

创建用户

我们测试一下创建一个用户(在公共MQTT服务器中,并不需要用户名称和密码也可以登陆),输入:

mosquitto_passwd -c pwfile test

该命令的"-c"参数表示将重新创建一个密码文件,在使用中要慎用该参数,如果原密码文件中已存有其它的用户信息,将会被清空。

运行后屏幕将分两次提示输入密码(输入过程中你的输入不会以*号或其它方式显示出来,不用管,只要输入并按回车即可),两次输入的密码需要保持一致。

 完成后,我们回到安装目录中,看看是否能找到创建的密码文件 "pwfile"。

如果文件存在,用记事本或其它文本编辑工具打开该文件。

 可以观察到,文件内容的最前面的文本是我们所设置的用户名,他是用明文保存在文件里的,在用户名后面,我们看到一串未知的乱码一样的文本,这段就是我们所设置的密码,但这串密码是用sha512-pbkdf2加密后的文本。加密方式也可以用在该命令中用"-H"来选择"sha512-pbkdf2“或”sha512“两种加密方式。

mosquitto_passwd命令简介:

mosquitto_passwd [ -H hash ] [ -c | -D ] passwordfile username

mosquitto_passwd [ -H hash ] -b passwordfile username password

mosquitto_passwd -U passwordfile

选项参数:

-b

以批处理模式运行。允许在命令行中显示密码,这可能很方便,但应谨慎使用,因为密码在命令行和命令历史中是可见的。

-c

创建一个新的密码文件。如果该文件已经存在,它将被覆盖。使用应注意确认该密码文件已经不再需要或做好该密码文件的备份。

-D

删除该密码文件,使用应注意确认该密码文件已经不再需要或做好该密码文件的备份。

-H

选择密码文本的加密方式,默认为"sha512-pbkdf2"加密方式,可选项为"sha512-pbkdf2“或”sha512“。

-U

这个选项可以用来升级/转换(旧版本会生成明文的密码文本)一个使用纯文本密码的密码文件为使用散列密码的文件。它将修改指定的文件。它不会检测密码是否已经被哈希化,所以在一个已经包含哈希化密码的密码文件上使用它,会根据旧的哈希化密码生成新的哈希化密码,使密码文件无法使用。

passwordfile

要修改的密码文件。

username

要添加/更新/删除的用户名。

password

在批处理模式时使用的密码。

当前,我们已经创建了一个用户,如果需要增加用户,可以输入:

mosquitto_passwd pwfile test2

注意,这里输入的命令没有选择使用"-c"选项参数。

现次打开密码文件

 可以发现,除了之前的用户信息,已经增加了一个用户信息。


配置文件mosquitto.conf的常用配置选项

在mosquitto的目录内,有一个叫mosquitto.conf的文件,mosquitto几乎所有配置,都可以在该文件中找到,这里介绍部份比较常用的选项。我们用记事本或其它文本编辑工具打开该文件。

编辑该文件推荐使用系统自带的记事本,在使用其它的文本编辑工具时,曾出现无法识别该文件内的配置的情况。如果以后能确定原因,会更新本文。

 可以看到,文件中的所有选项都是被注释的状态。我们可以找到对应的选项,删除行首的注释符"#"打开该选项,或者在文件的最后加入你想要设置的选项。

这里介绍几个比较常用的选项:

#设置不允许匿名登录
allow_anonymous false

#设置账户密码文件位置为指定文件,当allow_anonymous选项为false,这里也必须配置正确
password_file F:\mosquitto\pwfile

#端口配置(旧版为port)
listener 1883

#支持mqtt以及websocket,默认禁用websocket。
protocol mqtt

# 允许的最大连接数,-1表示没有限制
max_connections -1


把以上的配置复制粘贴到mosquitto.conf文件的最后,当然,也可以新建一个配置文件来保存这些设置(比如"mqtt",扩展名并不是必须的,为了方便区别其它文件,最好是加入扩展名),注意记录好你的配置文件名称。

启动MQTT服务

在命令行中输入:

mosquitto -c mosquitto.conf -v

其中"-c"参数是指定一个配置文件,如果不指定,所以配置将为默认,效果和空白配置文件或所有选项被注释的效果一样。"-v"参数为打开日志显示,后续可以在命令行中显示运行日志。

 运行后,如果正常启动,会出现以上输出,介面将保持不动,也不能进行文字或命令输入,此时,MQTT服务已经启动,注意:这种情况并非程序崩溃或出错,千万不要关闭或退出该介面。

测试用客户端来连接服务器

我们在本机上可以直接使上在之前的文章中所介绍的客户端工具MQTTX来测试连接我们刚刚启动的服务器。

点击上图所示的+号来新建一个连接

 其中,用户名和密码为之前所设定的用户名和密码,如果遗忘,回到本文开始来重新生成新的密码文件。这里,第一次连接我们可以先选择不输入用户名和密码来测试"不允许匿名登录"的配置是否生效。如果不输入用户名和密码或输入错误的用户名和密码失败,但输入正确才能登录,说明配置已经生效。

如果所有配置正确,我们就可以连接到刚刚创建的服务器了

 我们回到命令行,窗口

 可以发现,窗口输出了一些关于客户端登陆到服务器的日志信息。

我们在MQTTX新建一个主题,来测试是否能正常地发布和订阅

这里设置为定阅一个名为test的主题,我们发送一个消息到该主题

 如果正常,消息窗将出现发送和接收的消息

 后台启动MQTT服务

之前为了方便测试和观察,是在CMD窗口中来启动MQTT服务,但在实际使用中,国为这个窗口需要保持打开的状态才能进行工作,在电脑使用中十分不方便,我们需要让它在后台中开启。

在之前安装该工具的过程中,如果我们勾选了"Server"选项,那我们可以在“我的电脑”右键=>选择"管理"菜单=>在管理窗口找到=>"服务和应用"里选择"服务"=>在右边的窗口中找到"Mosquitto Broker"服务=>右键选择启动。

在启动后,该服务会默认使用mousquitto.conf这个配置文件启动MQTT服务。这时,就可以在后台启动该服务了。在该服务属性里把启动类型设置为"自动",在电脑开机会就可以自动开启该服务了。

我们就可以之前一样,用MQTTX工具对他进行连接测试。

至此,我们已经完成MQTT在电脑上的安装,但当前情况下,因为家用宽带一般是没有公网IP的,在两个设备不是连接在同一个路由或局域网的情况下,我们在其它地方暂时还不能连接到该服务器,在之后的文章中,会介绍如何让公网的其它客户端也能连接到我们自已创建的服务器。

猜你喜欢

转载自blog.csdn.net/m0_50114967/article/details/128715683