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

2023-05-16

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

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

  • Paho MQTT Android 服务问题

    我正在我正在开发的应用程序中实现 Paho MQTT Android 服务 在测试了 Paho 提供的示例应用程序后 我发现有一些我想要更改的内容 https eclipse org paho clients android 一旦应用程序完
  • Paho Mqtt Android 连接到代理失败,并显示 (32103)

    我的网络中有一个 ActiveMQ 代理正在监听 1883 mqtt 如果我使用简单的 Java 应用程序和 mqtt client 0 4 0 jar 库连接到该代理 则一切正常 现在我想使用 Android 设备连接到该经纪人 不幸的是
  • 如何在 Spring Boot 中将 Json 字节数组转换为 AMQP?

    按照此 我有这个代码 Bean open fun messageConverter om ObjectMapper MessageConverter return Jackson2JsonMessageConverter om Bean o
  • Mosquitto套接字读取错误Arduino客户端

    我刚刚从 Github 下载了最新的 Arduino 库代码 它破坏了我的 MQTT 客户端程序 我在 Arduino 上使用 PubSubClient 1 91 在 Mac OSX 上使用 Mosquitto 1 1 2 Build 20
  • 【ESP32接入国产大模型之文心一言】

    1 怎样接入文心一言 随着人工智能技术的不断发展 自然语言处理领域也得到了广泛的关注和应用 在这个领域中 文心一言作为一款强大的自然语言处理工具 具有许多重要的应用价值 本文将重点介绍如何通过ESP32接入国产大模型之文心一言api 以及其
  • ADXL345 与 ESP32 I2C 垃圾值问题

    我已根据以下教程使用 I2C 接口将 ESP32 与 ADXL345 连接起来Tutorial http www esp32learning com code esp32 and adxl345 sensor example php 但是
  • 如何在 RSMB 中配置 MQTT-SN 主题 ID

    我的问题是关于通过 MQTT SN 网关使用 MQTT 主题名称和 MQTT SN 主题 ID 来配置 RSMB 使用 Really Small Message Broker 入门 信息对于了解在将两个 Very Small Message
  • 如何测试“Mosquitto”服务器?

    我是新来的Mosquitto and MQTT 我下载了Mosquitto服务器库 但我不知道如何测试它 有什么办法可以测试一下Mosquitto server 在单独的终端窗口中执行以下操作 启动代理 mosquitto 启动命令行订阅者
  • 在一条消息 MQTT 中发布多个主题

    我有一个设备可以从不同的传感器收集大量数据 我想通过一条消息将它们发送给我的经纪人 在客户端 我只想在给定时间查看其中一些数据 我不想看到全部数据 我可以在一条消息中发布多个主题 然后在客户端只能看到其中的一些主题吗 我知道我可以使用通配符
  • Cumulocity smarREST 响应模板

    我正在尝试设置 Cumulocity smartREST 响应模板以提供应用程序存储的设备对象的信息 我认为这是不可能的 但我想确认一下 因为文档很简短而且不清楚 我之前已经成功实现了测量发布模板 但我现在正在尝试执行库存获取 我已经在设备
  • ESP32 上的 Web 服务器:如何自动更新和显示来自服务器的传感器值?

    我在 ESP32 上有一个网络服务器 在该服务器上有一个主页 我想每隔 x 秒自动更新主页上的传感器值 无需用户输入 我无法访问文件系统 该传感器直接连接到 ESP32 传感器值位于我的 C 程序中 存储在变量中并定期更新 变量是全局的 以
  • 如何使用 QtMqtt 和 SSL 执行安全 MQTT?

    我正在尝试使用 QtMQtt 示例项目 simpleclient 但我想执行安全的 MQTT 我该如何处理这个问题 我读过这篇博客 https www qt io blog 2017 08 14 introducing qtmqtt pro
  • 如何从 MQTT 生产并在 ActiveMQ 中作为 MQTT 和 JMS 消费

    我有一个设置 其中消息作为 MQTT 生成到 ActiveMQ 我有两个消费者 一个作为 JMS 另一个作为 MQTT 当我将消息作为 JMS 消息发布到主题 foo 时 我在 JMS 和 MQTT 消费者处都收到消息 但是当我在同一主题上
  • AWS-IOT Mqtt Broker 是否会记住跨客户端连接订阅的客户端和未传递的消息?

    AWS 文档在此 http docs aws amazon com iot latest developerguide iot message broker html http docs aws amazon com iot latest
  • 无法在 Istio 代理后面的 k8s 中建立与 VerneMQ 集群的 mqtt 连接

    我正在设置 k8s 本地 k8s 集群 对于测试 我在使用 kubeadm 设置的虚拟机上使用单节点集群 我的要求包括在 k8s 中运行 MQTT 集群 vernemq 并通过 Ingress istio 进行外部访问 无需部署 ingre
  • 如何在 Amazon AWS Lambda 函数中发布到 MQTT 主题?

    我想要一个简单的命令 就像我在 bash 中使用的那样 将某些内容发布到 AWS Lambda 函数内的 MQTT 主题 沿着以下思路 mosquitto pub h my server com t 灯 设置 m 开 背景 我想用 Alex
  • React Native 上的 MQTT?

    将 MQTT 添加到我的反应原生项目时 我很难找到正确的方法 该项目需要在 iOS 和 Android 上运行 因此理想情况下 MQTT 可以在 javascript 端处理 我意识到移动节点和经典节点的网络巢穴是不同的 所以我开始沿着分叉
  • 请求/响应的 MQTT 主题名称

    我正在设计一个包含许多设备的系统 使用 MQTT 连接到中央代理 有些主设备可以向某些从设备发送请求 来自一台主机的请求通常会发送给一台从机 请求的主题可以是 mysystem slaveId req 因此从站可以订阅该主题 并且主站可以发
  • 加特林负载测试期间编译错误

    我正在尝试编写一个模拟 并且希望能够运行该模拟 我在尝试 mvn gatling execute 时遇到错误 我的 pom 有以下依赖项
  • 通过 MQTT 将 LoRa 测量结果发送到 Fiware IOT 代理

    我有 LoRa 传感器 它使用 Cayenne LPP 格式有效负载发送测量值 我的网关 LOrank8v1 捕获这些数据包并将其转换为 UDP 网关中有一个服务 lora gateway bridge 它将数据包从 UDP 转换为 TCP

