MQTT服务器搭建和ESP32实现MQTT代码

2023-05-16

文章目录

  • 1、MQTT介绍:
    • 1.1、需求介绍
    • 1.2、MQTT介绍:
  • 2、具体实现:
    • 2.1、库推荐
    • 2.2、配置MQTT的服务器Broker:
    • 2.3、PubSubClient库使用:
  • 3、使用MQTT设备的工程代码:
  • 4、最后:欢迎和我一起交流学习

1、MQTT介绍:

1.1、需求介绍

在智能家居、物联网应用中,经常需要多个设备间彼此通讯、远程控制等,这些信息的特点是信息量较少、连接的节点多,有时只需要1个字节0/1即可用于控制设备的通断,一个房间里面有很多个这种设备。

并且每个设备的性能不是很高,很可能内存只有几K字节,此时我们上网常用的HTTP协议就不再适合这种场景了。

为了解决这种问题,IBM在1999年发布了MQTT(Message Queuing Telemetry Transport,消息队列遥测传输协议),其最大优点是可以以极少的代码和有限的带宽,为连接远程设备提供实时可靠的消息服务。

作为一种低开销、低带宽占用的即时通讯协议,使其在物联网、小型设备、移动应用等方面有较广泛的应用。MQTT协议是轻量、简单、开放和易于实现的,这些特点使它适用范围非常广泛。

1.2、MQTT介绍:

关于MQTT详细的介绍链接如下:
https://www.runoob.com/w3cnote/mqtt-intro.html

这里摘抄部分说明:

首先MQTT是基于客户端-服务器的消息发布/订阅传输协议,需要一个较高性能的设备作为整个通讯流程中的服务器,用来找到主题对应的订阅者ID并把消息推送过去,这个服务器在MQTT里面叫做broker。MQTT整个结构框图如下:
在这里插入图片描述在这里插入图片描述
每个设备都可以作为消息的发布者和消息的订阅者。

A和B通信只需要A发布消息msg_A,
然后B订阅msg_A即可获得A发布的信息,

这种机制很方便扩展为单对多通信或者多对多通信。

MQTT底层是依赖TCP协议进行连接的,
但也有基于UDP的MQTT,叫做MQTT-SN。MQTT的冗余通信小,固定的通信头部长度是2个字节。

MQTT里面发布消息有三种机制,
"至多一次",
消息发布完全依赖底层TCP/IP网络。会发生消息丢失或重复。这一级别可用于如下情况,环境传感器数据,丢失一次读记录无所谓,因为不久后还会有第二次发送。这一种方式主要普通APP的推送,倘若你的智能设备在消息推送时未联网,推送过去没收到,再次联网也就收不到了。

"至少一次",
确保消息到达,但消息重复可能会发生。

"只有一次",
确保消息到达一次。在一些要求比较严格的计费系统中,可以使用此级别。在计费系统中,消息重复或丢失会导致不正确的结果。这种最高质量的消息发布服务还可以用于即时通讯类的APP的推送,确保用户收到且只会收到一次。

2、具体实现:

2.1、库推荐

实现MQTT有很多完善的开源库,在esp32上推荐使用PubSubClient库,其体积很小,不到700行的代码,
官网链接如下:
https://pubsubclient.knolleary.net/api#loop

有较为完善的API说明文档:
在这里插入图片描述

2.2、配置MQTT的服务器Broker:

首先我们需要先在电脑上搭建起MQTT的服务器,服务器有很多,这里推荐EMQX,体积较小(30M不到),简单方便。除此之外还有mosquitto等开源消息代理。

EMQX官网链接如下:
https://www.emqx.com/zh/community

在官网下载安装好后(笔者是win10系统),运行CMD进入到bin文件夹,./bin/emqx start启动。启动后,浏览器进入:

http://127.0.0.1:18083/

用户名admin,密码public,可以看到界面如下:
在这里插入图片描述
这时便已成功搭建并启动了MQTT服务器,此时如果有设备接入到该MQTT里面,这里就会监控到。

2.3、PubSubClient库使用:

