OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 16657|回复: 35

物联网核心之MQTT(一)

  [复制链接]

58

主题

499

帖子

4

精华

金牌会员

Rank: 6Rank: 6

积分
1920
金钱
1920
注册时间
2013-11-18
在线时间
268 小时
发表于 2017-8-23 00:19:46 | 显示全部楼层 |阅读模式
1金钱
本帖最后由 mzwhhwj 于 2017-8-23 00:19 编辑

                                            物联网核心之MQTT(一)
       MQTT,目前物联网的最主要的协议,基本所有收费的云平台都是基于MQTT协议,比如机智云,和所有的开放云平台比如中国移动的oneNet、百度的云平台也都支持MQTT的接入。虽然MQTT很火,但是目前对MQTT的很少,尤其是在如何移植到嵌入式上来。大部分的平台商的做法都是跟模块商合作把MQTT协议集成到WiFi模块跟GPRS模块里面,捆绑一销售,不让用户过多的了解物联网最核心的东西。
    在还没有深入去了解MQTT协议之前,总以为是非常复杂的东西,毕竟之前一直想深入,但无奈在浩淼的网络里居然找不到太多实质的资料。随时自己对物联网的不断探索,越来越了解整个物联网的架构,对MQTT了解越来越深入。在这篇文章中将带大家先了解MQTT的协议,在后面的文章,再带大家怎么移植MQTTSTM32上,再到怎么搭建自己的MQTT服务器。
      MQTT的基础知识这些大家通过百度知道都可以了解到,这里主要深入去剖析MQTT协议的整个通信流程。整个MQTT的知识大家可以去附件里的《MQTT OneNET实现.docx》,这个文档已经写的非常详细,但是如果只是看文字话,大家很难理解。因此我们借助Windows下的MQTT客户端MQTT.fx跟网络抓包工具Wireshark来一步步分析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的主要的通信协议,MQTT是基于TCP长连接,首先是先跟MQTT服务器建立TCP连接,然后发送登录请求,要保持长连接,还要定时发心跳包跟服务保持连接。我们先用MQTT.fx来登录开源的MQTT服务看看。
1.jpg
    安装好MQTT.fx(注意MQTT.fxjava开发的,电脑要安装JDK才能安装打开),一打开里面就默认有一个开源的MQTT服务M2M Eclipse。点开旁边的齿轮(设置按钮)可以看服务器的域名m2m.eclipse.org,端口号1833MQTT的默认端口号),下面还有个Keep Alive Interval就是心跳的时间。再打开Wireshark,选择要捕获的网络接口,然后再过滤器输入tcp.port==1883后回车,只捕获1883这个端口号的数据包。再点下MQTT.fxConnect连接服务器,就可以看到Wireshark捕到的数据
2.jpg
2.jpg
    可以看到MQTT协议中本地给服务器发送了一个Connect登录请求,然后,服务器回应一个ACK,表示登录成功。再双击Connect Command这条数据包,我们可以看到详细的数据包数据
2.jpg
    上面的解析出来的MQTT协议包的内部,下面是对应的二进制数据,这里我们可以对照附件上资料去了解协议的内容。看这里,大家想是不是如果自己用TCP,再封装发送下面的二进制数据就可以完成MQTT的登录了呢?拿出网络调试助手来,pingm2m.eclipse.org得到IP地址,用端口号1883连接,然后发送Wireshark捕到的MQTT登录协议的二进制数据,可以看到到服务器回应了 20 02 00 00 表示登录成功。
2.jpg
    再往下Wireshark捕到的数据包,可以看到每隔一定的时间,本地向服务器发送Ping Request心跳包,相应的服务器也会回应Ping Response
2.jpg
    接下来看MQTT最核心的传输协议 Subcribe(定阅)和Publish(推送)。简单来说就是客户端口(比如物联网硬件)Subcribe一个topic(主题)后,其它的客户端(比如手机)向服务器往这个topic 推送 Payload(有效数据),服务器就会把Payload转发给定阅这个topic的客户端(硬件)。这样就实现了客户端(手机)通过服务器(MQTT)远程发送数据给客户端(物联网硬件)。一样用MQTT.fx来实验。先点Subscribe然后面下面输入led再点旁边的Subscribe按钮来定阅led这个topic。然后回到Publish,一样在输入框输入led这个topic,下面大框就是输入要推送的数据,输入on,再点Publish按钮,就把数据推送出去了。再回到Subcribe界面来可以看到右边已经收到有推送过来的数据。如果这是硬件收到这个指令,就可以去控制点亮LED,我们就实现远程控制LED灯。
2.jpg 2.jpg
   想深入了解MQTT这一个过程的话,我们再回到Wireshark,来看看捕获到的数据
