构建配置ESP8266 MQTT服务器

2023-11-09

我们将了解ESP8266模块如何通过消息队列遥测传输(MQTT)相互通信。

MQTT术语

已经使用了诸如中央代理,主题,发布,订阅之类的术语,因此现在该用类似于邮局的方式来解释它们了,消息是报纸或杂志:

  • 代理:这是一个接收客户端消息的软件应用程序,并根据订阅者的请求路由消息。
  • 客户端:它是一种可以发布消息或可以接收消息的设备,或两者兼而有之。
  • 主题:这是一个字符串,代理使用该字符串来过滤每个连接的客户端的消息。 它由客户端在订阅请求中发送给代理,以表达接收其他客户端发布的消息的愿望。 由客户端在将消息发布到订阅了同一主题的任何其他客户端时发送。
  • 发布:在特定主题上向另一个客户端发送消息(杂志)的操作。
  • 订阅:通知代理有兴趣接收其他客户在该主题上发布的将来消息的操作。 客户可以订阅多个主题。
  • 退订:客户端告诉代理不要将消息发送到指定主题的操作。

由于MQTT的一个特点是灵活的订阅主题,因此让我们看一下主题的形成方式。主题由使用/作为主题级别分隔符的层次结构级别组成。

例如

  • 62/livingroom/temperature
  • 456733-a55h56-667743/battery

注意:主题区分大小写。

主题通配符

如果通过代理将数据发布到另一个客户端,则必须指定完整的主题名称:要接收消息,客户端可以使用通配符级别订阅主题。通配符为单级+和多级#:

  • 单级+
  • 在主题的订阅级别中使用+表示代替+可以是任何值。
  • 如果要构建显示面板来显示房屋的温度,则可以构建模块来读取每个房间的温度,并将其发布到以下主题中:

myHouse/groundFloor/livingroom/temperature

myHouse/groundFloor/kitchen/temperature

  • myHouse/firstFloor/bedroom/temperature和显示模块将订阅:myHouse/groundFloor/+/temperature
  • 每次位于底层的温度模块发布有关其主题的消息时,显示模块都会收到该消息,因此无需订阅每个主题,但它不会接收来自以下主题的数据:

myHouse/groundFloor/livingroom/humidity

myHouse/groundFloor/kitchen/light

  • 多级#
  • 在订阅的主题级别的客户端中使用#将接收该级别以下的所有消息
  • 如果显示面板正在订阅主题
  • myHouse/groundFloor/#表示它将接收以myHouse / groundFloor开头的主题上发布的所有消息。
  • 如果客户订阅#,则该主题将接收该代理中发布的所有消息。
  • 特殊主题$
  • 如果要监视代理的内部统计信息,则需要订阅$ SYS主题。
  • 以下是你获得的示例

Mosquitto代理

Eclipse Mosquitto TM是一个开源MQTT代理,它实现了MQTT v3.1和MQTT v.3.1.1标准,并提供了一种轻量级的方法来传输消息,从而允许发布和订阅低功耗传感器,移动设备,嵌入式计算机和微型计算机和控制器。

您可以直接从Linux存储库发行版中,在Raspberry Pi上,AWS实例上或VirtualBox Linux实例上安装Mosquitto。 或者,如果您需要websockets的支持,则可以获取源代码并自己进行编译。

从Linux发行版本库安装:

  1. 首先升级到最新版本

sudo apt update && sudo apt upgrade

  1. 然后安装 Mosquitto

sudo apt install mosquitto

你将看到如下截屏

  1. 安装Mosquitto代理后,验证代理是否已启动,并按如下所示安装mosquitto-clients:
  2. 输入如下命令

sudo apt install mosquitto-clients

你将看到如下截屏

Mosquitto客户端带有三个非常重要的实用程序:

  • mosquitto_sub:一个简单的mqtt客户端,它将订阅一个主题并打印接收到的所有消息
  • mosquitto_pub:一个简单的mqtt客户端,它将在单个主题上发布消息并退出
  • mosquitto_passwd:一种用于管理Mosquitto密码文件的工具

将它们中的任何一个与–help选项一起使用,例如mosquitto_sub --help将提供包含可用于测试代理的所有选项的完整列表。

安装后,Mosquitto作为服务启动,并侦听端口1883。要测试此初始安装,让我们订阅一个主题并在该主题上发布一条消息。

以下命令显示使用-t选项订阅主题:

mosquitto_sub-t livingroom/temperature

如下运行命令

订阅主题,观察:此命令假定代理在本地服务器上运行。 当您将Mosquitto部署到Internet虚拟专用服务器(VPS)进行订阅时,请添加-h以指定服务器实例的IP地址(使用ifconfig进行查找),以及端口-p 1884(如果您未使用默认的1883) 端口。在这种情况下,命令将是:

