当前位置: 首页 > web >正文

15.MQTT协议和云平台(ESP8266)

目录

MQTT 协议

什么是 MQTT 协议

为什么学习 MQTT

MQTT 的相关术语

​编辑MQTT 报文有哪些

MQTT 协议分为哪几部分组成

        固定报头

                哪些报文有固定报头

                固定报头有哪些组成

                剩余长度如何计算

                固定报头的长度范围

        可变报头

                哪些报文有可变报头

                可变报头有哪些组成

        有效载荷

                哪些报文有有效载荷

                有效载荷有哪些组成

                有效载荷的格式一定是 JSON 格式吗?

常见报文

        连接报文

                        连接报文方向

                        连接报文的固定报头

                        连接报文的可变报头

                        连接报文的有效载荷

        连接应答报文

                连接应答报文方向

                连接应答报文固定报头

                连接应答报文可变报头

                连接应答报文有效载荷

        发布报文

                发布报文方向

                发布报文固定报头

                发布报文可变报头

                发布报文有效载荷

        订阅报文

                订阅报文方向

                订阅报文固定报头

                订阅报文可变报头

                订阅报文有效载荷

        订阅确定报文

                订阅确定报文方向

                订阅确认报文固定报头

                订阅确认报文可变报头

                订阅确认报文有效载荷

        心跳报文

                心跳报文方向

                心跳报文作用

                心跳报文固定报头

                心跳报文可变报头

                心跳报文有效载荷

        心跳应答报文

                订阅报文方向

                心跳应答报文作用

                订阅报文固定报头

                订阅报文可变报头

                订阅报文有效载荷

Qos 的理解

Json 格式介绍

 工具链接

        十六进制和 ASCLL 码转换

        JSON 在线工具

云平台

常见的云平台

云平台创建设备

Mqtt.fx 验证平台功能

如何实现 STM32 连接华为云

        如何封装 MQTT 格式的报文

        如何使用 Paho 库实现 STM32 连接服务器


MQTT 协议

什么是 MQTT 协议

        MQTT 是基于订阅和发布的,建立在 TCP/IP 之上的应用层协议。

为什么学习 MQTT

        因为很多物联网平台的接入协议是 MQTT,阿里云,华为云,腾讯云等都支持 MQTT.

MQTT 的相关术语

MQTT 报文有哪些

MQTT 协议分为哪几部分组成

        分为三部分:固定报头(必须有)+可变报头(可能有)+有效载荷(可能有)

        固定报头

                哪些报文有固定报头

                        所有的报文都有固定报头

                固定报头有哪些组成

                        控制报文类型(第 1 个字节高 4 位)+ 报文类型的标志位(第 1 个字节低 4 位)+剩余长度

                剩余长度如何计算

                        最高位为符号位,低 7 位代表长度

                固定报头的长度范围

                        2—5 个字节

        可变报头

                哪些报文有可变报头

                可变报头有哪些组成

                注意:QoS 等于 0 的 PUBLISH 报文不能包含报文标识符

        有效载荷

                哪些报文有有效载荷

 

                有效载荷有哪些组成

                        不同报文类型,有效载荷不同,要去具体章节看。

                有效载荷的格式一定是 JSON 格式吗?

                        只有发布报文的有效载荷部分是 JSON 格式

常见报文

        连接报文

                        连接报文方向

                                客户端→服务端

                        连接报文的固定报头

                        连接报文的可变报头

连接标志占 1 个字节,按位分为不同的功能。

                        连接报文的有效载荷

        连接应答报文

                连接应答报文方向

                        服务端→客户端

                连接应答报文固定报头

                连接应答报文可变报头

                连接应答报文有效载荷

                        连接应答报文无有效载荷

        发布报文

                发布报文方向

                        可以是客户端→服务端,也可以是服务端→客户端

                发布报文固定报头

                发布报文可变报头

                        可变报头按顺序包含主题名和报文标识符。

                发布报文有效载荷

                        有效载荷包含将被发布的应用消息。数据的内容和格式是应用特定的 Json 格式

        订阅报文

                订阅报文方向

                        客户端→服务端

                订阅报文固定报头

                订阅报文可变报头

                        可变报头包含报文标识符

                订阅报文有效载荷

                        支持一次订阅多个主题

 

        订阅确定报文

                订阅确定报文方向

                        服务端→客户端

                订阅确认报文固定报头

                订阅确认报文可变报头

                        可变报头包含等待确认的 SUBSCRIBE 报文的报文标识符

                订阅确认报文有效载荷

                        有效载荷包含一个返回码清单

        心跳报文

                心跳报文方向

                        客户端→服务端

                心跳报文作用

                        在没有任何其它控制报文从客户端发给服务的时,告知服务端客户端还活着。

                        请求服务端发送 响应确认它还活着。

                        使用网络以确认网络连接没有断开。

                心跳报文固定报头

                心跳报文可变报头

                        无

                心跳报文有效载荷

                        无

        心跳应答报文

                订阅报文方向

                        客户端→服务端

                心跳应答报文作用

                        可以通过是否收到平台的心跳应答,来判断设备是否在线

                订阅报文固定报头

                订阅报文可变报头

                        无

                订阅报文有效载荷

                        无