2.jpg
    具体的就不详细的分析了,大家看附件的文档来对照就可以很容易了解到。
    最后来了解下QoS(定阅等级),分012三个等级,简单来说是等级越高越可靠。QoS0,就是推送之后就完事了,至于对方有没有收到,收到是什么,数据有没有丢失,都不管。QoS1的话就
是你收到推送后,你还得返回一个puback给对方,告诉对方收到了,不然对方会以为你没收到,隔一段时间后重新给你推送,直到你给对方返回一个Puback为止。
2.jpg
    好了,基本的就写到这,剩下的大家可以根据这个方法对照文档去消化MQTT。后面的文章再教大家移植MQTT到单片机上,大家就可以实现远程的控制了,期待吧。
MQTT OneNET实现.docx.zip (811.24 KB, 下载次数: 2682)

最佳答案

已经放下多年的FPGA,要重新再拾起来,却是如此的陌生
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165352
金钱
165352
注册时间
2010-12-1
在线时间
2108 小时
发表于 2017-8-23 00:19:47 | 显示全部楼层
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

0

主题

7

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
271
金钱
271
注册时间
2016-5-26
在线时间
84 小时
发表于 2017-8-23 10:00:21 | 显示全部楼层
给力,沙发我做了,谢谢楼主分享!
回复

使用道具 举报

18

主题

48

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
220
金钱
220
注册时间
2016-10-10
在线时间
29 小时
发表于 2017-8-23 10:29:02 | 显示全部楼层
学习学习  刚开始了解
回复

使用道具 举报

15

主题

866

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
7206
金钱
7206
注册时间
2016-11-30
在线时间
622 小时
发表于 2017-8-23 13:58:46 | 显示全部楼层
厉害了!
回复

使用道具 举报

4

主题

211

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2600
金钱
2600
注册时间
2016-7-6
在线时间
546 小时
发表于 2017-8-23 16:10:51 | 显示全部楼层
还没有接触到,看看,学习学习。
把复杂的事,做简单!
回复

使用道具 举报

12

主题

144

帖子

0

精华

高级会员

Rank: 4

积分
545
金钱
545
注册时间
2017-8-1
在线时间
92 小时
发表于 2017-8-23 16:57:30 | 显示全部楼层
我用了1年的MQTT协议了,发现没什么技术含量
青涩不及当初,聚散不由你我!
回复

使用道具 举报

1

主题

101

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
254
金钱
254
注册时间
2017-5-10
在线时间
55 小时
发表于 2017-8-24 17:38:02 来自手机 | 显示全部楼层
好东西
回复

使用道具 举报

21

主题

58

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
217
金钱
217
注册时间
2016-2-19
在线时间
46 小时
发表于 2017-11-17 14:23:46 | 显示全部楼层
太给力了,100个赞!
回复

使用道具 举报

11

主题

28

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1600
金钱
1600
注册时间
2013-5-2
在线时间
131 小时
发表于 2017-12-7 18:11:21 | 显示全部楼层
讲解的很好
早起的鸟儿有虫吃,早起的虫儿被鸟吃
回复

使用道具 举报

11

主题

48

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
339
金钱
339
注册时间
2016-3-31
在线时间
41 小时
发表于 2018-2-25 17:42:07 | 显示全部楼层
看不见内容了啊。。
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165352
金钱
165352
注册时间
2010-12-1
在线时间
2108 小时
发表于 2018-2-26 01:13:49 | 显示全部楼层
谢谢分享
回复

使用道具 举报

8

主题

569

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2363
金钱
2363
注册时间
2015-5-8
在线时间
320 小时
发表于 2018-2-26 09:11:59 | 显示全部楼层
谢谢分享
回复

使用道具 举报

0

主题

13

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1561
金钱
1561
注册时间
2012-12-17
在线时间
104 小时
发表于 2018-3-2 10:45:56 | 显示全部楼层
怎么已经被屏蔽了
回复

使用道具 举报

11

主题

48

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
339
金钱
339
注册时间
2016-3-31
在线时间
41 小时
发表于 2018-3-6 10:37:41 | 显示全部楼层

看不见内容啊 原子哥
回复

使用道具 举报

0

主题

2

帖子

0

精华

初级会员

Rank: 2

积分
88
金钱
88
注册时间
2017-12-22
在线时间
22 小时
发表于 2018-3-27 17:58:08 | 显示全部楼层
顶帖看内容
回复

使用道具 举报

0

主题

2

帖子

0

精华

新手入门

积分
18
金钱
18
注册时间
2018-2-26
在线时间
1 小时
发表于 2018-4-19 09:50:45 | 显示全部楼层
顶帖看看都有啥试试?
回复

使用道具 举报

0

主题

