MQTT协议以及库函数说明

内容简介:之前我们写了一篇ESP8266AT指令的说明文档,在客户端连接上服务器之后,接下来便是网络通信。为此我们又写了这一片MQTT协议的说明文档,更加深层次的讲述了通信的原理。此文档只是我们在调试过程中的一些小结和经验,所以并不是规范的设计手册。如果想要使用了解MQTT协议,一定是要仔细看到他的手册的。如果发现文中有写错的地方也希望指出,我们会改正,并且在我们的公众号“眼湖云”中更新。

图片没法贴上来,所以需要结合手册来看。

 

我们的网络通信通过三部分,网关(ESP8266),MQTT协议,服务器。

在通过ESP8266连接上服务器之后,下面就要通过MQTT进行通信。MQTT协议最新的版本是MQTT-3.1.1-CN,这个可以上网去下载,不过我们建议将MQTT-3.1protocol-Specific中文版也下载下来,两份一起看,比较详细。还有MQTT的源码,网上也有的下载。

简单点来说,MQTT协议就是将你要发送的内容按照它的规定组成一串字符串,然后发送出去,至于服务器接收到了怎么解析就不是我们玩嵌入式的人管的了。

MQTT协议一共有14个消息类型:

1.客户端请求连接到服务器; 2.连接确认; 3.发布消息;4.发布确认;5.发布信息收到;6.发布信息分发;7.发布完成 ;8.客户端订阅请求;9.订阅确认;10.客户端取消订阅请求;
11.取消订阅确认;12.ping请求;13.ping响应;14.客户端正在断开连接;

而他们的发送格式都是一样的,一共有三部分组成:

固定报头,可变报头,有效载体

具体的每一种的意思可以查看手册,我们这里只用到其中的三种,分别是1,3,8。接下来我们讲讲这三种消息类型。

一、客户端请求连接服务器。

客户端连接到服务器之后,客户端发送给服务器的第一个报文(第一个字符串,也就是消息类型)必须是第一个消息类型,也就是上面列出来的第一个消息类型,客户端请求连接到服务器(connect)。

那么我们该送什么样的字符串呢,其实手册上已经列了出来怎么发送,它的格式都是定死的。

我们给出一个字符串,也就是经过MQTT协议后将要发出去的字符串:

0x10  0x2d  0x00  0x04  ‘M’  ‘Q’  ‘T’  ‘T’  0x04  0xc2  0x0b  0xb8  0x00  0x10  

‘4’  ‘0’  ‘F’  ‘’0  ‘6’  ‘0’  ‘0’  ‘0’  ‘5’  ‘0’  ‘8’  ‘0’  ‘4’  ‘0’  ‘5’  ‘0’  0X00  0X05

‘a’  ‘d’  ‘m’  ‘i’  ‘n’   0x00   0x08  ‘p’   ‘a’   ‘s’   ‘s’   ‘w’   ‘o’   ‘r’   ‘d’ 

   一共是47个字符。

 

1.开头的两个字符。0x10  0x2d   这两个字节就是固定报头。固定报头只有两个字节,每个字节八位。每一位都有它代表的意思。

0x10 (0001 0000):  低四位是保留位,默认都是0。

                             高四位则是代表这个字符串是第一种消息类型,括号里的1就是它的号码代,手册里有详细的表格。

0x2d (0010 1011):  这个字节是剩余长度,也就是这个字节之后,多有字节的个数(可变报 头+有效载体),我们这里一共47个字符,减去这两个,就是45个,十 六进制就是0x2d

 

2.接下来是可变报头,可变报头由四个部分组成:协议名,协议级别,连接标志和保持连接

 

协议名有六个字节,也就是接下来的0x00  0x04  ‘M’  ‘Q’  ‘T’  ‘T’  

    0x00  0x04 这是一组,代表后面的协议名的长度,我们这里协议名便是MQTT,长度4

协议级别一个字节 0x04 。这个在手册中给出了这个固定的数据,也就是这个协议的版本的代表。

连接标志一个字节:0xc2   (1100 0010)

每一位的意思手册上有。

Clean Session:服务器在断开连接后,是不是要保存客户端的信息,我们保存,设为0。

也就是如果我们的ESP8266在发消息时突然断开了,接着又连了上来,那么服   务器接着断开时的状态接续发送。

Willflag:这里我们不用这一位,这一位不设置,后面的will QOS 和 will retain都不用设置。

Username 和 password 就是进入你的服务器的账号和密码了。我们这里用到了,所以这两位都是1.

 

最后是保持连接,两个字节,0x0b  0xb8。 这个讲起来比较多,我们这里简单解释一下,详细的需要自己看手册,专门有讲解。保持连接也就是心跳,即多长时间检查一下是否还发消息和是否保持着连接,我们这两个字节就是设置的这个时间。

 

3.接下来就是有效载体,包括客户端标识符,遗嘱主题,遗嘱消息,用户名,密码

客户端标识符:0x00 0x10 40F0600050804050    前面两个字节就是代表标识符的长度,后面的40F......就是客户端标识符,代表着哪一个客户端,这个自己根据自己的设计来决定。

遗嘱主题,遗嘱消息我们都没有。

接下来的就是用户名和密码。

0X00  0X05  admin   0x00   0x08   password  

这个的意思不讲也应该知道了,不再说了。

 

二、第一步的connect完成后,就是请求连接成功了。

接下来就是发布消息和接收消息,这两个不再详细展开,他们的格式都是和上面的第一步一样的,设置值根据手册中的数据设置就可以。

简单解释一下,客户端向服务器传消息,就是publish,发布消息,那么按照发布消息的消息格式发送就可以。

客户端想要接收服务器的消息,就是接收消息了,这个需要在连接成功后就发送给服务器。意思就是:我们使用的微信,上面有很多的公众号。但是你怎么样才能受到这些公众号的消息呢,你得先关注这些公众号。同理,这里的服务器有很多的消息,你想要接收那部分的,就需要向服务器发送那部分消息的公众号才可以接收。

W5500是一种基于TCP/IP协议栈的以太网控制器芯片,而MQTT(Message Queuing Telemetry Transport)是一个基于发布-订阅模式的轻量级通信协议。要通过MQTT协议连接阿里,需要使用W5500芯片与阿里云IoT平台进行通信。 首先,你需要建立一个阿里云IoT平台账户,并创建一个设备和对应的设备身份验证信息(Device Secret)。然后,你需要在W5500芯片上实现MQTT协议的通信功能。 W5500提供了一套用于实现TCP/IP协议栈的库函数。你可以使用这些库函数来建立与阿里云IoT平台的TCP连接。具体步骤如下: 1. 首先,通过W5500芯片的网络功能,连接到互联网。 2. 然后,使用阿里云IoT平台提供的域名和端口号,建立到云服务器的TCP连接。 3. 在建立TCP连接之后,你需要发送MQTT连接请求消息。这包括发送设备身份验证信息和其他必要的连接参数。 4. 一旦与阿里云IoT平台成功建立MQTT连接,你可以发布和订阅主题,并通过MQTT消息进行通信。 5. 最后,你需要周期性地保持活跃状态,以确保长时间保持TCP连接。 需要注意的是,在实现MQTT协议通信之前,你需要熟悉W5500的数据手册和MQTT协议的规范。确保在代码编写中遵循阿里云IoT平台和MQTT协议的要求。 总结起来,通过W5500芯片通过MQTT协议连接阿里云IoT平台,需要实现W5500芯片的网络功能和MQTT协议通信功能,并在与阿里云IoT平台建立TCP连接后,通过MQTT消息进行设备与平台之间的数据交互。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值