ESP32开发笔记

ESP32

学习笔记

MQTT5

共享订阅
什么是共享订阅?

在普通的订阅中,每发布一条消息,所有匹配的订阅端都会收到该消息的副本。然而,当某个订阅端的消费速度无法跟上消息的生产速度时,我们无法将其中一部分消息分流到其他订阅端中来分担压力。这使得订阅端容易成为整个消息系统的性能瓶颈。

因此,MQTT 5.0 引入了共享订阅特性,它使得 MQTT 服务端可以在使用特定订阅的客户端之间均衡地分配消息负载。具体而言,当我们有两个客户端共享一个订阅时,那么每个匹配该订阅的消息都只会有一个副本投递给其中一个客户端。

共享订阅不仅为消费端带来了极佳的水平扩展能力,使我们可以应对更高的吞吐量,还为其带来了高可用性。即使共享订阅组中的一个客户端断开连接或发生故障,其他客户端仍然可以继续处理消息,并在必要时接管原先流向该客户端的消息流1 2.

共享订阅如何工作?

使用共享订阅,我们不需要对客户端的底层代码进行任何改动,只需要在订阅时使用遵循以下命名规范的主题即可:

$share/{共享名}/{主题过滤器}

其中:

  • $share 是一个固定的前缀,以便服务端知道这是一个共享订阅主题。
  • {主题过滤器} 是我们实际想要订阅的主题。
  • {共享名} 是一个由客户端指定的字符串,表示当前共享订阅使用的共享名。

需要共享同一个订阅的一组订阅会话,必须使用相同的共享名。因此,$share/consumer1/sport/#$share/consumer2/sport/# 属于不同的共享订阅组。

共享订阅和普通订阅互不影响。当某个消息同时与共享订阅和普通订阅匹配时,服务端会向每个匹配的普通订阅的客户端发送该消息的副本,同时向每个匹配的共享订阅组中的其中一个会话发送该消息的副本。如果这些订阅来自同一个客户端,那么这个客户端可能会收到该消息的多个副本。

ESP32 in PIO

踩坑问题

  1. esp32串口设置为SERIAL_8E1,电脑串口助手在115200下通信不正常,换1.5/2停止位就正常,在921600和1停止位下也正常,但是在115200下和zigbee模块通信正常。。。
  2. esp32 PubSubClient库的MQTT回调函数似乎是发生在核心1,而且看起来像是一个低优先级的任务挂着的,写一个优先级为3的任务然后死循环,程序都不跑了。如果是在回调函数里写死循环,低优先级的任务依旧正常运行
  3. pio路径不能有中文,否则无法编译

ESP32 in IDF

sdkconfig

在 ESP-IDF 的各 example 文件夹中,都能看见sdkconfig sdkconfig.old sdkconfig.defaul,乐鑫官方对这些文件也有准备说明文档。

踩坑问题

  1. 更新 ESP-IDF 后,idf相关tools在 vscode内无法调用

    相关原因:

    • 如果是使用git命令拉取了新的IDF,其实只是更新了esp-idf文件夹,还有一个.espressif文件夹没有更新,更新方式为运行 esp-idf文件夹下的 install.bat 文件
    • 如果运行了 install.bat 文件还是无法在vscode使用相关tool,则有可能是.vscode文件夹内的配置文件内的相关路径还是老版本的名字,一个解决方法是全部修改正确,一个方法是删了.vscode文件夹,重启vscode重新自动生成解决问题
  2. VSCode 内编写IDF工程很多头文件路径绑定问题“无法打开源文件xxx.h”

    相关原因:

    • VSCode的C/C++插件配置并非是esp-idf适配版(在vscode的界面右下角,一个铃铛的左边,一般是写着win32),
      解决方法是

      • 删除 .vscode 文件夹,然后按下 Ctrl+Shift+P 输入 ESP-IDF:Add vscode Configuration Folder 按下回车,即可

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/20711.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

`nano` 文本编辑器快捷键使用

在 nano 文本编辑器中,可以帮助用户高效编辑文本,下面是每个快捷键的详细解释: 常用快捷键 ^G: Help - 显示帮助信息。这里的 ^ 代表 Ctrl 键,因此 ^G 就是 Ctrl G。^O: Write Out - 保存文件。^O 即 Ctrl O,用于将…

模仿库实现priority_queue

1 priority_queue 1.1 概念 优先级队列,一种大/小堆(默认为大堆) 1.2 大堆和小堆 一种完全二叉树,大堆根节点一定比子字节大 小堆根节点一定比子字节小 向下调整 从根节点开始比较与子节点的大小不断向下 向上调整 找到最后一个非叶子节点&#xf…

mac多媒体影音库:Emby for Mac 中文版

Emby软件是一款功能强大的媒体服务器软件,旨在为用户提供丰富的多媒体体验。以下是关于Emby软件的详细介绍: 下载地址:https://www.macz.com/mac/7964.html?idOTI2NjQ5Jl8mMjcuMTg2LjE1LjE4Mg%3D%3D 主要功能 媒体管理:Emby允许用…

代码随想录-Day25

216.组合总和III 找出所有相加之和为 n 的 k 个数的组合,且满足下列条件: 只使用数字1到9 每个数字 最多使用一次 返回 所有可能的有效组合的列表 。该列表不能包含相同的组合两次,组合可以以任何顺序返回。 示例 1: 输入: k 3, n 7 输…

Python OCR 图片转文字进阶:读光OCR之行检测模型+行识别模型

Python OCR 图片转文字进阶:读光OCR之行检测模型行识别模型 介绍阿里云文字识别OCR(读光OCR)前置条件模型1:行检测模型模型1:行识别模型 代码:main.py 介绍 什么是OCR? OCR是“Optical Charac…

