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的工作流程如下:

  1. 连接:客户端向Broker发送连接请求,包含客户端ID、用户名、密码等信息。
  2. 订阅:一旦连接成功,客户端可以订阅一个或多个主题。
  3. 发布:客户端可以向特定主题发布消息。
  4. 接收:如果客户端订阅了一个主题,则它可以接收该主题下的消息。
  5. 断开连接:当客户端完成所有操作后,可以断开与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功能。

下面是一个示例流程:

  1. 初始化ESP8266

    • AT+RST 重启模块
    • AT 测试模块是否响应
    • AT+CIPMUX=1 设置多连接模式(可选)
    • AT+CIPRXGET=1,100 设置接收数据的方式(可选)
  2. 设置Wi-Fi连接

    • AT+CWMODE=3 设置为Station+AP模式(通常只需要Station模式即可,即设置为1)
    • AT+CWJAP="yourSSID","yourPassword" 连接到Wi-Fi网络
  3. 配置MQTT客户端

    • AT+CIPMQTTCFG="117.78.5.125",1883,"64000697352830580e48df07_dev1_0_0_2023030206","64000697352830580e48df07_dev1","","a695af9883c5d0e3817bc6971beeecadf8c7c595677c461b1fe75882ed2bf449",0,0,60 配置MQTT客户端参数,包括服务器地址、端口、客户端ID、用户名、密码等
  4. 连接MQTT服务器

    • AT+CIPMQTTC=1 连接到MQTT服务器
  5. 订阅主题

    • AT+CIPMQTTSUB=0,"$oc/devices/64000697352830580e48df07_dev1/sys/messages/down",2 订阅指定的主题
  6. 发布消息

    • 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}}]}" 发布消息到指定主题
  7. 断开MQTT连接

    • AT+CIPMQTTDISC=0 断开与MQTT服务器的连接
  8. 关闭TCP/IP连接

    • AT+CIPCLOSE 关闭当前的TCP/IP连接

注意,在使用中,需要将"yourSSID"和"yourPassword"替换为实际使用的Wi-Fi网络的SSID和密码。

【3】NBIOT-BC26

使用NBIoT-BC26模块连接MQTT服务器的过程与使用ESP8266类似,但是命令集有所不同。

以下是使用NBIoT-BC26模块通过AT指令连接MQTT服务器、订阅主题以及发布消息的示例流程:

  1. 初始化模块

    • AT 检查模块是否在线
    • ATE0 关闭回显
    • AT+CFUN=1 启用射频功能
    • AT+CGATT=1 附着到网络
  2. 设置网络参数

    • AT+CNOPS=0 设置网络操作模式
    • AT+CGDCONT=1,"IP","your_apn" 设置PDP上下文,使用您的运营商提供的APN
  3. 激活PDP上下文

    • AT+CGACT=1,1 激活PDP上下文
  4. 配置MQTT客户端

    • AT+QMTOPEN=0,"tcp","117.78.5.125",1883 打开一个TCP连接到MQTT服务器
  5. 建立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保留位,用户名和密码。
  6. 订阅主题

    • AT+QMTSUB=0,2,"$oc/devices/64000697352830580e48df07_dev1/sys/messages/down" 订阅主题
  7. 发布消息

    • 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}}]} 发送的消息内容
  8. 断开MQTT连接

    • AT+QMTDISC=0 断开MQTT连接
  9. 关闭TCP连接

    • AT+QMTCLS=0 关闭TCP连接
  10. 去激活PDP上下文

    • AT+CGACT=1,0 去激活PDP上下文

上述命令序列是基于NBIoT-BC26模块的MQTT功能。

【4】EC20-4G模块

对于EC20模块(通常是4G LTE模块),连接MQTT服务器、订阅主题和发布消息的AT指令会有所不同。

以下是使用EC20模块通过AT指令完成这些操作的流程:

  1. 初始化EC20模块
AT

检查EC20是否正常工作。

  1. 设置工作模式为数据模式(如果尚未设置)
AT+QCFG="nwscanmode",0,1

设置网络扫描模式为自动。

  1. 连接到移动网络
AT+QNWINFO

检查网络连接状态。

  1. 设置MQTT服务器的IP地址和端口
AT+QMTOPEN=0,"117.78.5.125",1883

连接到MQTT服务器的指定IP和端口。

  1. 登录MQTT服务器