7

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
213
金钱
213
注册时间
2015-11-4
在线时间
63 小时
发表于 2018-4-19 20:11:38 | 显示全部楼层
学习学习  刚开始了解
回复

使用道具 举报

38

主题

195

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1167
金钱
1167
注册时间
2015-11-9
在线时间
246 小时
发表于 2018-4-26 15:24:35 | 显示全部楼层
1243345
回复

使用道具 举报

0

主题

3

帖子

0

精华

初级会员

Rank: 2

积分
80
金钱
80
注册时间
2016-8-16
在线时间
14 小时
发表于 2018-5-6 17:31:28 | 显示全部楼层
学习学习  移植试试
回复

使用道具 举报

23

主题

323

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1010
金钱
1010
注册时间
2016-11-8
在线时间
233 小时
发表于 2018-5-7 08:28:03 | 显示全部楼层

请问你能看到么,我的咋显示被屏蔽
亦余心之所善,
虽九死其犹未悔。
回复

使用道具 举报

8

主题

206

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1010
金钱
1010
注册时间
2016-4-6
在线时间
234 小时
发表于 2018-5-7 08:59:24 | 显示全部楼层
咋被删除了,大佬!
回复

使用道具 举报

20

主题

169

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1012
金钱
1012
注册时间
2017-7-27
在线时间
162 小时
发表于 2018-5-7 09:08:50 | 显示全部楼层
顶一下
回复

使用道具 举报

0

主题

26

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
361
金钱
361
注册时间
2018-3-29
在线时间
53 小时
发表于 2018-5-7 09:51:30 | 显示全部楼层
看不到内容了。。。。。
回复

使用道具 举报

2

主题

15

帖子

0

精华

初级会员

Rank: 2

积分
74
金钱
74
注册时间
2017-3-3
在线时间
9 小时
发表于 2018-5-31 08:41:55 | 显示全部楼层
看不到内容啊
回复

使用道具 举报

9

主题

83

帖子

0

精华

高级会员

Rank: 4

积分
647
金钱
647
注册时间
2013-3-28
在线时间
64 小时
发表于 2018-6-12 19:46:58 | 显示全部楼层
是不是被删了
回复

使用道具 举报

0

主题

5

帖子

0

精华

新手上路

积分
36
金钱
36
注册时间
2017-9-2
在线时间
4 小时
发表于 2018-6-12 20:04:20 | 显示全部楼层
看不见内容啊 原子哥
回复

使用道具 举报

0

主题

7

帖子

0

精华

高级会员

Rank: 4

积分
509
金钱
509
注册时间
2016-2-24
在线时间
123 小时
发表于 2018-7-8 10:56:52 | 显示全部楼层
看不见内容啊 原子哥
回复

使用道具 举报

1

主题

12

帖子

0

精华

初级会员

Rank: 2

积分
74
金钱
74
注册时间
2013-10-14
在线时间
12 小时
发表于 2019-5-29 10:40:25 | 显示全部楼层
感谢分享 来学习了
回复

使用道具 举报

0

主题

7

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
217
金钱
217
注册时间
2019-4-25
在线时间
39 小时
发表于 2019-7-10 09:46:59 | 显示全部楼层
感谢分享,
回复

使用道具 举报

1

主题

39

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
214
金钱
214
注册时间
2019-10-19
在线时间
16 小时
发表于 2019-10-20 22:02:03 | 显示全部楼层

学习学习  刚开始了解
回复

使用道具 举报

12

主题

45

帖子

0

精华

初级会员

Rank: 2

积分
169
金钱
169
注册时间
2017-8-23
在线时间
45 小时
发表于 2019-12-18 17:35:56 | 显示全部楼层
我试了mqtt.fx,登录M2M Eclipse,配置都按照要求的,但连接不上是怎么回事?
回复

使用道具 举报

8

主题

293

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1001
金钱
1001
注册时间
2018-8-16
在线时间
327 小时
发表于 2019-12-19 08:18:32 | 显示全部楼层
学习学习  刚开始了解
回复

使用道具 举报

3

主题

38

帖子

0

精华

高级会员

Rank: 4

积分
510
金钱
510
注册时间
2016-12-1
在线时间
106 小时
发表于 2022-11-6 11:40:28 | 显示全部楼层
学习学习,赞楼主
回复

使用道具 举报

8

主题

39

帖子

0

精华

初级会员

Rank: 2

积分
190
金钱
190
注册时间
2019-3-17
在线时间
43 小时
发表于 2024-1-17 17:38:10 | 显示全部楼层
谢谢楼主分享!
回复

使用道具 举报

0

主题

2

帖子

0

精华

新手上路

积分
31
金钱
31
注册时间
2024-2-10
在线时间
14 小时
发表于 2024-10-29 09:31:08 | 显示全部楼层
谢谢分享!!!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2024-11-24 19:23

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表