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

TCP通信与MQTT协议的关系

1. MQTT 处理核心(Mqtt_Pro

void Mqtt_Pro(void) {

    MQTT_Init();       // 初始化MQTT协议栈(连接参数、缓冲区等)

    MQTT_SendPro();    // 处理MQTT发送(封装消息,调用TCP发送)

    MQTT_RecPro();     // 处理MQTT接收(解析TCP接收的数据,提取MQTT消息)

}

作用:作为 MQTT 协议的总控函数,协调初始化、发送和接收流程,与 TCP 层通过 MQTT_SendPro 和 MQTT_RecPro 交互。

2.TCP 收发处理(M26_PROCESS_TCP 状态)

case M26_PROCESS_TCP:

    drv_M26_TcpSend();  // TCP发送:将MQTT封装的数据包通过模块发送

    drv_M26_TcpRec();   // TCP接收:读取模块接收的TCP数据,供MQTT解析

    // (状态检查与重连逻辑,确保TCP连接稳定)

break;

TCP 发送(drv_M26_TcpSend):

输入:MQTT 层生成的数据包(如 PUBLISH 消息,包含主题、载荷)。

处理:通过 AT 指令(如 AT+CIPSEND)将数据发送到 TCP 连接,实现网络层传输。

示例:MQTT 发送 PUBLISH 消息时,调用此函数将字节流发送到服务器。

TCP 接收(drv_M26_TcpRec):

输出:填充 MqttState.Recbuf(MQTT 接收缓冲区),设置 NewRecDataFlag(新数据标志)。

处理:过滤 AT 指令响应头(如 +QIURC: "recv"),提取纯 MQTT 数据包(如 CONNACK、PUBACK),供 MQTT_RecPro 解析。

3. 协议分层交互

MQTT → TCP(发送):

封装:MQTT_SendPro 按 MQTT 协议构建消息(如 CONNECT 的固定头、可变头、载荷)。

传输:调用 drv_M26_TcpSend,将 MQTT 数据包作为 TCP 字节流发送(底层通过模块的 TCP 通道)。

TCP → MQTT(接收):

接收:drv_M26_TcpRec 读取模块数据(TCP 字节流),存入 MqttState.Recbuf。

解析:MQTT_RecPro 按 MQTT 协议解析(提取消息类型、剩余长度、载荷等),处理业务逻辑(如连接确认、参数下发)。

4. 代码协作示例(PUBLISH 流程)

MQTT 封装:

MQTT_SendPro() 构建 PUBLISH 消息(主题 sensor/temp,载荷 25.5),格式为:

0x30(固定头,PUBLISH,QoS0) + 剩余长度(计算主题 + 载荷长度) + 主题长度(2 字节) + 主题 + 载荷。

TCP 发送:

drv_M26_TcpSend() 将上述字节流通过 AT 指令发送到 MQTT 服务器的 TCP 连接(如端口 1883)。

TCP 接收(服务器响应 PUBACK,QoS1 时):

drv_M26_TcpRec() 接收服务器返回的 TCP 数据(PUBACK 消息),存入 MqttState.Recbuf。

MQTT 解析:

MQTT_RecPro() 解析 PUBACK,确认消息已接收(更新状态机,标记发送成功)。

5. 总结

TCP 是传输载体:提供可靠的字节流传输,屏蔽网络硬件细节(如 GPRS 模块的 AT 指令交互)。

MQTT 是应用协议:在 TCP 之上定义消息格式(主题、QoS)和交互规则(如 CONNECT/PUBLISH/PUBACK),实现物联网设备的高效通信。

代码协作:通过函数调用链(MQTT 封装→TCP 发送,TCP 接收→MQTT 解析)实现两层协议的协同,确保数据从应用层(MQTT)到网络层(TCP)的无缝传输,适用于嵌入式设备的远程通信(如传感器数据上报、远程配置下发)。

这种分层设计使代码模块化,便于维护(如更换 TCP 模块时,只需修改 drv_M26_Tcp* 函数,不影响 MQTT 逻辑),是物联网设备网络通信的典型实现。

相关文章:

TCP通信与MQTT协议的关系

1. MQTT 处理核心(Mqtt_Pro) void Mqtt_Pro(void) { MQTT_Init(); // 初始化MQTT协议栈(连接参数、缓冲区等) MQTT_SendPro(); // 处理MQTT发送(封装消息,调用TCP发送) MQTT_RecPro();…...

AWS创建github相关的角色

创建github-actions角色 {"Version": "2012-10-17","Statement": [{"Effect": "Allow","Principal": {"Federated": "arn:aws:iam::11111111:oidc-provider/token.actions.githubusercontent.com…...

数据编辑器所具备的数据整理功能​

在企业的数据处理过程中,数据清洗与整理是至关重要的环节,而数据编辑器在这方面发挥着关键作用。在一份包含客户信息的数据表中,常常会出现缺失值的情况。比如客户的年龄、联系方式等字段可能因为各种原因没有被记录,这就形成了缺…...

Unity网络开发实践项目

摘要:该网络通信系统基于Unity实现,包含以下几个核心模块: 协议配置:通过XML定义枚举(如玩家/英雄类型)、数据结构(如PlayerData)及消息协议(如PlayerMsg)&a…...

Jetson Orin Nano - SONY imx415 camera驱动开发

目录 前言: 调试准备工作: 修改内核默认打印等级 一、imx415驱动开发 1、硬件接线 2、设备树修改 2.1 创建 tegra234-p3767-camera-p3768-imx415-C-4lane.dtsi 文件 2.2 tegra234-p3767-camera-p3768-imx415-C-4lane.dtsi 添加到设备树 2.3 编译设备树 3、imx415驱动…...

word为跨页表格新加表头和表名

问题: 当表格过长需要跨页时(如下图所示),某些格式要求需要转页接排加续表。 方法一: 1、选中表格,在“表布局”区域点开“自动调整”,选择“固定列宽”(防止后续拆分表格后表格变…...

测试用例篇章

本节概要: 测试⽤例的概念 设计测试⽤例的万能思路 设计测试⽤例的⽅法 一、测试用例 1.1 概念 什么是测试用例? 测试⽤例(Test Case)是为了实施测试⽽向被测试的系统提供的⼀组集合,这组集合包含:测…...

2025年北京市职工职业技能大赛第六届信息通信行业网络安全技能大赛复赛CTF部分WP-哥斯拉流量分析

2025年北京市职工职业技能大赛第六届信息通信行业网络安全技能大赛复赛CTF部分WP-哥斯拉流量分析 一、流量分析 题目没有任何提示,附件gzl.pcap 解题哥斯拉流量300多KB包很多,没啥经验只能挨个看回来之后又狠狠得撸了一把哥斯拉流量分析我这里用的是哥斯拉4.0.1 测试链接…...

Django ToDoWeb 服务

我们的任务是使用 Django 创建一个简单的 ToDo 应用程序,允许用户添加、查看和删除笔记。我们将通过设置 Django 项目、创建 Todo 模型、设计表单和视图来处理用户输入以及创建模板来显示任务来构建它。我们将逐步实现核心功能以有效地管理 todo 项。 Django ToDoWeb 服务 …...

【软件】在 macOS 上安装 Postman

在 macOS 上安装 Postman 是一个简单的过程,以下是详细的步骤: 一、下载 Postman • 访问 Postman 官方网站: 打开浏览器,访问Postman 官方下载页面。 • 下载安装包: 页面会自动识别你的系统,点击“Dow…...

各种数据库,行式、列式、文档型、KV、时序、向量、图究竟怎么选?

慕然回首,发现这些年来涌现出了许多类型的数据库,今天抽空简单回顾一下,以便于后面用到时能快速选择。 1. 关系型数据库(行式) 关系型数据库(RDBMS),我们常说的数据库就是指的关系型数据库。 它的全称是关…...

全志科技携飞凌嵌入式T527核心板亮相OpenHarmony开发者大会

近日,OpenHarmony开发者大会2025(OHDC.2025,以下简称“大会”)在深圳举办,全志科技作为OpenHarmony生态的重要合作伙伴受邀参会,并进行了《全志科技行业智能芯片OpenHarmony方案适配与认证经验分享》的主题…...

AI+微信小程序:智能客服、个性化推荐等场景的落地实践

在移动互联网流量红利逐渐见顶的今天,微信小程序凭借“即用即走”的轻量化特性,已成为企业连接用户的核心阵地。而AI技术的融入,正让小程序从工具型应用进化为“懂用户、会思考”的智能服务终端。本文将结合实际案例,解析AI在微信小程序中的两大核心场景——智能客服与个性…...

事件驱动架构入门

主要参考资料: 软件架构-事件驱动架构: https://blog.csdn.net/liuxinghao/article/details/113923639 目录 简介事件队列事件日志事件收集器响应队列读事件 vs. 写事件 简介 事件驱动架构是一种系统或组件之间通过发送事件和响应事件彼此交互的架构风格。当某个事…...

基于Web的濒危野生动物保护信息管理系统设计(源码+定制+开发)濒危野生动物监测与保护平台开发 面向公众参与的野生动物保护与预警信息系统

博主介绍: ✌我是阿龙,一名专注于Java技术领域的程序员,全网拥有10W粉丝。作为CSDN特邀作者、博客专家、新星计划导师,我在计算机毕业设计开发方面积累了丰富的经验。同时,我也是掘金、华为云、阿里云、InfoQ等平台…...

索引的选择与Change Buffer

1. 索引选择与Change Buffer 问题引出:普通索引 vs 唯一索引 ——如何选择? 在实际业务中,如果一个字段的值天然具有唯一性(如身份证号),并且业务代码已确保无重复写入,那就存在两种选择&…...

leetcode hot100刷题日记——30.两数之和

解答: 方法一:迭代 迭代大致过程就是: 算两条链表的当前位的和,加上上一位留下来的进位,就是新链表的当前位的数字。计算当前的进位。 这样,我们迭代需要的东西是:链表1,链表2&…...

Fastapi 学习使用

Fastapi 学习使用 Fastapi 可以用来快速搭建 Web 应用来进行接口的搭建。 参考文章:https://blog.csdn.net/liudadaxuexi/article/details/141062582 参考文章:https://blog.csdn.net/jcgeneral/article/details/146505880 参考文章:http…...

Ollama:本地大模型推理与应用的创新平台

引言 随着大语言模型(LLM)和生成式AI的快速发展,越来越多的开发者和企业希望在本地或私有环境中运行AI模型,以满足数据隐私、安全、低延迟和定制化的需求。Ollama 正是在这一背景下诞生的创新平台。它让大模型的本地部署、推理和集成变得前所未有的简单和高效。本文将系统…...

rtpinsertsound:语音注入攻击!全参数详细教程!Kali Linux教程!

简介 2006年8月至9月期间,我们创建了一个用于将音频插入指定音频(即RTP)流的工具。该工具名为rtpinsertsound。 该工具已在Linux Red Hat Fedora Core 4平台(奔腾IV,2.5 GHz)上进行了测试,但预…...

django项目开启debug页面操作有数据操作记录

在项目的主文件中setting中配置 """ Django settings for ProjectPrictice project.Generated by django-admin startproject using Django 3.0.1.For more information on this file, see https://docs.djangoproject.com/en/3.0/topics/settings/For the ful…...

【Vim】高效编辑技巧全解析

本篇将从光标移动技巧、常用快捷操作、组合命令运用等方面逐步讲解 vim 的使用。 📘 高效光标移动技巧 在 Vim 中,光标移动是编辑效率的核心之一。以下是一些必须掌握的移动命令,按使用频率和实用程度分类整理: 🔹 基…...

基于 Node.js 的 Express 服务是什么?

Express 是基于 ‌Node.js‌ 的一个轻量级、灵活的 Web 应用框架,用于快速构建 ‌HTTP 服务‌(如网站、API 接口等),以下是详细解析: ‌一、Express 的核心作用‌ ‌简化 Node.js 原生开发‌ Node.js 原生 http 模块虽…...

【C++】入门基础知识(1.5w字详解)

本篇博客给大家带来的是一些C基础知识!包含函数栈帧的详解! 🐟🐟文章专栏:C 🚀🚀若有问题评论区下讨论,我会及时回答 ❤❤欢迎大家点赞、收藏、分享! 今日思想&#xff1…...

Excel数据脱敏利器:自动保留格式的智能脱敏脚本

源码: import openpyxl import re import random import string from openpyxl.utils import get_column_letter from copy import copy from tqdm import tqdmdef mask_data(value):"""脱敏处理数据"""if isinstance(value, str):i…...

Photoshop2025(PS2025)软件及安装教程

在数字图像编辑领域,Adobe Photoshop 一直是无可争议的王者。如今,Photoshop 2025 重磅登场,再次为我们带来了惊喜与变革,进一步巩固了它在行业中的领先地位。 Photoshop 2025 在人工智能方面的升级令人瞩目。其全新的 “Magic Se…...

AI赋能开源:如何借助MCP快速解锁开源项目并提交你的首个PR

引子 很多同学都梦想为开源项目贡献力量,然而现实往往是——面对庞大复杂的项目,从入门到提交第一个有实质性代码的PR,时间跨度可能长达数年。传统路径通常是先从文档贡献开始,逐步深入理解项目架构,最终才能进行代码…...

计算机视觉---GT(ground truth)

在计算机视觉(Computer Vision, CV)领域,Ground Truth(GT,中文常译为“真值”或“ ground truth”) 是指关于数据的真实标签或客观事实,是模型训练、评估和验证的基准。它是连接算法与现实世界的…...

SQL进阶之旅 Day 9:高级索引策略

【SQL进阶之旅 Day 9】高级索引策略 在SQL查询性能调优中,索引是最为关键的优化手段之一。Day 3我们已经介绍了基础索引类型,今天我们将深入探讨高级索引策略,包括覆盖索引、索引选择性分析、强制使用索引等实用技巧。这些技术能显著提升复杂…...

R 语言科研绘图第 52 期 --- 网络图-分组

在发表科研论文的过程中,科研绘图是必不可少的,一张好看的图形会是文章很大的加分项。 为了便于使用,本系列文章介绍的所有绘图都已收录到了 sciRplot 项目中,获取方式: R 语言科研绘图模板 --- sciRplothttps://mp.…...