基于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 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服务器)相关推荐
- 提供最全面最详细的ESP32从零开始搭建一个物联网平台教程(从最基本的配网和内建WEB服务器开始到自已搭建一个MQTT服务器)
目录 教程大纲 硬件需求 教程说明 教程章节链接 ESP32搭建WEB服务器一(AP配网) ESP32搭建WEB服务器二(STA模式) ESP32搭建WEB服务器三(AP模式与STA模式共存) ESP ...
- 【迷你强的物联网】起始篇-简介与MQTT服务器【从零开始搭建自己的物联网系统】
简介 此为系列文章,主要写什么是物联网,当然啦,这个概念过于抽象,所以我会从自己动手构建出一个完整的物联网系统这个方式来折腾. 这个项目也会是一个连载项目,完成一部分就会发布出来,会同步更新于工坊 ...
- MQTT服务器搭建与试用,桌面工具连接MQTT服务器
简介 MQTT(Message Queuing Telemetry Transport,消息队列遥测传输)是IBM开发的一个即时通讯协议,它比较适合于在低带宽.不可靠的网络的进行远程传感器和控制设备通 ...
- 阿里云物联网配置实例_云音箱-MQTT服务器-业务服务器三者数据流转
第一步:创建MQTT服务器的产品和添加设备 登录阿里云,选择物联网平台 选择公共实例 选择设备管理-选择产品-创建产品 我们这里填入产品名称和自定义品类 然后前往定义物模型-编辑草稿 然后添加自定义功 ...
- 云服务器物理机在,一个云服务器会在两个物理机上吗
一个云服务器会在两个物理机上吗 内容精选 换一换 快速入门以具体场景为例,指引您使用共享型负载均衡快速创建一个负载均衡实例,将访问请求分发到两台弹性云服务器上.共享型负载均衡就是原增强型负载均衡.基础 ...
- 【立创EDA开源推荐】09期基于ESP32的物联网时钟
作者: 立创EDA官方 工程主页链接: https://oshwhub.com/course-examples/wu-lian-wang-shi-zhong 简介: 立创EDA&高校联合实验室 ...
- 电源服务器原理,破坏性拆解一个HP服务器1300W的电源 【精华】
看见广告上一天把双管正激作为宣传的手段,对一般PC的ATX电源也许双管正激是个可靠性和成本(效率不一定会高于半桥,其实半桥可靠性也非常好)的折中,但把它夸到天上的广告词大可不必,现在我拆解一个07年的 ...
- 快速搭建个人MQTT服务器(基于EMQX)
文章目录 B站视频 简述 服务器配置 安装 关于8083.8084端口 EMQX基本命令 EMQX配置文件 其他命令 B站视频 4分钟快速搭建个人MQTT服务器(基于EMQX) 简述 相信看到这篇教程 ...
- 【MQTT服务器】(一)EMQX平台搭建
系列文章目录 [MQTT服务器](一)EMQX平台搭建 [MQTT服务器](二)SpringBoot+Mysql数据库存储MQTT消息 [MQTT服务器](三)MQTT终端设备 [MQTT服务器](四 ...
最新文章
- IntelliJ IDEA Groovy(转)
- Android中的Android中的Surface和SurfaceView
- 基于MATLAB的OFDM系统实现
- C++类的内联成员函数应放在哪
- 《统计学习方法》(李航)读书笔记(转)
- LeetCode 1246. 删除回文子数组(区间DP)
- Android 向服务器发送XML数据及调用webservice
- 添加MD5 密码加密
- HLG1116-选美大赛
- 啦啦外卖独立版40.4最新外卖源码全开源
- 高效办公必备神器-Keychron键盘,值得拥有
- 利用日志备份恢复时,提示 该 LSN 太晚,无法应用到数据库
- dlp技术(dlp技术和单片lcd的区别)
- bzoj 3505: [Cqoi2014]数三角形 排列组合+数学
- 《水浒传》108将的绰号(ZZ)
- Maven的三种packaging方式(pom、jar、war)
- matlab 饼状图 纹理,Matlab小波下纹理特征
- spring security+jwt 登录认证
- C Primer Plus 第6版 中文版 勘误表
- 基于Python实现的手写数字图像识别
热门文章
- linux 命令行操作串口
- 如何在Salesforce Lightning组件中创建模态/弹出框
- python boolean list_python(三)数据类型: int bool str list tuple dict
- dcloud如何苹果ios系统真机测试-HBuilderX真机运行ios测试
- 推荐视频:纸牌穿玻璃魔术揭密
- 5款用过就再也不想删掉的谷歌浏览器插件合集
- 百度翻译的json接口数据爬取
- JavaScript前端:与PDF.js结合,实现网页PDF内容批量下载
- java调用接口失败重调_Java调用WebService接口的常见错误
- Processing笔记03—基本图形绘制