Leetcode:字符串转换整数 (atoi)

题目链接:8. 字符串转换整数 (atoi) - 力扣(LeetCode) 普通版本(条件限制) class Solution { public:int myAtoi(string s) {int res 0;int i 0;int flag 1;//假设整数为正while(s[i] )//跳过空格{i;}if(s[i] …

德人合科技——@天锐绿盾 | -文档透明加密系统

天锐绿盾文档透明加密系统是一种先进的数据安全解决方案,旨在保护企业和组织的敏感信息,防止未经授权的访问和泄漏。 PC地址: https://isite.baidu.com/site/wjz012xr/2eae091d-1b97-4276-90bc-6757c5dfedee 以下是该系统的一些关键特点和功…

[C++11/14新特性] tuple元组介绍

C11 标准新引入了一种类模板,命名为 tuple(中文可直译为元组)。tuple 最大的特点是:实例化的对象可以存储任意数量、任意类型的数据。tuple 的应用场景很广泛,例如当需要存储多个不同类型的元素时,可以使用…

3D目标检测入门:探索OpenPCDet框架

前言 在自动驾驶和机器人视觉这两个飞速发展的领域中,3D目标检测技术扮演着核心角色。随着深度学习技术的突破性进展,3D目标检测算法的研究和应用正日益深入。OpenPCDet,这个由香港中文大学OpenMMLab实验室精心打造的开源工具箱,…

加密算法简述

目录 1 加密算法的分类 2 对称加密 3 非对称加密 4 哈希算法 1 加密算法的分类 数据加密的基本过程是将原本的明文数据依照某种算法进行一定的处理,使之成为一段不可读的密文,只有通过相应的密钥与算法进行计算后才可显示出原文。而这个过程中的算法…

【用Python画画】六一儿童节画爱心

本文收录于 《Python编程入门》专栏,从零基础开始,分享一些Python编程基础知识,欢迎关注,谢谢! 文章目录 一、前言二、代码示例三、知识点梳理四、总结 一、前言 本文介绍如何使用Python的海龟画图工具turtle&#xf…

linux中如和查找端口是否被占用

在Linux系统中&#xff0c;可以使用以下命令来查找特定端口是否被占用&#xff1a; 使用netstat命令&#xff1a; netstat -tuln | grep <port_number>其中&#xff0c;-t表示TCP协议&#xff0c;-u表示UDP协议&#xff0c;-l表示监听状态&#xff0c;-n表示显示端口号…

Docker从安装开始精通

从虚拟机到容器 1.环境配置的难题 软件开发最大的麻烦事之一&#xff0c;就是环境配置。用户计算机的环境都不相同&#xff0c;你怎么知道自家的软件&#xff0c;能在那些机器跑起来&#xff1f; 用户必须保证两件事&#xff1a;操作系统的设置&#xff0c;各种库和组件的安装…

堆排序的实现

在上一篇博客中&#xff0c;介绍了堆的实现&#xff0c;现在来介绍一下堆排序。 一.打印有序&#xff1a; 现在先给一个无序的数组&#xff0c;现在我们利用我们实现的堆的功能先完成一下打印排序&#xff1a; 在for循环里是一个建堆的过程&#xff0c;每来一个数据就放入堆中…

c++ map/multimap容器

在C中&#xff0c;std::map 和 std::multimap 是两种关联容器&#xff0c;它们包含了可重复的&#xff08;对于 multimap&#xff09;或唯一的&#xff08;对于 map&#xff09;键值对。这些容器都根据它们的键自动排序&#xff0c;并允许非常快速地根据键查找、插入和删除元素…

监控易监测对象及指标之:深入监测Exchange 2013邮件服务器的关键指标

在当今的信息化时代&#xff0c;Exchange 2013邮件服务器因其高效、稳定的特点被广泛应用于企业通信中。为了确保邮件服务器的持续稳定运行&#xff0c;及时发现并解决潜在问题至关重要。监控易作为一款功能强大的监控工具&#xff0c;为Exchange 2013邮件服务器提供了一系列细…

linux进程的加载和启动过程分析

我们的源代码通过预处理,编译,汇编,链接后形成可执行文件,那么当我们在终端敲下指令$ ./a.out argv1 argv2 后,操作系统是怎么将我们的可执行文件加载并运行的呢? 首先知道,计算机的操作系统的启动程序是写死在硬件上的,每次计算机上电时,都将自动加载启动程序,之后…

python第五次作业

1.请实现一个装饰器&#xff0c;每次调用函数时&#xff0c;将函数名字以及调用此函数的时间点写入文件中 # 导入datetime模块&#xff0c;用于获取当前时间并格式化输出 import datetime# 定义一个装饰器工厂函数log_funcName_time&#xff0c;它接受一个参数time def log_fu…

红外听力教学考试系统-红外语音听力广播在大学英语四六级听力考试中应用

红外听力教学考试系统-红外语音听力广播在大学英语四六级听力考试中的应用 由北京海特伟业科技有限公司任洪卓发布于2024年6月1日 红外语音听力广播&#xff08;即红外听力教学考试系统&#xff09;在英语四六级听力考试的应用正日益凸显出其重要性和优越性。在当前的高等教育…

xcode删除依赖包package,删除不必要的依赖项

点击项目&#xff0c;然后点击PROJECT项里面的Package DepenDependencies&#xff1a; 选中一个依赖项&#xff0c;然后点击减号&#xff0c;就可以把依赖项删除掉了&#xff0c;左侧项目下面的Package已经没有了这个依赖项 TARGET下面的package也要删除&#xff1a;在这里删除…