使用该库较为简单,说明如下:
第一步,
创建一个WIFI客户端节点,并用该客户端初始化MQTT客户端。
在这里插入图片描述
第二步,
配置WIFI客户端正确的连接到服务器,并配置一个接收到订阅的主题后的回调函数。
在这里插入图片描述
回调函数格式如下:
在这里插入图片描述
第三步,
订阅一个主题,订阅后服务器便会监测是否有设备发送该主题,如果发送了就推送给订阅该主题的设备。
在这里插入图片描述
第四部,
在主函数一个循环里面一直执行MQTT的循环服务函数。
在这里插入图片描述

此时便已经实现了MQTT服务器的搭建和单片机连接到MQTT服务器上的所有工作。因为本文是在熟悉MQTT之后写的,已经进行过测试,但未拍测试图片,所以就不放测试图片了。

3、使用MQTT设备的工程代码:

上传了一个使用MQTT的工程代码,可以参考进行MQTT的部署。
链接如下:

https://download.csdn.net/download/wcc243588569/84995708

4、最后:欢迎和我一起交流学习

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

MQTT服务器搭建和ESP32实现MQTT代码 的相关文章

  • ESP32开发阶段启用 Secure Boot 与 Flash encryption

    Secure Boot 与 Flash encryption详情 请参考 https blog csdn net espressif article details 79362094 1 开发环境 AT版本 2 4 0 0 发布 IDF 与
  • 【自用】无法通过ESP32创建HomeAssistant实体问题解决(MQTT对ESP32创建实体请求无应答)

    一 问题描述 1 使用 MQTTX 测试客户端能够创建实体 当通过 MQTTX 发送注册实体请求的时候 实体能够在 MQTT 服务器中注册成功 2 使用 ESP32 无法创建实体 在ESP32中通过 publish 函数发送注册请求的时候
  • 为什么 MQTT 无法与 NodeJS 连接?

    我在尝试连接时遇到一个奇怪的问题MQTT服务器与NODEJS 如果我连接到MQTT服务器和我没有连接它只是挂起 如果我使用命令行执行此操作 我会看到数据 因此网络 服务器等都很好 如果我使用错误的端口 那么命令行会给我一条有效的拒绝消息 但
  • 如何像具有 https 的网页一样设置加密的 mosquitto 代理?

    我正在尝试设置一个使用 ssl tls 加密的 mosquitto 代理 我不想生成客户端证书 我只想要一个加密连接 手册页仅描述了可用的设置 没有描述需要哪些设置以及如何使用它们 需要哪些设置以及如何设置它们 我用的是蚊子1 3 5 这里
  • 示例 MQTT 客户端代码不工作 C

    我从那里得到了示例代码here 我有头文件MQTTClient h以及 但是 当我构建时 我收到错误 undefined reference to MQTTClient create undefined reference to MQTTC
  • 接收离线消息mqtt

    我使用 mosquitto 作为代理 使用 paho python 作为客户端 我正在尝试让订阅者接收离线消息 为此我做了以下更改 固定客户端 ID 服务质量级别 2 但是 订阅者仍然无法接收消息 有什么帮助吗 谢谢 拉胡尔 为了让您的客户
  • Mqtt 客户端如何知道另一个客户端是否已连接

    大家好 我的问题是我需要保持设备 客户端 的状态 因为它们是否在线 我通过客户端 ID 进行连接 通过订阅主题 我可以知道设备已断开连接 但如果它们再次连接 我如何检查它们是否再次连接 简而言之 你不需要 在协议级别 发布者和订阅者完全不知
  • Mosquitto套接字读取错误Arduino客户端

    我刚刚从 Github 下载了最新的 Arduino 库代码 它破坏了我的 MQTT 客户端程序 我在 Arduino 上使用 PubSubClient 1 91 在 Mac OSX 上使用 Mosquitto 1 1 2 Build 20
  • 应用程序可以在 Android 和 IOS 模拟器中运行,但在发布后不能运行

    Problem 我创建了一个应用程序 它是 MQTT 代理客户端 当我使用 iOS Android 模拟器进行开发时 我与代理的连接工作正常 但是 当我发布 apk 版本时 我的应用程序无法连接 它有套接字问题 AMQJS0007E 套接字
  • VSCode 上的 PlatformIO 未编译:collect2.exe:错误:ld 返回 1 退出状态

    我最近不得不擦拭我的计算机 在一切准备就绪并运行之后 是时候打开我之前正在处理的一些 ESP32 程序了 发现 VSCode 上的 Platform IO 将不再编译 运行编译器后 我收到以下错误 Compiling pio build e
  • 在一条消息 MQTT 中发布多个主题

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

    我正在尝试使用下面的包来实现带有 TLS 的 node js mqtt 客户端 https www npmjs com package mqtt client https www npmjs com package mqtt client
  • 最大 MQTT 连接数

    我需要创建一个服务器场 可以处理 5 100 万个连接 5 00000 个主题 每个客户端一个 每秒处理 300k 消息 我尝试了解各种消息代理的功能 因此我目前使用两个 RHEL EC2 实例 r3 4xlarge 来获取大量可用资源 所
  • Mosquitto 1.4.2 Websocket 支持

    我正在尝试利用 Mosquittos 最近的更新来支持代理中的 websocket 我正在运行 Mosquitto v1 4 2 并将以下几行添加到 mosquitto 配置文件 mosquitto conf 中 listener 1000
  • 如何在 Amazon AWS Lambda 函数中发布到 MQTT 主题?

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

    我正在尝试构建一个订阅多个 mqtt 主题的应用程序 获取信息 处理它并形成 xml 并在处理时触发一个事件 以便这些可以发送到某个云服务器 并将成功的响应从那里发送回MQTT 通道
  • 简化情况下能否保证mqtt消息送达顺序?

    如果只有一个代理 一个发布者 一个主题和干净的会话 在这个简化的情况下 能否保证订阅者端的消息传递顺序与发布者端的发送顺序相同 会受到QoS的影响吗 Section 4 6 http docs oasis open org mqtt mqt
  • 通过 MQTT 将 LoRa 测量结果发送到 Fiware IOT 代理

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

    有没有办法使用 mosca MQTT 实现请求响应模式 以 检查客户端的回复 如果在预期时间内未收到预期回复 则重新发布 我相信这在 Mqtt 5 中是可能的 但截至目前 我必须使用 QoS 1 的 Mosca 代理 支持直到 Mqtt 3
  • 将消息从 AWS Lambda 发布到 AWS IoT

    我正在尝试使用 Nodejs 将消息从 AWS Lamba 发布到 AWS IoT 我已压缩该项目并上传到 AWS IoT 下面是代码片段 var awsIot require aws iot device sdk var device a

