【IOT开发】MQTT知识(总结版)

举报
ReCclay 发表于 2022/02/22 01:47:19 2022/02/22
【摘要】 消息等级QOS 一般呢,订阅设置为0,就可以了,那就说一下这个消息等级有什么用吧! 咱发送数据的时候也会携带一个消息等级: 假设是0 那么这条消息是不是真的发给MQTT服务器(Broker)了,就不...

消息等级QOS

一般呢,订阅设置为0,就可以了,那就说一下这个消息等级有什么用吧!

咱发送数据的时候也会携带一个消息等级:

假设是0 那么这条消息是不是真的发给MQTT服务器(Broker)了,就不知道了,如果设备多个,还真不敢保证真的发给服务器了。

假设是1 那么一个客户端发送消息以后呢,服务器一看消息等级是1,那么就会回给那个发送消息的客户端一个应答消息。客户端发送完消息以后其实内部会启动一个超时操作,如果多少时间内没有回复,那么它会再发一次

假设是2 这个呢就是消息一定要到达MQTT服务器.这个很苛刻,也比较占用内存

订阅/发布消息

一般包括以下内容

  • 发布/订阅的主题
  • 消息
  • 回传标志(默认0)
  • 消息等级【见1】
  • 是否需要服务器保留消息【下面同医嘱一起讲】
  • 消息的标识(一般用不到,默认1就可以)

遗嘱(will)

假设我手机和一个设备订阅主题和发布主题对应,我就能和这个设备通信了但是,我怎么知道这个设备掉线了呢?当然完全可以自己发信息给那个设备,如果不回复,就说明掉线了。

但是呢,MQTT服务器提供了一种方式假设我设置好设备的遗嘱消息是 offline 遗嘱发布的主题是 aaaaa,如果设备掉线,服务器就会给订阅了aaaaa的客户端发送 offline。

【注】:服务器如果在你设置的心跳包时间的1.5倍时间内,收不到心跳包就认为你掉线了。

心跳包

MQTT规定的,发送完连接协议之后,发送的心跳包数据是C0 00

发送时间:连接协议里面的心跳包时间(你可以提前发),然后服务器回复 D0 00

三元组

三元组是 product key/ device name / device secret


MQTT的C语言库一点记录

  • 官方库里面判断返回的数据

使用MQTTPacket_read(数据解析完存到的数组,数组长度,提取数据函数),最主要的是这个 提取数据函数transport_getdata,这个函数的格式不能变,官方规定的就是这个格式。
在这里插入图片描述

其中,Usart1ReadBuff为网络模块接收到的数据储存的地方,根据实际需要修改。

文章来源: recclay.blog.csdn.net,作者:ReCclay,版权归原作者所有,如需转载,请联系作者。

原文链接:recclay.blog.csdn.net/article/details/104024625

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。