MQTT,目前物联网的最主要的协议,基本所有收费的云平台都是基于MQTT协议,比如机智云,和所有的开放云平台比如中国移动的oneNet、百度的云平台也都支持MQTT的接入。虽然MQTT很火,但是目前对MQTT的很少,尤其是在如何移植到嵌入式上来。大部分的平台商的做法都是跟模块商合作把MQTT协议集成到WiFi模块跟GPRS模块里面,捆绑一销售,不让用户过多的了解物联网最核心的东西。
在还没有深入去了解MQTT协议之前,总以为是非常复杂的东西,毕竟之前一直想深入,但无奈在浩淼的网络里居然找不到太多实质的资料。随时自己对物联网的不断探索,越来越了解整个物联网的架构,对MQTT了解越来越深入。在这篇文章中将带大家先了解MQTT的协议,在后面的文章,再带大家怎么移植MQTT到STM32上,再到怎么搭建自己的MQTT服务器。
名字 | 值 | 流向 | 描述 |
CONNECT | 1 | C->S | 客户端请求与服务端建立连接 |
CONNACK | 2 | S->C | 服务端确认连接建立 |
PUBLISH | 3 | CóS | 发布消息 |
PUBACK | 4 | CóS | 收到发布消息确认 |
PUBREC | 5 | CóS | 发布消息收到 |
PUBREL | 6 | CóS | 发布消息释放 |
PUBCOMP | 7 | CóS | 发布消息完成 |
SUBSCRIBE | 8 | C->S | 订阅请求 |
SUBACK | 9 | S->C | 订阅确认 |
UNSUBSCRIBE | 10 | C->S | 取消订阅 |
UNSUBACK | 11 | S->C | 取消订阅确认 |
PING | 12 | C->S | 客户端发送PING(连接保活)命令 |
PINGRSP | 13 | S->C | PING命令回复 |
DISCONNECT | 14 | C->S | 断开连接 |
MQTT的默认端口号为:1883
抓取端口数据包:
可以看到MQTT协议中本地给服务器发送了一个Connect登录请求,然后,服务器回应一个ACK,表示登录成功。
每隔一定的时间,本地向服务器发送Ping Request心跳包,相应的服务器也会回应Ping Response。
接下来看MQTT最核心的传输协议 Subcribe(定阅)和Publish(推送)。简单来说就是客户端口(比如物联网硬件)Subcribe一个topic(主题)后,其它的客户端(比如手机)向服务器往这个topic 推送 Payload(有效数据),服务器就会把Payload转发给定阅这个topic的客户端(硬件)。这样就实现了客户端(手机)通过服务器(MQTT)远程发送数据给客户端(物联网硬件)。