随机推荐

  • 避障算法之3DVFH+

    目录 一 3DVFH 43 论文翻译 摘要 1 引言 2 相关工作 3 八叉树地图 4 3DVFH 43 4 1 第一步 xff1a 八叉图探索 4 2 第二步 xff1a 二维基础极直方图 2D Primary Polar Histogr
  • linux及C++书籍推荐

    盘点一下今年看的书 xff0c 记录下学习历程也向大家分享一些书籍 xff1a Unix编程3剑客 xff1a RichardSteven的大著 Unix网络编程卷1 xff08 套接字联网api xff09 Unix环境高级编程 Unix
  • 机场跑道检测论文阅读笔记

    机场跑道检测论文阅读笔记 A Robust Vision based Runway Detection and Tracking Algorithm for Automatic UAV Landing 来自沙特的KAUST xff0c 20
  • Jetson AGX Xavier使用笔记

    由于毕设的缘故 xff0c 从业无人机相关 xff0c 嵌入式GPU首选Xavier xff0c 撰文记录一下刷机心得 xff0c 欢迎小伙伴们热烈讨论 xff0c 共同学习 1 刷机 网上教程很多 xff0c 但我依然刷了很久才搞定 xf
  • 稀疏编码SparseNet

    大名鼎鼎的稀疏编码 xff0c 源自1996 记录一下使用sparsenet的心得 0 My Prerequisite Windows10matlab 2016bmingw64 为了节省内存 xff0c 我把matlab2016b装在了移动
  • PX4学习笔记5:数据录制及离线处理

    本文内容主要包括 xff0c rosbag的录制以及消息的离线处理 1 rosbag录制 录制双目相机发布的图片话题如下命令 rosbag record O obs5 bag stereo right image raw stereo le
  • PX4学习笔记3: 速度控制

    记录一下PX4在offboard板外模式下用速度控制四旋翼的过程 参考资料如下 PX4板外模式教程youtube速度控制小实验PX4飞行模式offboard模式offboard模式控制例子 注意 必须2Hz以上的频率发布控制消息 否则PX4
  • 使用matlab将mat矩阵存储为xml文件

    参考链接如下 xff1a 原文 改后 function createxml name1 mat1 name是输入的文件名 xff0c datatest是matlab中的矩阵 一般都是float格式存储的 name2 datatest2 xd
  • Optiver Realized Volatility:Introduction to financial concepts and data - [中文翻译]

    Introduction to financial concepts and data Optiver波动率预测概述评估时间线预测时间线 金融概念与数据介绍订单簿 Order Book 交易 xff08 Trade xff09 做市与市场效
  • 特征工程:tsfresh构造时间序列特征

    本文基本上是对tsfresh官方文档的部分翻译 kaggle上使用可以参考tsfresh features and regression blend Feature extraction settings 对于懒人 xff1a 让我计算一些
  • 港科大VINS-MONO入门(一):框架入门及源码解析

    一 VINS介绍 VINS Mono是HKUST的Shen Shaojie团队开源的一套Visual Inertial融合定位算法 介绍见 https github com HKUST Aerial Robotics VINS Mono 论
  • ROS学习笔记(三):rosrun和runlaunch的用法

    一 区别 rosrun是运行一个单独节点的命令 xff0c 如果要运行多个节点 xff0c 则需要使用多次rosrun命令 roslaunch采用XML的格式对需要运行的节点进行描述 xff0c 可以同时运行多个节点 例如 xff1a lt
  • Javascript>> onmouseover用法

    lt DOCTYPE html gt lt html gt lt head gt lt title gt Window Title lt title gt lt head gt lt body gt lt p gt Test your mo
  • Python之Flask登录认证--before_request

    from flask import Flask render template request Response redirect session url for app 61 Flask name app debug 61 True 自动
  • Prometheus安装部署和node_exporter的使用

    一 环境 服务器IP系统组件192 168 0 181CentOS7 6Prometheus Server 2 18 1192 168 0 182CentOS7 6node exporter 1 0 0 下载地址为 xff1a https
  • easyui 学习总结

    1 分页折行导致显示问题 问题描述 xff1a 1 缩小datagrid的宽度 xff0c 直至分页刚刚折行 2 此时再隐藏pageList按钮和刷新按钮 此时table底部将出现一个白条 39 dg 39 datagrid data ge
  • 机会从来都是留给有准备的人,当然,也总是留给那些耐得住寂寞的人, 在别人玩的时候,静下心来学习

    席华锋 1985年出生 2004年上大学 华中科技大学 2011研究生毕业 工作蚂蚁金服 搞Ocean Base分布式数据库 八年如一日 实现从P5到P8的职业生涯三级跳 xff0c 也完成了三个阶段的成长和蜕变 https blog cs
  • JetsonTX2上安装tensorflow的心酸史

    JetsonTX2上安装tensorflow的心酸史 还是那句话 xff0c 做事情得有耐心 xff0c 有耐心 耐心 心 感觉像是给自己的一个心理暗示 tensorflow安装常见问题总结验证 tensorflow1 3 0安装 好的 x
  • MOS管开关电路应用及MOS管原理、选型

    目录 硬件基础 MOS管原理 使用 开关电路应用0 写在前面 xff1a 1 MOS管基本原理及分类1 1 MOS管分类1 2 MOS管导通原理1 3 MOS管输出特性曲线1 4 MOS管的转移特性1 5 MOS管的寄生二极管 xff1a
  • MQTT服务器搭建和ESP32实现MQTT代码

    文章目录 1 MQTT介绍 xff1a 1 1 需求介绍1 2 MQTT介绍 xff1a 2 具体实现 xff1a 2 1 库推荐2 2 配置MQTT的服务器Broker xff1a 2 3 PubSubClient库使用 xff1a 3