4G模块、WIFI模块、NBIOT模块通过AT指令连接华为云物联网服务器(MQTT协议)
MQTT协议概述
MQTT(Message Queuing Telemetry Transport)是一种轻量级的消息传输协议,它被设计用来提供一对多的消息分发和应用之间的通讯,尤其适用于远程位置的设备和高延迟或低带宽的网络。MQTT协议基于客户端-服务器架构,客户端可以订阅任意数量的主题,并可以发布消息到这些主题。服务器(通常称为MQTT Broker)则负责接受来自客户端的连接请求,并转发消息给感兴趣的客户端。

MQTT协议特点
MQTT协议具有以下主要特点:
- 轻量级:MQTT协议的实现非常轻巧,占用资源少,非常适合于资源受限的设备,如传感器、嵌入式设备等。
- 低带宽需求:MQTT协议的设计考虑到了带宽的高效利用,其报头非常小,这使得它能够在低带宽环境下有效工作。
- 可靠的消息传递:MQTT提供了三种服务质量等级(QoS),允许发布者和订阅者之间选择合适的服务质量级别。
- 支持多种传输层:虽然MQTT最初是基于TCP/IP设计的,但它也支持使用WebSockets和其他传输协议,以便更好地集成到现代Web应用中。
- 安全性:MQTT支持TLS加密通信,保证了数据的安全性,并可以通过认证机制增强安全性。
MQTT协议的基本概念
MQTT协议的核心概念包括客户端、服务器(Broker)、主题和消息。
- 客户端(Client):任何连接到Broker的应用程序都可以被称为客户端。客户端可以订阅感兴趣的主题,接收其他客户端发布的消息,也可以发布消息。
- 服务器(Broker):MQTT服务器或Broker是消息的中心节点,它接受客户端的连接请求,存储订阅关系,并将消息从发布者路由到订阅者。
- 主题(Topic):主题是一个字符串,用于标识消息的类别或目的。客户端订阅主题后,可以接收到发布到该主题的所有消息。
- 消息(Message):消息是由客户端发布的一组数据,它包含两部分:主题名和消息体。
MQTT协议的工作流程
MQTT的工作流程如下:
- 连接:客户端向Broker发送连接请求,包含客户端ID、用户名、密码等信息。
- 订阅:一旦连接成功,客户端可以订阅一个或多个主题。
- 发布:客户端可以向特定主题发布消息。
- 接收:如果客户端订阅了一个主题,则它可以接收该主题下的消息。
- 断开连接:当客户端完成所有操作后,可以断开与Broker的连接。
MQTT协议的应用场景
由于其轻量级特性和高效的消息传递能力,MQTT协议广泛应用于物联网(IoT)领域,特别是在智能家居、工业自动化、远程监控等领域。此外,随着移动互联网的发展,MQTT也被用于移动应用程序中的实时数据更新和推送服务。
【1】MQTT服务器地址信息
IP地址:117.78.5.125
端口号:1883
ClientId 64000697352830580e48df07_dev1_0_0_2023030206
Username 64000697352830580e48df07_dev1
Password a695af9883c5d0e3817bc6971beeecadf8c7c595677c461b1fe75882ed2bf449
订阅主题:$oc/devices/64000697352830580e48df07_dev1/sys/messages/down
发布主题:$oc/devices/64000697352830580e48df07_dev1/sys/properties/report
发布的消息:{"services": [{"service_id": "stm32","properties":{"DHT11_T":18,"DHT11_H":80,"MQ2":1,"water":1,"flame":1,"light":0,"LED1":0,"LED2":0,"LED3":0}}]}
【2】ESP8266-WIFI连接
要通过ESP8266模块使用AT指令来连接MQTT服务器,订阅特定的主题,并发布消息,可以按照以下步骤操作。
请注意,这里提供的AT命令序列是基于ESP8266模块支持的MQTT功能。
下面是一个示例流程:
-
初始化ESP8266
AT+RST重启模块AT测试模块是否响应AT+CIPMUX=1设置多连接模式(可选)AT+CIPRXGET=1,100设置接收数据的方式(可选)
-
设置Wi-Fi连接
AT+CWMODE=3设置为Station+AP模式(通常只需要Station模式即可,即设置为1)AT+CWJAP="yourSSID","yourPassword"连接到Wi-Fi网络
-
配置MQTT客户端
AT+CIPMQTTCFG="117.78.5.125",1883,"64000697352830580e48df07_dev1_0_0_2023030206","64000697352830580e48df07_dev1","","a695af9883c5d0e3817bc6971beeecadf8c7c595677c461b1fe75882ed2bf449",0,0,60配置MQTT客户端参数,包括服务器地址、端口、客户端ID、用户名、密码等
-
连接MQTT服务器
AT+CIPMQTTC=1连接到MQTT服务器
-
订阅主题
AT+CIPMQTTSUB=0,"$oc/devices/64000697352830580e48df07_dev1/sys/messages/down",2订阅指定的主题
-
发布消息
AT+CIPMQTTPUB=0,"$oc/devices/64000697352830580e48df07_dev1/sys/properties/report",2,0,0,"{"services": [{"service_id": "stm32","properties":{"DHT11_T":18,"DHT11_H":80,"MQ2":1,"water":1,"flame":1,"light":0,"LED1":0,"LED2":0,"LED3":0}}]}"发布消息到指定主题
-
断开MQTT连接
AT+CIPMQTTDISC=0断开与MQTT服务器的连接
-
关闭TCP/IP连接
AT+CIPCLOSE关闭当前的TCP/IP连接
注意,在使用中,需要将"yourSSID"和"yourPassword"替换为实际使用的Wi-Fi网络的SSID和密码。
【3】NBIOT-BC26
使用NBIoT-BC26模块连接MQTT服务器的过程与使用ESP8266类似,但是命令集有所不同。
以下是使用NBIoT-BC26模块通过AT指令连接MQTT服务器、订阅主题以及发布消息的示例流程:
-
初始化模块
AT检查模块是否在线ATE0关闭回显AT+CFUN=1启用射频功能AT+CGATT=1附着到网络
-
设置网络参数
AT+CNOPS=0设置网络操作模式AT+CGDCONT=1,"IP","your_apn"设置PDP上下文,使用您的运营商提供的APN
-
激活PDP上下文
AT+CGACT=1,1激活PDP上下文
-
配置MQTT客户端
AT+QMTOPEN=0,"tcp","117.78.5.125",1883打开一个TCP连接到MQTT服务器
-
建立MQTT连接
- 使用
AT+QMTCONN命令进行连接,此命令会发送MQTT CONNECT包给服务器。 AT+QMTCONN=0,"64000697352830580e48df07_dev1_0_0_2023030206",60,0,1,0,"64000697352830580e48df07_dev1","a695af9883c5d0e3817bc6971beeecadf8c7c595677c461b1fe75882ed2bf449"连接MQTT服务器,参数包括客户端ID,保持活动时间,Clean Session标志,Will标志,Will QoS,Will保留位,用户名和密码。
- 使用
-
订阅主题
AT+QMTSUB=0,2,"$oc/devices/64000697352830580e48df07_dev1/sys/messages/down"订阅主题
-
发布消息
AT+QMTPUB=0,1,"$oc/devices/64000697352830580e48df07_dev1/sys/properties/report",0,0,0,512开始发送消息{"services": [{"service_id": "stm32","properties":{"DHT11_T":18,"DHT11_H":80,"MQ2":1,"water":1,"flame":1,"light":0,"LED1":0,"LED2":0,"LED3":0}}]}发送的消息内容
-
断开MQTT连接
AT+QMTDISC=0断开MQTT连接
-
关闭TCP连接
AT+QMTCLS=0关闭TCP连接
-
去激活PDP上下文
AT+CGACT=1,0去激活PDP上下文
上述命令序列是基于NBIoT-BC26模块的MQTT功能。
【4】EC20-4G模块
对于EC20模块(通常是4G LTE模块),连接MQTT服务器、订阅主题和发布消息的AT指令会有所不同。
以下是使用EC20模块通过AT指令完成这些操作的流程:
- 初始化EC20模块
AT
检查EC20是否正常工作。
- 设置工作模式为数据模式(如果尚未设置)
AT+QCFG="nwscanmode",0,1
设置网络扫描模式为自动。
- 连接到移动网络
AT+QNWINFO
检查网络连接状态。
- 设置MQTT服务器的IP地址和端口
AT+QMTOPEN=0,"117.78.5.125",1883
连接到MQTT服务器的指定IP和端口。
- 登录MQTT服务器
AT+QMTCONN=0,"64000697352830580e48df07_dev1","a695af9883c5d0e3817bc6971beeecadf8c7c595677c461b1fe75882ed2bf449",0,0
使用客户端ID、用户名和密码连接MQTT服务器。
- 订阅MQTT主题
AT+QMTSUB=0,"$oc/devices/64000697352830580e48df07_dev1/sys/messages/down",1
订阅指定的MQTT主题。
- 发布消息到MQTT主题
AT+QMTPUB=0,"$oc/devices/64000697352830580e48df07_dev1/sys/properties/report",0,0,{"services":[{"service_id":"stm32","properties":{"DHT11_T":18,"DHT11_H":80,"MQ2":1,"water":1,"flame":1,"light":0,"LED1":0,"LED2":0,"LED3":0}}]}
向指定的MQTT主题发布消息。
- 断开MQTT连接
AT+QMTDISC=0
断开与MQTT服务器的连接。
- 关闭EC20模块(如果需要)
AT+QPOWD=1
关闭EC20模块或使其进入省电模式。
- 检查状态(可选)
AT+QMTSTAT=0
检查MQTT连接状态。
请注意:
AT+QMTOPEN、AT+QMTCONN、AT+QMTSUB和AT+QMTPUB命令中的第一个参数0是连接的会话编号。可以根据需要调整它。- 发布的消息格式要符合MQTT协议的要求,可能需要根据具体的EC20模块固件版本调整。
- 确保你已经在模块中设置了正确的APN,并成功连接到移动网络。
相关文章:
4G模块、WIFI模块、NBIOT模块通过AT指令连接华为云物联网服务器(MQTT协议)
MQTT协议概述 MQTT(Message Queuing Telemetry Transport)是一种轻量级的消息传输协议,它被设计用来提供一对多的消息分发和应用之间的通讯,尤其适用于远程位置的设备和高延迟或低带宽的网络。MQTT协议基于客户端-服务器架构&…...
spring数据校验Validation
文章目录 需要的依赖创建校验对象Validator 需要的依赖 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-validation</artifactId> </dependency>创建校验对象Validator 测试的实体类 //创建…...
Uniapp基于uni拦截器+Promise的请求函数封装
最近在学Uniapp,到封装请求的时候本来还想用axios,但是看到一些教学视频有更简单的方法, 基于uni的拦截器和Promise封装的请求函数 但是他们是用TS写的,还没学到TS,我就把JS写了,最终也是请求成功 // src/…...
【工具】使用 Jackson 实现优雅的 JSON 格式化输出
说明 在 Java 开发中,我们经常需要处理 JSON 数据。无论是从服务器端返回的数据,还是本地存储的数据,JSON 格式都因其轻量级和易于解析的特点而被广泛使用。当我们需要查看或调试 JSON 数据时,优雅、格式化的输出将大大提高我们的…...
ApacheKafka中的设计
文章目录 1、介绍1_Kafka&MQ场景2_Kafka 架构剖析3_分区&日志4_生产者&消费者组5_核心概念总结6_顺写&mmap7_Kafka的数据存储形式 2、Kafka的数据同步机制1_高水位(High Watermark)2_LEO3_高水位更新机制4_副本同步机制解析5_消息丢失问…...
.NET 自定义过滤器 - ActionFilterAttribute
这个代码片段定义了一个自定义的 ASP.NET Core 过滤器(GuardModelStateAttribute),用于在控制器动作执行之前验证模型状态(ModelState)。如果模型状态无效,则构造一个 ProblemDetails 对象来描述错误&#…...
VMware Fusion Pro 13 for Mac虚拟机软件
Mac分享吧 文章目录 效果一、下载软件二、开始安装安装完成!!! 效果 一、下载软件 下载软件 地址:www.macfxb.cn 二、开始安装 安装完成!!!...
HarmonyOS应用开发环境搭建
本文主要讲述的是HarmonyOS应用开发环境的搭建,HUAWEI DevEco Studio是基于IntelliJ IDEA Community开源版本打造,为运行在HarmonyOS系统上的应用和服务提供一站式的开发平台。具体下载链接DevEco Studio 一、下载 DevEco Studio 只需要下载对应的版本&…...
YOLOv8改进实战 | 注意力篇 | 引入ICCV2023顶会LSKNet:大选择性卷积注意力模块LSKA,助力小目标检测
YOLOv8专栏导航:点击此处跳转 前言 YOLOv8 是由 YOLOv5 的发布者 Ultralytics 发布的最新版本的 YOLO。它可用于对象检测、分割、分类任务以及大型数据集的学习,并且可以在包括 CPU 和 GPU 在内的各种硬件上执行。 YOLOv8 是一种尖端的、最先进的 (SOTA) 模型,它建立在以前…...
00Mac安装playwright
文章目录 前言一、执行以下命令安装二、安装如果报错zsh: command not found: pip三、安装浏览器驱动 前言 现在常用的三个自动化测试(或者爬虫)库,是Selenium、Puppeteer、Playwright。Playwright是未来趋势,主要学习Playwright…...
materail3 CircularProgressIndicator和LinearProgressIndicator有难看的白块和断点
看看,就是这个垃圾效果: 圆圈的进度条有断点,不连接; 横线进度条,有尾部亮色,进度处又有分割。 它的原出处在这里:https://m3.material.io/components/progress-indicators/overview࿰…...
菜鸟入门Docker
初始Docker Docker的概念 Docker的用途 DOcke的安装 Docker架构 配置Docker镜像加速器 Docker常用命令 Docker服务相关的命令。 Docker镜像相关的命令 Docker容器相关的命令 容器的数据卷 数据卷的概念和作用 配置数据卷 Docker应用部署 Docker部署mysql Docker…...
什么是单片机?为什么要学习单片机?
实现目标 1、熟悉单片机定义、特点、应用场景、发展历史等; 2、理解为什么要学习单片机?怎样学习单片机? 一、单片机是什么? 1、定义 单片机是集成在一块(单)芯片上的微型计算机。平时我们把 MCU&#x…...
电子发射与气体导电
物理电磁学练习题:电子发射与气体导电 说明: 以下题目考察对电子发射和气体导电基本概念的理解和应用。 1. 解释以下概念: (a) 热电子发射 (b) 光电效应 © 逸出功 (d) 等离子体 2. 比较并对比热电子发射和光电效应的异同。 …...
【数据库】MySQL表的Updata(更新)和Delete(删除)操作
目录 1.Update 案例1:将孙悟空同学的数学成绩变更为 80 分 案例2:将曹孟德同学的数学成绩变更为 60 分,语文成绩变更为 70 分 案例3:将总成绩倒数前三的 3 位同学的数学成绩加上 30 分 案例4:将所有同学的语文成绩…...
Unity Adressables 使用说明(六)加载(Load) Addressable Assets
【概述】Load Addressable Assets Addressables类提供了加载 Addressable assets 的方法。你可以一次加载一个资源或批量加载资源。为了识别要加载的资源,你需要向加载方法传递一个键或键列表。键可以是以下对象之一: Address:包含你分配给…...
视频监控系统布局策略:EasyCVR视频汇聚平台构建高效、全面的安全防线
随着科技的飞速发展,视频监控系统已成为现代社会安全防范的重要组成部分,广泛应用于公共场所、企业园区、住宅小区等各个领域。一个科学合理的视频监控系统布局与选型策略,不仅能够显著提升安全监控的效率和效果,还能在关键时刻提…...
Spark的Web界面
http://localhost:4040/jobs/ 在顶部导航栏上,可以点击以下选项来查看不同类型的Spark应用信息: Jobs - 此视图将列出所有已提交的作业,并提供每个作业的详细信息,如作业ID、名称、开始时间、结束时间等。Stages - 此视图可以查…...
语言中的内联
爸爸为了培养孩子的独立能力,会把任务交给孩子并观察孩子做的结果。但有的时候,妈妈看到孩子因为完不成而伤心难过时,会毫不犹豫二话不说帮孩子的事情做掉。这也是内联。 内联和宏 C/C宏可以提供内联同样的作用,没有额外函数调用…...
fail to install hcmon driver问题解决
对我搜集到的解决办法进行总结: 没有删除“C:\Windows\System32\drivers”)下的 hcmon.sys 驱动文件,删除后重启后安装修改了注册表默认下载位置,使用winR输入regedit,将 计算机\HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion这个路径下的都改为C…...
如何在看板中有效管理突发紧急任务
在看板中有效管理突发紧急任务需要:设立专门的紧急任务通道、重新调整任务优先级、保持适度的WIP(Work-in-Progress)弹性、优化任务处理流程、提高团队应对突发情况的敏捷性。其中,设立专门的紧急任务通道尤为重要,这能…...
Java多线程实现之Callable接口深度解析
Java多线程实现之Callable接口深度解析 一、Callable接口概述1.1 接口定义1.2 与Runnable接口的对比1.3 Future接口与FutureTask类 二、Callable接口的基本使用方法2.1 传统方式实现Callable接口2.2 使用Lambda表达式简化Callable实现2.3 使用FutureTask类执行Callable任务 三、…...
【论文笔记】若干矿井粉尘检测算法概述
总的来说,传统机器学习、传统机器学习与深度学习的结合、LSTM等算法所需要的数据集来源于矿井传感器测量的粉尘浓度,通过建立回归模型来预测未来矿井的粉尘浓度。传统机器学习算法性能易受数据中极端值的影响。YOLO等计算机视觉算法所需要的数据集来源于…...
令牌桶 滑动窗口->限流 分布式信号量->限并发的原理 lua脚本分析介绍
文章目录 前言限流限制并发的实际理解限流令牌桶代码实现结果分析令牌桶lua的模拟实现原理总结: 滑动窗口代码实现结果分析lua脚本原理解析 限并发分布式信号量代码实现结果分析lua脚本实现原理 双注解去实现限流 并发结果分析: 实际业务去理解体会统一注…...
select、poll、epoll 与 Reactor 模式
在高并发网络编程领域,高效处理大量连接和 I/O 事件是系统性能的关键。select、poll、epoll 作为 I/O 多路复用技术的代表,以及基于它们实现的 Reactor 模式,为开发者提供了强大的工具。本文将深入探讨这些技术的底层原理、优缺点。 一、I…...
现有的 Redis 分布式锁库(如 Redisson)提供了哪些便利?
现有的 Redis 分布式锁库(如 Redisson)相比于开发者自己基于 Redis 命令(如 SETNX, EXPIRE, DEL)手动实现分布式锁,提供了巨大的便利性和健壮性。主要体现在以下几个方面: 原子性保证 (Atomicity)ÿ…...
C++课设:简易日历程序(支持传统节假日 + 二十四节气 + 个人纪念日管理)
名人说:路漫漫其修远兮,吾将上下而求索。—— 屈原《离骚》 创作者:Code_流苏(CSDN)(一个喜欢古诗词和编程的Coder😊) 专栏介绍:《编程项目实战》 目录 一、为什么要开发一个日历程序?1. 深入理解时间算法2. 练习面向对象设计3. 学习数据结构应用二、核心算法深度解析…...
【JavaSE】多线程基础学习笔记
多线程基础 -线程相关概念 程序(Program) 是为完成特定任务、用某种语言编写的一组指令的集合简单的说:就是我们写的代码 进程 进程是指运行中的程序,比如我们使用QQ,就启动了一个进程,操作系统就会为该进程分配内存…...
Unity UGUI Button事件流程
场景结构 测试代码 public class TestBtn : MonoBehaviour {void Start(){var btn GetComponent<Button>();btn.onClick.AddListener(OnClick);}private void OnClick(){Debug.Log("666");}}当添加事件时 // 实例化一个ButtonClickedEvent的事件 [Formerl…...
Vue 模板语句的数据来源
🧩 Vue 模板语句的数据来源:全方位解析 Vue 模板(<template> 部分)中的表达式、指令绑定(如 v-bind, v-on)和插值({{ }})都在一个特定的作用域内求值。这个作用域由当前 组件…...