mosquitto_sub -h 46.102.34.87 -t livingroom/temperature

在另一个终端中,让我们发布关于同一主题livingroom/temperature的一些JSON格式的消息。 使用数次以下命令,然后查看消息:

mosquitto_pub -t livingroom/temperature -m {"t":27.4}

你将看到结果:

发送消息后,mosquitto_pub将退出。 如果要每秒发送一次值,请使用watch实用程序,其中-n 1是命令之间的秒数:

watch -n 1 mosquitto_pub -t livingroom/temperature -m {"t":27.4}

现在,您可以尝试在订阅主题上使用+,#,mosquitto_sub -t livingroom /#将为您提供命令发送的所有数据:

mosquitto_pub -t livingroom/temperature -m {"t":27.4}
mosquitto_pub -t livingroom/humidity -m {"h":68}

你将看到

并在主题中使用+,订阅所有温度主题:

mosquitto_sub - t myhouse/+/temperature

并从其他终端发送消息,例如:

mosquitto_pub -t myhouse/living/temperature -m {"t":25.6}
mosquitto_pub -t myhouse/kitchen/temperature -m {"t":27.1}

在您订阅的终端中,您将看到以下所有消息:

ESP8266使用MQTT

发布数据

接收数据

保护Mosquitto安全

详情参阅 - 亚图跨际

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

构建配置ESP8266 MQTT服务器 的相关文章

  • 嵌入式 十个最值得阅读学习的C开源项目代码

    Webbench Webbench是一个在linux下使用的非常简单的网站压测工具 它使用fork 模拟多个客户端同时访问我们设定的URL 测试网站在压力下工作的性能 最多可以模拟3万个并发连接去测试网站的负载能力 Webbench使用C语
  • ICT(计算机通信电子自动化等)专业区别和联系

    ICT 是IT和CT的统称 IT 是信息技术 CT是通信技术 IT 开设的专业主要有 计算机科学与技术 软件工程 信息安全 等 CT 开设的专业有 电子信息工程 自动化 通信工程 光电信息科学与工程 物联网工程 等 区别和联系看专业课就能知
  • 图片验证码之中英文数字混合输入验证的综合应用(python3.X)

    中文验证码生成的案例点击查看 数字英文验证码生成的案例点击查看 这篇用之前学的内容分别生成四位由数字 英文大写字母 英文小写字母和中文汉字随机排列的字符串验证码 使验证码更具其合理性 新增加内容有 1 pip install captcha
  • 小怿和你聊聊V2X测试系列之 如何实现C-V2X HIL测试(2022版)

    在我们2021年的V2X专题分享系列中 分别给大家介绍了 V2X应用场景 V2X仿真测试 以及一篇 V2X HIL测试 分阶段的进行V2X业务的知识普及 大家肯定记忆犹 新 马上关注下怿星科技公众号 搜索关键词V2X 今天尼 我们在这里为大