AT+QMTCONN=0,"64000697352830580e48df07_dev1","a695af9883c5d0e3817bc6971beeecadf8c7c595677c461b1fe75882ed2bf449",0,0

使用客户端ID、用户名和密码连接MQTT服务器。

  1. 订阅MQTT主题
AT+QMTSUB=0,"$oc/devices/64000697352830580e48df07_dev1/sys/messages/down",1

订阅指定的MQTT主题。

  1. 发布消息到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主题发布消息。

  1. 断开MQTT连接
AT+QMTDISC=0

断开与MQTT服务器的连接。

  1. 关闭EC20模块(如果需要)
AT+QPOWD=1

关闭EC20模块或使其进入省电模式。

  1. 检查状态(可选)
AT+QMTSTAT=0

检查MQTT连接状态。

请注意:

  • AT+QMTOPENAT+QMTCONNAT+QMTSUBAT+QMTPUB 命令中的第一个参数 0 是连接的会话编号。可以根据需要调整它。
  • 发布的消息格式要符合MQTT协议的要求,可能需要根据具体的EC20模块固件版本调整。
  • 确保你已经在模块中设置了正确的APN,并成功连接到移动网络。

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

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

相关文章

iOS——方法交换Method Swizzing

什么是方法交换 Method Swizzing是发生在运行时的,主要用于在运行时将两个Method进行交换,我们可以将Method Swizzling代码写到任何地方,但是只有在这段Method Swilzzling代码执行完毕之后互换才起作用。 利用Objective-C Runtimee的动态绑定…

网络编程学习:TCP/IP协议

TCP/IP协议简介 TCP/IP协议包含了一系列的协议,也叫TCP/IP协议族(TCP/IP Protocol Suite,或TCP/IP Protocols),简称TCP/IP。 分层结构 为了能够实现不同类型的计算机和不同类型的操作系统之间进行通信,引…

Zookeeper基本原理

1.什么是Zookeeper? Zookeeper是一个开源的分布式协调服务器框架,由Apache软件基金会开发,专为分布式系统设计。它主要用于在分布式环境中管理和协调多个节点之间的配置信息、状态数据和元数据。 Zookeeper采用了观察者模式的设计理念,其核心…

在vscode中用virtual env的方法

vscode是非常常用的软件开发工具。我们也非常了解如何使用vscode开发python的基本方法。当然,vscode可以开发基本所有编程语言。真的是又大又全又好用。 那么为什么要在vscode里面使用virtual env呢?因为python开发会遇到包管理的问题。而virtual env可…

Flutter 小技巧之 Row/Column 即将支持 Flex.spacing

事实上这是一个相当久远的话题,如果对于前因后果不管兴趣,直接看最后就行。 这个需求最早提及应该是 2018 年初在 #16957 被人提起,因为在 Flutter 上 Wrap 有 runSpacing 和 spacing 用于配置垂直和水平间距,而为什么 Colum 和 …

C++ | Leetcode C++题解之第392题判断子序列

题目&#xff1a; 题解&#xff1a; class Solution { public:bool isSubsequence(string s, string t) {int n s.size(), m t.size();vector<vector<int> > f(m 1, vector<int>(26, 0));for (int i 0; i < 26; i) {f[m][i] m;}for (int i m - 1; …

C语言第一周课

目录 1.程序设计的基本概念是什么?C语言是什么?算法是什么? 2.开发环境 3.第一个C语言程序 4.搭建VC6编译环境 5.实际操作,完成第一个C语言程序 6.体验在线编译环境 1.程序设计的基本概念是什么?C语言是什么?算法是什么? C语言是一种较早的程序设计语言&#xff0c…

Linux第十一节课 - 进程

一个程序从磁盘以文件的形式加载到内存之后&#xff0c;已经变成了进程&#xff01; 引入管理者和被管理者 1、管理者和被管理者不需要见面&#xff01;&#xff08;例如学生和校长&#xff01;&#xff09; 2、管理者在不见被管理者的情况下&#xff0c;如何做好管理呢&…

Windows下Python和PyCharm的应用(二)__快捷键方式的设定

前言 程序写久了&#xff0c;难免会形成自己的编程习惯。比如对某一套快捷键的使用&#xff0c;已经形成了肌肉记忆。 为了方便快捷键的使用&#xff0c;可以在PyCharm中设置自己喜欢的快捷键。 我比较习惯于微软Visual Studio的快捷键设置。&#xff08;因为早些年VC开发用的…

