在之前的文章中: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 usernamemosquitto_passwd [ -H hash ] -b passwordfile username passwordmosquitto_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的,在两个设备不是连接在同一个路由或局域网的情况下,我们在其它地方暂时还不能连接到该服务器,在之后的文章中,会介绍如何让公网的其它客户端也能连接到我们自已创建的服务器。

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

  1. 提供最全面最详细的ESP32从零开始搭建一个物联网平台教程(从最基本的配网和内建WEB服务器开始到自已搭建一个MQTT服务器)

    目录 教程大纲 硬件需求 教程说明 教程章节链接 ESP32搭建WEB服务器一(AP配网) ESP32搭建WEB服务器二(STA模式) ESP32搭建WEB服务器三(AP模式与STA模式共存) ESP ...

  2. 【迷你强的物联网】起始篇-简介与MQTT服务器【从零开始搭建自己的物联网系统】

    简介 此为系列文章,主要写什么是物联网,当然啦,这个概念过于抽象,所以我会从自己动手构建出一个完整的物联网系统这个方式来折腾.   这个项目也会是一个连载项目,完成一部分就会发布出来,会同步更新于工坊 ...

  3. MQTT服务器搭建与试用,桌面工具连接MQTT服务器

    简介 MQTT(Message Queuing Telemetry Transport,消息队列遥测传输)是IBM开发的一个即时通讯协议,它比较适合于在低带宽.不可靠的网络的进行远程传感器和控制设备通 ...

  4. 阿里云物联网配置实例_云音箱-MQTT服务器-业务服务器三者数据流转

    第一步:创建MQTT服务器的产品和添加设备 登录阿里云,选择物联网平台 选择公共实例 选择设备管理-选择产品-创建产品 我们这里填入产品名称和自定义品类 然后前往定义物模型-编辑草稿 然后添加自定义功 ...

  5. 云服务器物理机在,一个云服务器会在两个物理机上吗

    一个云服务器会在两个物理机上吗 内容精选 换一换 快速入门以具体场景为例,指引您使用共享型负载均衡快速创建一个负载均衡实例,将访问请求分发到两台弹性云服务器上.共享型负载均衡就是原增强型负载均衡.基础 ...

  6. 【立创EDA开源推荐】09期基于ESP32的物联网时钟

    作者: 立创EDA官方 工程主页链接: https://oshwhub.com/course-examples/wu-lian-wang-shi-zhong 简介: 立创EDA&高校联合实验室 ...

  7. 电源服务器原理,破坏性拆解一个HP服务器1300W的电源 【精华】

    看见广告上一天把双管正激作为宣传的手段,对一般PC的ATX电源也许双管正激是个可靠性和成本(效率不一定会高于半桥,其实半桥可靠性也非常好)的折中,但把它夸到天上的广告词大可不必,现在我拆解一个07年的 ...

  8. 快速搭建个人MQTT服务器(基于EMQX)

    文章目录 B站视频 简述 服务器配置 安装 关于8083.8084端口 EMQX基本命令 EMQX配置文件 其他命令 B站视频 4分钟快速搭建个人MQTT服务器(基于EMQX) 简述 相信看到这篇教程 ...

  9. 【MQTT服务器】(一)EMQX平台搭建

    系列文章目录 [MQTT服务器](一)EMQX平台搭建 [MQTT服务器](二)SpringBoot+Mysql数据库存储MQTT消息 [MQTT服务器](三)MQTT终端设备 [MQTT服务器](四 ...

最新文章

  1. IntelliJ IDEA Groovy(转)
  2. Android中的Android中的Surface和SurfaceView
  3. 基于MATLAB的OFDM系统实现
  4. C++类的内联成员函数应放在哪
  5. 《统计学习方法》(李航)读书笔记(转)
  6. LeetCode 1246. 删除回文子数组(区间DP)
  7. Android 向服务器发送XML数据及调用webservice
  8. 添加MD5 密码加密
  9. HLG1116-选美大赛
  10. 啦啦外卖独立版40.4最新外卖源码全开源
  11. 高效办公必备神器-Keychron键盘,值得拥有
  12. 利用日志备份恢复时,提示 该 LSN 太晚,无法应用到数据库
  13. dlp技术(dlp技术和单片lcd的区别)
  14. bzoj 3505: [Cqoi2014]数三角形 排列组合+数学
  15. 《水浒传》108将的绰号(ZZ)
  16. Maven的三种packaging方式(pom、jar、war)
  17. matlab 饼状图 纹理,Matlab小波下纹理特征
  18. spring security+jwt 登录认证
  19. C Primer Plus 第6版 中文版 勘误表
  20. 基于Python实现的手写数字图像识别

热门文章

  1. linux 命令行操作串口
  2. 如何在Salesforce Lightning组件中创建模态/弹出框
  3. python boolean list_python(三)数据类型: int bool str list tuple dict
  4. dcloud如何苹果ios系统真机测试-HBuilderX真机运行ios测试
  5. 推荐视频:纸牌穿玻璃魔术揭密
  6. 5款用过就再也不想删掉的谷歌浏览器插件合集
  7. 百度翻译的json接口数据爬取
  8. JavaScript前端:与PDF.js结合,实现网页PDF内容批量下载
  9. java调用接口失败重调_Java调用WebService接口的常见错误
  10. Processing笔记03—基本图形绘制