电子工程师技术服务社区
公告
登录
|
注册
首页
技术问答
厂商活动
正点原子
板卡试用
资源库
下载
文章
社区首页
文章
教你动手写网络协议栈-MQTT报文解析6-实践
分 享
扫描二维码分享
教你动手写网络协议栈-MQTT报文解析6-实践
MQTT
TCP
UDP
Rice嵌入式开发
关注
发布时间: 2021-05-08
丨
阅读: 391
## 教你动手写网络协议栈系列文章 | 序号 | 内容 | | ---- | ------------------------------------------------------------ | | 1 | [《教你动手写UDP协议栈-UDP协议栈格式》](https://mp.weixin.qq.com/s/SwiW0hgusYExgo7KdbOyhQ) | | 2 | [《教你动手写UDP协议栈-DHCP报文解析》](https://mp.weixin.qq.com/s/2NlKoSxqQ2EDoinVyx3Flg) | | 3 | [《教你动手写UDP协议栈-OTA上位机》](https://mp.weixin.qq.com/s/My6AKh_BRfgtM6VgL3jTBQ) | | 4 | [《教你动手写UDP协议栈-DNS报文解析》](https://mp.weixin.qq.com/s/udRLQ_y-Paoq3gLMIGmnLQ) | | 5 | [《教你动手写UDP协议栈-CoAP报文解析 》](https://mp.weixin.qq.com/s/J2_q6Ky_HsNYMuogC15dhg) | | 6 | 《教你动手写网络协议栈-MQTT报文解析-实践 》 | ## 背景 - MQTT(Message Queuing Telemetry Transport,消息队列遥测传输协议),是一种基于发布/订阅(publish/subscribe)模式的"轻量级"通讯协议,该协议构建于TCP/IP协议上,,由IBM在1999年发布。MQTT最大优点在于,可以以极少的代码和有限的带宽,为连接远程设备提供实时可靠的消息服务。作为一种低开销、低带宽占用的即时通讯协议,使其在物联网、小型设备、移动应用等方面有较广泛的应用。 --来源于网络 - MQTT是一个基于客户端-服务器的消息发布/订阅传输协议。MQTT协议是轻量、简单、开放和易于实现的,这些特点使它适用范围非常广泛。在很多情况下,包括受限的环境中,如:机器与机器(M2M)通信和物联网(IoT)。其在,通过卫星链路通信传感器、偶尔拨号的医疗设备、智能家居、及一些小型化设备中已广泛使用。 --来源于网络 ![](https://RiceChen0.gitee.io/picture/net_mqtt/1.png) - 关于MQTT我分为2~3篇来描述,先从实践来描述。 ## MQTT服务器搭建 - MQTT是一个基于客户端-服务器的消息发布/订阅传输协议,所以需要一个服务器,MQTT服务器可以选择开源平台--EMQx和ThingsBoard。这两个开源平台部署比较方便。本次的讲解主要基于EMQx开源平台。 - EMQx官网资料--《https://www.emqx.cn/downloads#broker》,不同平台的下载安装步骤都提供了。 ![](https://RiceChen0.gitee.io/picture/net_mqtt/2.png) #### EMQx配置 - EMQx需要进行简单的配置,比如设置MQTT client连接服务器时,需要的username、password等。 - 因为我的环境是在windows下,所以下面的配置都是基于windows下的,不过其他平台的大同小异。 1. 配置username和password等参数 - 在解压的目录中打开:emqx\etc\plugins\emqx_auth_username.conf ![](https://RiceChen0.gitee.io/picture/net_mqtt/3.png) - 从examples中可以看出,可以设置多个username和password - 加密方式设置为plain(透传) 2. 配置匿名登录 - 在解压的目录中打开:emqx\etc\emqx.conf ![](https://RiceChen0.gitee.io/picture/net_mqtt/4.png) - 为true,即允许匿名登录,方便调试,如果设置成false,需要进行鉴权。 3. 操作emqx broker: ``` C // 启动EMQx Broker: emqx start // 停止EMQx Broker: emqx stop // 重启EMQx Broker: emqx restart ``` - 更多的操作命令参考链接:https://docs.emqx.cn/broker/v4.3/getting-started/command-line.html #### EMQx管理界面 - EMQx中包含了一个Web server,当启动EMQx后,通过浏览器登录《服务器IP:18083》就能登录web server。 - 其中:默认用户名为 admin, 密码为 public ![](https://RiceChen0.gitee.io/picture/net_mqtt/5.png) ## MQTT客户端搭建 - 服务器搭建好了,那么还需要一个MQTT客户端,为了快速学习,我们可以使用别人做好的MQTT客户端软件-- MQTT.fx。下载地址:http://www.jensd.de/apps/mqttfx/ - 下载完,根据提示安装即可。 ##### 启动一个MQTT客户端: - 打开设置: ![](https://RiceChen0.gitee.io/picture/net_mqtt/6.png) - 配置MQTT client: ![](https://RiceChen0.gitee.io/picture/net_mqtt/7.png) - 连接服务器: ![](https://RiceChen0.gitee.io/picture/net_mqtt/8.png) - 连接成功后,可以在EMQx web server上查看连接信息,如果信息跟客户端的一致,说明连接成功: ![](https://RiceChen0.gitee.io/picture/net_mqtt/9.png) ##### 启动第二个MQTT客户端: - 操作跟第一个客户端一致,启动完之后就可以在EMQx web server上查看连接信息: ![](https://RiceChen0.gitee.io/picture/net_mqtt/10.png) ## 实验 1. 在上述中服务器和客户已经成功建立连接。 2. 我们通过一个实验演示M2M的通信。 3. 其中client01客户端,订阅一个topic,topic名称为rice: ![](https://RiceChen0.gitee.io/picture/net_mqtt/11.png) 4. 可以通过EMQx web server查看订阅的topic ![](https://RiceChen0.gitee.io/picture/net_mqtt/12.png) 5. client02客户端,向topic:rice发布消息。 ![](https://RiceChen0.gitee.io/picture/net_mqtt/13.png) ## 总结 1. 通过EMQx搭建服务器和MQTT.fx客户端,我们很轻松的搭建好MQTT环境,这样我们很方面的学习MQTT。 2. MQTT协议是一个基于TCP的应用层协议。可以跟上一篇文章的CoAP协议进行对比学习。CoAP是基于UDP的。不过也有基于UDP的MQTT。 3. 接下来将分析MQTT的协议的结构。敬请期待
关注微信公众号『Rice嵌入式开发技术分享』,后台回复“微信”添加作者微信,备注”入群“,便可邀请进入技术交流群。 ![](https://RiceChen0.gitee.io/picture/logo/logo_.jpg)
原创作品,未经权利人授权禁止转载。详情见
转载须知
。
举报文章
点赞
(
0
)
Rice嵌入式开发
关注
评论
(0)
登录后可评论,请
登录
或
注册
相关文章推荐
MK-米客方德推出工业级存储卡
Beetle ESP32 C3 蓝牙数据收发
Beetle ESP32 C3 wifi联网获取实时天气信息
开箱测评Beetle ESP32-C3 (RISC-V芯片)模块
正点原子数控电源DP100测评
DP100试用评测-----开箱+初体验
Beetle ESP32 C3环境搭建
【花雕体验】16 使用Beetle ESP32 C3控制8X32位WS2812硬屏之二
X
你的打赏是对原创作者最大的认可
请选择打赏IC币的数量,一经提交无法退回 !
100IC币
500IC币
1000IC币
自定义
IC币
确定
X
提交成功 ! 谢谢您的支持
返回
我要举报该内容理由
×
广告及垃圾信息
抄袭或未经授权
其它举报理由
请输入您举报的理由(50字以内)
取消
提交