Qos 的理解

Qos=0:如果消息丢失,是不补发。 -- 使用 0

Qos=2:消息最靠谱,需要有往复的确认。

Json 格式介绍

一个无序的键值对集合。

使用花括号“{}”包围。

每个键值对由一个键和一个值组成,键和值之间用冒号“:”分隔,键值对之间用逗号“,”分隔。

键必须是字符串,并且用双引号""包围。

值可以是字符串、数值、布尔值、数组、对象或“null”。

 工具链接

        十六进制和 ASCLL 码转换

                https://coding.tools/cn/hex-to-ascii

        JSON 在线工具

                https://www.sojson.com/

云平台

常见的云平台

        设备需要连接云平台,远程交互云平台可以是共用的,也可以是私有的。

        共用的:阿里云 华为云 腾讯云 OneNet 巴法云

        私有的:服务器上自己部署。

云平台创建设备

        登陆云平台

华为云618年中钜惠_特价云服务器秒杀_企业上云爆款优惠券-华为云成长地图_设备接入 IoTDA-华为云华为云618年中钜惠_特价云服务器秒杀_企业上云爆款优惠券-华为云

Mqtt.fx 验证平台功能

        目的:通过 Mqtt.fx 模拟客户端设备,验证交互的过程

        1. 安装,将安装路径下的图标,发送快捷方式到桌面,并打开软件

        2. 电脑连接网络

        3. 打开设置,填入设备信息

                注意:填写的时候,先 CTRL+A 全选删除,再填入

                注意:端口是 1883

        4. 点击连接,设备显示在线

        5. 填写发布消息的主题和有效载荷,并点击发布

        6. 查看是否发布成功

        7. 切换到订阅页面,填入要订阅的主题并点击订阅

        8. 下发信息到设备并确认是否可以收到

        9. 回复收到下发的应答消息,避免平台显示超时

        10. 也可以从这里下发消息

        11. 断开设备与平台的连接,避免后续与程序冲突

                软件可以模拟封装报文和平台进行交互

如何实现 STM32 连接华为云

        如何封装 MQTT 格式的报文

                自己定义大数组,根据协议挨着字节填充

                Mqtt 库(Paho 库)

                使用联网模块中,自带的 MQTT 固件

        如何使用 Paho 库实现 STM32 连接服务器

                1. 准备 mqtt 库文件

                2. 在自己的工程目录下,新建 1 个名字为 mqtt 的文件夹

                3. 将 MQTT 的源文件全部拷贝到 mqtt 文件夹下

                4. 在 keil 工程中,新建文件夹

                5. 添加.c 文件

                6. 包含.h 的路径

                7. 函数详细的介绍

                8. 库如何使用

                9. 连接报文封装

                10. 发布报文封装

                11. 订阅报文封装

                12. 心跳报文封装

http://www.xdnf.cn/news/10592.html

相关文章:

  • Codeforces Round 1028 (Div. 2)(A-D)
  • SystemVerilog—new函数的使用和误区
  • 聚类分析 | MATLAB实现基于SOM自组织特征映射聚类可视化
  • Spring AI 之检索增强生成(Retrieval Augmented Generation)
  • 一步一步配置 Ubuntu Server 的 NodeJS 服务器详细实录——3. 服务器软件更新,以及常用软件安装
  • 面向连接的运输:TCP
  • 百度蜘蛛池的作用是什么?技术@baidutopseo
  • 【算法设计与分析】实验——二维0-1背包问题(算法分析题:算法思路),独立任务最优调度问题(算法实现题:实验过程,描述,小结)
  • 黑马Java面试笔记之 微服务篇(SpringCloud)
  • centos8修改IP地址和Hostname
  • 双指针题解——反转字符串中的单词【LeetCode】
  • 从 LeetCode 到日志匹配:一行 Swift 实现规则识别
  • 前端自动化测试利器:Playwright 全面介绍
  • NVMe IP现状扫盲
  • STM32 智能小车项目 L298N 电机驱动模块
  • Mininconda3安装使用
  • Java设计模式之观察者模式详解
  • 【Godot引擎】如何使用内置的全局搜索功能提升开发效率
  • FPGA仿真中阻塞赋值(=)和非阻塞赋值(<=)区别
  • 使用pandas实现合并具有共同列的两个EXCEL表
  • React 18新特性介绍
  • leetcode hot100刷题日记——35.子集
  • DrissionPage 数据提取技巧全解析:从入门到实战
  • vulnyx loweb writeup
  • 12.2Swing中JButton简单分析
  • 05-power BI高级筛选器filter与Values人工造表
  • 【烧脑算法】不定长滑动窗口:从动态调整到精准匹配以灵活特性实现高效破题
  • 第2篇:数据库连接池原理与自定义连接池开发实践
  • 01 Ubuntu20.04下编译QEMU8.2.4,交叉编译32位ARM程序,运行ARM程序的方法
  • 基于GPT-SoVITS-v4-TTS的音频文本推理,流式生成