计算机网络与Internet应用

一、计算机网络 1.计算机网络的定义 网络定义&#xff1a;计算机网络是指将地理位置不同的具有独立功能的多台计算机及其外部设备&#xff0c;通过通信线路连接起来&#xff0c;在网络操作系统&#xff0c;网络管理软件及网络通信协议的管理和协调下&#xff0c;实现资源共享…

数据仓库技术选型方案文档

关联博客&#xff1a; 数据仓库技术选型方案文档 Flink CDC MySQL数据同步到Doris表同步配置生成工具类 新版报表系统&#xff08;明细报表、看板、数据大屏&#xff09;方案&介绍 文章目录 数据仓库技术选型背景现状现状架构目标架构业务反馈&痛点问题&#xff1a;原因…

QT定时器QObiect/QTimer

QT定时器 一、QObiect: startTimer ----------- killTimer 电子相册&#xff0c;利用定时器轮播图片 #include "widget.h" #include "ui_widget.h"Widget::Widget(QWidget *parent) :QWidget(parent),ui(new Ui::Widget) {ui->setupUi(this);picID …

【C++11】类的新功能

【C11】类的新功能 文章目录 【C11】类的新功能一、移动构造和移动赋值的特点二、类成员变量初始化三、强制生成默认函数的关键字default四、禁止生成默认函数的关键字delete五、继承和多态中的fifinal与override关键字 一、移动构造和移动赋值的特点 ​ 默认成员函数&#xf…

对一个已经运行的LabVIEW VI进行控制

要对一个已经运行的LabVIEW VI进行控制&#xff0c;可以采用多种方法&#xff0c;这取决于你想要控制的内容以及具体的应用场景。以下是几种常见的实现方式&#xff1a; 1. 使用全局变量或功能全局变量&#xff08;FGV&#xff09; 方法: 你可以创建全局变量或功能全局变量&am…

枚举和联合体

1.枚举类型 1枚举类型的声明 枚举顾名思义就是一一列举。 把可能的取值一一列举。 比如我们现实生活中&#xff1a; 一周的星期一到星期日是有限的7天&#xff0c;可以一一列举 性别有&#xff1a;男、女、保密&#xff0c;也可以一一列举 月份有12个月&#xff0c;也可以一一…

浙大数据结构:02-线性结构4 Pop Sequence

这道题我们采用数组来模拟堆栈和队列。 简单说一下大致思路&#xff0c;我们用栈来存1234.....&#xff0c;队列来存输入的一组数据&#xff0c;栈与队列进行匹配&#xff0c;相同就pop 机翻 1、条件准备 stk是栈&#xff0c;que是队列。 tt指向的是栈中下标&#xff0c;fr…

自然语言处理系列六十三》神经网络算法》LSTM长短期记忆神经网络算法

注&#xff1a;此文章内容均节选自充电了么创始人&#xff0c;CEO兼CTO陈敬雷老师的新书《自然语言处理原理与实战》&#xff08;人工智能科学与技术丛书&#xff09;【陈敬雷编著】【清华大学出版社】 文章目录 自然语言处理系列六十三神经网络算法》LSTM长短期记忆神经网络算…

fail to install hcmon driver问题解决

对我搜集到的解决办法进行总结: 没有删除“C:\Windows\System32\drivers”&#xff09;下的 hcmon.sys 驱动文件,删除后重启后安装修改了注册表默认下载位置,使用winR输入regedit,将 计算机\HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion这个路径下的都改为C…

PyTorch 卷积层详解

PyTorch 卷积层详解 卷积层&#xff08;Convolutional Layers&#xff09;是深度学习中用于提取输入数据特征的重要组件&#xff0c;特别适用于处理图像和序列数据。PyTorch 提供了多种卷积层&#xff0c;分别适用于不同维度的数据。本文将详细介绍这些卷积层&#xff0c;特别…

Java项目: 基于SpringBoot+mysql+maven房屋租赁系统(含源码+数据库+毕业论文)

一、项目简介 本项目是一套基于SpringBootmybatismaven房屋租赁系统 包含&#xff1a;项目源码、数据库脚本等&#xff0c;该项目附带全部源码可作为毕设使用。 项目都经过严格调试&#xff0c;eclipse或者idea 确保可以运行&#xff01; 该系统功能完善、界面美观、操作简单、…