随机推荐

  • 自己制作树莓派3B+ 64位系统(编译内核+rootfs制作)

    本文章可通过微信公众平台观看 xff1a https mp weixin qq com s VH3Y0uIvfH Mma1h56m6aQ 更多文章以及资源下载可前往微信公众平台 由于树莓派本身编译较慢 xff0c 所以选择在Ubuntu上面
  • centos7 中使用xfsdump恢复文件

    xfs类型的文件可使用xfsdump与xfsrestore工具进行备份恢复 xff0c 若系统总未安装xfsdump与xfsrestore工具 xff0c 可以通过yum y install xfsdump命令安装 xff0c xfsdum
  • 分享一个简单的双色球程序

    前几天写了个双色球的小程序还挺有意思的 分享一下思路和代码 下图是该程序的需求 可以发现红球和蓝球是分开来判定的 xff0c 所以可以将红球组成一个数组 xff0c 蓝球因为只有一个所以可以放一边 我们可以先将随机生成的 红色球 的号码组成
  • BGP——图解5种报文

    目录 BGP的报文头部 BGP的5种报文 Open 只有邻居建立时会发送此报文 Keepalive 邻居建立时 建立后都会发送此报文 Update 邻居建立成功后才会发送此报文 Notification 邻居建立成功后才会发送此报文 Rou
  • Eth-Trunk链路聚合理论

    目录 什么是Eth trunk Eth Trunk的一些概念 LACP模式 手工模式 链路聚合工作机制 负载分担方式 Eth trunk转发原理 什么是Eth trunk Eth trunk xff08 链路聚合技术 xff09 是一种捆绑
  • Linux 软件包安装

    目录 通过源代码编译安装 通过RPM软件包安装 通过Yum软件仓库安装 配置本地Yum源 通过yum安装软件 通过Dnf软件仓库安装 Linux软件包安装有四种方式 xff1a 源代码 RPM Yum Dnf安装四种方式 通过源代码编译安装
  • MDK + Jlink + SDRAM 裸奔2440教程

    MDK 43 Jlink 43 SDRAM 裸奔2440教程 Author xff1a Aston ofgec deu org 1 背景 很多人学习嵌入式编程都是从裸机开始的 xff08 我个人也是 xff09 这并不是偶然 xff0c 想
  • 谷歌浏览器打开显示2345或360等其他主页的解决方法

    方法如下 xff1a 右键 属性 2 删除圈出来的 Application 应用 重新打开就可以了 如果不行的话 xff0c 进行下面的操作 xff1a 右键快捷方式查看属性 打开文件所在位置 软件重新命名 重复开头的1和2操作就可以了
  • 腾讯运维工程师认证(TCA)认证考试的知识点

    前言 腾讯运维工程师认证 xff08 TCA xff09 认证考试的知识点 xff0c 以下分享以下我的学习笔记 下面是第一章 腾讯运维的概述 一 腾讯云产品概述 1 云网络 包括 xff1a 负载均衡 私有网路 弹性网卡 专线接入 NAT
  • undefined reference to `pthread_create`的解决方法

    在linux中出现一下的报错 test pc c text 43 0x2b7 undefined reference to 96 pthread create 39 test pc c text 43 0x2d2 undefined ref
  • python基础学习值输入A和B,输出

    问题描述 xff1a xff11 输入A B xff0c 输出A 43 B xff12 输入的第一行包括两个整数 xff0c 由空格分隔 xff0c 分别表示A B 代码 xff1a a 61 input split print int a
  • python基础学习数列排序(给定一个长度为n的数列,将这个数列按从小到大的顺序排列。1<=n<=200)

    问题描述 xff1a 给定一个长度为n的数列 xff0c 将这个数列按从小到大的顺序排列 1 lt 61 n lt 61 200 第一行为一个整数n 第二行包含n个整数 xff0c 为待排序的数 xff0c 每个整数的绝对值小于10000
  • python基础学习——十六进制转八进制——蓝桥杯

    目录 1 题目描述 2 思路 3 方法 3 1方法一 3 2方法二 1 题目描述 给定n个十六进制正整数 xff0c 输出它们对应的八进制数 输入的第一行为一个正整数n xff08 1 lt 61 n lt 61 10 xff09 接下来n
  • 手把手教你编写跑马灯——STM32

    一 创建项目 新建一个文件夹 xff0c 打开KeiL projiece new vision projection 给文件命名 xff08 随便取 xff09 根据自己开发板的信号选择对应的型号 在刚才创建的文件夹里面新建一个main c
  • 超详细的python调用树莓派的摄像头基本使用

    这里首先讲解的是CSI摄像头 picamera 1 1录制一段10秒的视频到本地 import picamera camera 61 picamera PiCamera camera resolution 61 640 480 camera
  • 手把手教你写MC9S12G128 Timer

    目录 一 TIM模块概述 1 定时器 计数器的特点 2 嵌入式系统中定时器 计数器模块的作用 二 TIM模块结构和工作原理 1 TIM结构模块 1 1 TIM组成 1 2 特点 2 TIM模块工作原理 2 1 工作模式 2 2 定时器模块框
  • opencv 显示图片

    import cv2 import numpy as np 读取图片 img 61 cv2 imread 39 test16 jpg 39 图片显示 cv2 imshow 39 picture 39 img cv2 waitKey 0 cv
  • VMware+Ubuntu与Windows宿主机文件共享的实现

    学习嵌入式开发 xff0c Linux环境是必不可少的 现在一般都会选择在Windows上用VMware 43 Ubuntu的方式来构筑交叉开发环境 这样的好处是 xff0c 既不离开Windows这个熟悉的环境 xff08 有很多Wind
  • 大数据概论

    一 xff0e 大数据 大数据 xff08 big data xff09 xff0c 指无法在一定时间范围内用常规软件工具进行捕捉 管理和处理的数据集合 xff0c 是需要新处理模式才能具有更强的决策力 洞察发现力和流程优化能力的海量 高增
  • 基于ESP32搭建物联网服务器十三(自已搭建一个MQTT服务器)

    在之前的文章中 ESP32搭建WEB服务器十二 使用MQTT协议与ESP32互动 你的幻境的博客 CSDN博客 我们已经实现了ESP32通过MQTT协议连接到公共MQTT服务器上 xff0c 但是公共服务器在稳定性或安全性上 xff0c 很