ESP32-C3模组上跑通MQTT(2)

2024-05-05 16:20
文章标签 mqtt esp32 模组 c3

本文主要是介绍ESP32-C3模组上跑通MQTT(2),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

接前一篇文章:ESP32-C3模组上跑通MQTT(1)

本文内容参考:

《ESP32-C3 物联网工程开发实战》

MQTT协议及使用_mqtt endpoint-CSDN博客

特此致谢!

上一回对于远程控制进行了介绍,并且介绍了常见的云端数据通信协议中的HTTP。本文介绍另一个协议 —— MQTT,这也是本系列文章的重中之重。

二、常见的云端数据通信协议

2. MQTT协议

实际上在笔者之前的文章中,已经对于MQTT进行了介绍,参见:

Windows系统下安装Mosquitto的步骤(1)-CSDN博客

在这个系列中,会从更加深入的技术细节层面对于MQTT协议进行讲解。

MQTT(Message Queue Telemetry Transport)是一个基于客户端/服务器端(C/S)架构发布的/订阅模式的消息传输协议。该写哟具有轻巧、开放、简单、规范和易于实现的特点,适合于资源受限设备,属于物联网的标准传输协议之一。

MQTT协议由IBM于1999年发布,目前MQTT协议已经发展到v5.x,ESP-IDF支持v3.1.1。MQTT v5.x与v3,x差异较大,而且不是互相兼容的。目前市面上大部分云平台还是以v3.x为主,因此本文重点介绍MQTT v3.x。

MQTT协议运行于TCP协议之上,具有如下特点:

  • 使用发布/订阅消息模式,提供了一对多的消息分发模式和应用之间的解耦。
  • 消息传输时不需要知道负载内容。
  • 提供三种等级的服务质量(QoS)来保证数据的传输。
  • 传输消耗很小,可最大限度地减少网络流量。
  • 支持遗嘱消息,在连接异常断开时,能通知到相关各方。

三、MQTT协议原理

MQTT协议是基于客户端与服务器架构进行通信的。在MQTT协议中,有三类角色发布者(Publisher)订阅者(Subscriber)代理服务器(Broker)

发布者和订阅者都属于客户端,并且客户端既可以是消息的发布者、也可以是消息的订阅者;代理服务器是服务器端。

MQTT协议的架构如下图所示:

1. 客户端

通常指使用MQTT程序的设备,可以是发布者(Publisher)和订阅者(Subscriber),一般可将智能手机和被控设备视为客户端。客户端总是通过网络连接到服务器端的,可以实现以下功能:

  • 将应用消息发布给其它相关的客户端。
  • 通过订阅,以请求接收相关的应用消息。
  • 通过取消订阅,以移除接收应用消息的请求。
  • 断开和服务器端的连接。

MQTT客户端可以向服务端发布信息,也可以从服务端收取信息。我们把客户端发送信息的行为成为发布信息;而客户端要想从服务端收取信息,则首先要向服务端订阅信息。

2. 服务器端

通常指代理服务器(Broker),作为发送消息的客户端和请求订阅的客户端之间的中介。一般可将云平台和云服务器视为服务器端。服务器端可以实现以下功能:

  • 接收来自客户端的网络连接。
  • 接收客户端发布的应用消息。
  • 处理客户端的订阅和取消订阅请求。
  • 将应用消息转发给符合条件的客户端。

MQTT服务端其实就是一台服务器。它是MQTT信息传输的枢纽,负责将MQTT客户端发送来的信息传递给MQTT客户端。MQTT服务端还负责管理MQTT客户端。确保客户端之间的通讯顺畅,保证MQTT消息得以正确接收和准确投递。

3. 订阅(Subscribe)

订阅包含一个主题过滤器(Topic Filter)和一个最大的服务质量(QoS)等级。订阅与单个会话(Session)关联,会话可以包含多个订阅,会话的每一个订阅都有一个不同的主题过滤器。

4. 主题(Topic)

主题是附加在应用消息上的一个标签,服务器端在已知该标签的情况下,向订阅了该标签的客户端发送该应用消息的副本。

5. 主题过滤器(Topic Filter)

订阅中包含的一个表达式,用于表示相关的一个或多个主题。主题过滤器可以使用通配符,用于代替单个或多个字符。

6. 会话(Session)

客户端和服务器之间的状态交互,一些会话的持续时长与网络连接一样。客户端与服务器从建立连接到断开连接之间的状态交互称为会话。

7. 订阅与发布模式

订阅与发布模式是MQTT协议的灵魂。订阅者和发布者不需要关心对端的IP地址和端口号,也不需要直接和对端相连,它们甚至不知道对端是否存在。订阅者和发布者之间由代理服务器维系两者的消息交换,代理服务器过滤所有发布者发布的消息,然后分发给合适的订阅者

发布者和订阅者都需要关心消息的主题。例如,智能手机想查看智能灯A的状态,则流程如下:

1)智能手机可以作为订阅者向代理服务器订阅主题为A/light_state的订阅消息;

2)智能灯设备A可以作为发布者,当智能灯的状态发生变化时,就会发布主题为A/light_state的状态消息给代理服务器;