随机推荐

  • Linux:使用bash脚本分析日志(交易信息日志分析)

    使用bash脚本分析日志 背景 线上交易程序不能轻易修改代码 以防止出现不必要的错误 但于此同时 在进行交易信息分析时 部分需要根据原始数据计算才能得到的指标无法直接获取 而且日志信息比较杂乱 不便汇总分析 因此可以使用bash脚本对日志进
  • Dijkstra最短路径算法构造的生成树是否一定为最小生成树

    Dijkstra最短路径算法构造的生成树是否一定为最小生成树 问题描述 一连通无向图 边为非负权值 问用Dijkstra最短路径算法能否给出一棵生成树 这树是否一定为最小生成树 说明理由 解答 Dijkstra最短路径算法能够给出一棵生成树
  • 《深度学习中的字符识别在工业视觉中的实际应用》

    最近在公司做了一个构建卷积神经网络来识别字符的项目 编程环境为pycharm2019 使用的是OpenCv Pytorch进行项目的实现 因此想总结和归纳一下方法 本次的字符识别项目可以分为以下几个步骤 一 图像处理和字符分割 二 创建自己
  • Linux文件权限学习笔记

    文件权限共10个字符 第一个字符表示该文件是 文件夹 或 文件 如果是字符 d 则表示该文件是文件夹 如果是字符 则表示是文件 后九个字符 三个一组 共三组 分别表示 所有者权限 所属组权限 其他人的权限 固定位置固定字符 rwx 分别表示
  • Cpp学习——list的模拟实现

    目录 一 实现list所需要包含的三个类 二 三个类的实现 1 list node 2 list类 3 iterator list类 三 功能实现 1 list类里的push back 2 iterator类里的运算符重载 3 list类里
  • Centos7.5配置iptables防火墙-网络系统管理赛项

    废话不多说 直接上真题 这是2021年6月国赛Linux模块的IspSrv的工作任务 唯一不同的是我们要拿centos7 5来做 准备工作 一台安装centos7 5系统的虚拟机 需要提前配置好yum源以及安装ssh服务 这里ssh工具使用
  • 毕业设计 - 基于stm32的示波器设计

    文章目录 1 简介 2 主要器件 3 实现效果 4 设计原理 5 部分实现代码 6 最后 1 简介 Hi 大家好 今天向大家介绍一个学长做的单片机项目 基于stm32的示波器设计 大家可用于 课程设计 或 毕业设计 2 主要器件 3 实现效
  • 别了 摩托罗拉

    别了 摩托罗拉 仅仅在10年前 摩托罗拉还一直是引领尖端技术和卓越典范的代表 享有着全球最受尊敬公司之一的尊崇地位 它一度前无古人地每隔10年便开创一个工业 有的10年还开创两个 但当这些工业兴盛起来 进入寡头竞争的成熟阶段之后 它却遭遇一
  • Postman工具——环境变量与全局变量

    转载请注明出处 http blog csdn net water 0815 article details 53326990 本文同步发表于我的微信公众号和简书社区 微信公众号 惜福 xifu forever 扫一扫文章底部的二维码即可关注
  • 使用popen实现system函数功能

    之前写Linux应用程序的时候 最喜欢使用system命令了 后来发现这个命令使用需要很谨慎 之前使用该命令来进行MD5校验 通过返回值来判断校验是否成功不够严谨 有时候因为system调用MD5sum文件不存在导致的错误 应用并不能够直观
  • LeetCode 200. 岛屿数量(C++)

    题目地址 力扣 思路 我们从题目中可以得知 孤立的岛屿旁边全是海 假设岛屿范围内每一个 1 是岛屿的一部分 那么我们从岛屿的任意一部分登岛 走遍岛屿的每一块土地 就能确定岛屿的大小和范围 为了找遍所有的岛屿 我们还需要把走过的土地都标记为0
  • 音频常见问题总结

    音频文件在播放时出现断断续续或类似 爆破 Pop Click 杂音的现象 称之为 Xrun 可以是 underrun 也可以是 overrun 原因 通常来说 出现 Xrun 问题时原因可能是以下几个之一 1 Linux CFS 调度器导致
  • el-select下拉框多选远程搜索反显

  • 若依框架前端打包踩坑

    官网 http www ruoyi vip 目录 一 下载并运行项目 二 关于 若依 接口地址配置 2 1 若依的跨域代理介绍 2 2 配置跨域代理 调用后台接口 2 2 1 配置 后台 ip 地址 2 2 2 页面报 系统接口404 错误
  • 创宇技能表_[OPEN]知道创宇研发技能表

    HI 今天夜里 我们开放知道创宇的研发技能表 这个Checklist里大体总结了在知道创宇做研发工作所需具备的技能 包括我们的安全研究员 这份技能表给出了许多的 点 而 面 需要靠自己 否则如何证明自己具备牛逼的学习能力 技能都样样掌握好的
  • base64图片互转

    String a base substring base indexOf 1 GenerateImage a D 1 jpg public static void main String args throws IOException St
  • 使用Nginx发布Vue应用

    使用Nginx发布Vue应用 本教程将指导你如何使用Nginx来发布Vue应用 Nginx是一个高性能的开源Web服务器 可以用于部署静态网页 反向代理和负载均衡等 Vue是一个流行的JavaScript框架 用于构建现代化的单页面应用 步
  • [人工智能-综述-1]:人工智能系统架构

    作者主页 文火冰糖的硅基工坊 文火冰糖 王文兵 的博客 文火冰糖的硅基工坊 CSDN博客 本文网址 人工智能 综述 1 人工智能系统架构 文火冰糖 王文兵 的博客 CSDN博客 人工智能系统的技术架构 目录 第1部分 什么是人工智能 1 1
  • VLC Activex控件(VideoLAN.VLCPlugin.1 VideoLAN.VLCPlugin.2)的所有方法 属性及使用 在一个老外的网站上找到的...

    无意中在老外的网站上发现了关于VideoLAN VLCPlugin 1和VideoLAN VLCPlugin 2所有方法和属性 公布出来 以免大家浪费时间去寻找 注意你使用的VLC的版本 If you open a link to a vi
  • 构建配置ESP8266 MQTT服务器

    我们将了解ESP8266模块如何通过消息队列遥测传输 MQTT 相互通信 MQTT术语 已经使用了诸如中央代理 主题 发布 订阅之类的术语 因此现在该用类似于邮局的方式来解释它们了 消息是报纸或杂志 代理 这是一个接收客户端消息的软件应用程