3)代理服务器过滤订阅了主题A/light_state的订阅者,将状态消息发布给智能手机。这样智能手机就能查询到智能灯A的状态了。

更多内容请看下回。

这篇关于ESP32-C3模组上跑通MQTT(2)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/962127

相关文章

ESP32 esp-idf esp-adf环境安装及.a库创建与编译

简介 ESP32 功能丰富的 Wi-Fi & 蓝牙 MCU, 适用于多样的物联网应用。使用freertos操作系统。 ESP-IDF 官方物联网开发框架。 ESP-ADF 官方音频开发框架。 文档参照 https://espressif-docs.readthedocs-hosted.com/projects/esp-adf/zh-cn/latest/get-started/index

探索蓝牙协议的奥秘:用ESP32实现高质量蓝牙音频传输

蓝牙(Bluetooth)是一种短距离无线通信技术,广泛应用于各种电子设备之间的数据传输。自1994年由爱立信公司首次提出以来,蓝牙技术已经经历了多个版本的更新和改进。本文将详细介绍蓝牙协议,并通过一个具体的项目——使用ESP32实现蓝牙音频传输,来展示蓝牙协议的实际应用及其优点。 蓝牙协议概述 蓝牙协议栈 蓝牙协议栈是蓝牙技术的核心,定义了蓝牙设备之间如何进行通信。蓝牙协议

MQTT之CONNECT控制报文详解

目录 1.  MQTT协议规范 2.  名词解释 3.  CONNECT控制报文详解 3.1  固定报头 Fixed header 3.2  可变报头 Variable header 3.2.1  协议名 Protocol Name 3.2.2  协议级别 Protocol Level 3.2.3  连接标志 Connect Flags 3.2.4  保持连接 Keep

lvgl_micropython development for esp32

​​​​​​上一篇博客已经编译源码生成了ESP32C3的固件lvgl_micropy_ESP32_GENERIC_C3-4.bin,这篇博客开发一个界面。 一、开发环境 1、安装开发工具 Windows安装Thonny工具,官网链接:Thonny, Python IDE for beginners。 参考博客:用MicroPython开发ESP32- 用Thonny写程序_esp32用什么

ESP32通过I2C驱动PCA9557IO扩展芯片

前言 ESP32自带的IO管脚比较有限,这个时候我们就需要使用一些IO扩展芯片扩展我们的IO,今天就介绍一款使用I2C接口扩展8个IO的芯片 PCA9557 PCA 9557芯片介绍 PCA9557是一款硅CMOS电路,为SMBus和I²C总线应用提供并行输入/输出扩展。PCA9557由8位输入端口寄存器、8位输出端口寄存器和I²C总线/SMBus接口组成。具有低电流消耗和高阻抗开漏输出引脚

ESP32使用MQTT_TCP连接阿里云

ESP32-IDF中MQTT函数的介绍 esp_mqtt_client_handle_t esp_mqtt_client_init(const esp_mqtt_client_config_t *config) 函数功能:mqtt 客户端初始化 函数形参: mqtt 客户端的配置 函数返回值:正确则返回根据配置创建的 mqtt 客户端句柄;异常则返回 NULL。 其中函数形参 esp_mqtt

ESP32作为ModbusRTU主机读取从机数据

简介 ESP32 作为 ModbusRTU主机读取从机的数据,使用ESP32的串口2实现 代码改造 在 mb_master 的例程上修改 修改工程配置,将modbus模式修改成 RTU 模式,其他设置保持默认. demo工程解析 程序运行时读取以下寄存器: 保持寄存器 从寄存器0开始 读取6个寄存器保持寄存器 从寄存器10开始 读取58个寄存器,如果寄存器的内容不是0xAAAA,则将0x

ESP32使用按键配网并通过LED指示网络状态

前言 上面我们已经可以通过 ESPTOUCH 和 Airkiss 给模块配网,并且存储在 nvs 中,重启后仍然可以联网,只是这样仍然不能满足我们实际的应用,这次我们增加按键作为输入,LED作为输出,实现长按按键配网,并可以通过LED指示网络状态。 添加自己的组件 为了让程序结构更加清晰,所以我们在smart_config例程的基础上做了修改,在main文件夹里新建了main.c 、smar

ESP32使用Smartconfig和Airkiss配网方式连接无线路由器

1. ESP32的配网方式 1.1 前言 ESP32模块在实际使用时,可能需要连接不同的网络,如果将无线的 ssid 和 key 预先固定好,就回存在很大的局限性;所以我们引入了“空中配网技术”,比如smartconfig,airkiss,蓝牙辅助配网等等。 Smartconfig与Airkiss 是目前使用比较广泛的空中配网技术,smartconfig 需要专用的 app 才能实现,air

通过ESP32读取I2C温湿度传感器项目:协议与代码实例

简介 在本项目中,我们将使用ESP32开发板读取I2C温湿度传感器的数据。我们将详细介绍I2C协议,并提供图文并茂的代码实例,帮助你快速上手。 项目流程 选择硬件:ESP32开发板、I2C温湿度传感器(如DHT12、HTU21D、SHT30等)、连接线和面包板。了解I2C协议:I2C(Inter-Integrated Circuit)是一种常用的串行通信协议,适用于短距离通信。硬