乐趣区

关于mqtt:MQTT-和-CoAP-在-EMQ-X-世界的一次约会

随着 5G 网络技术的提高,物联网世界也在飞速发展,时至今日,有数的物联网设施在世界的各个角落发光发热。

但有别于传统互联网,端到端的沟通,始终是物联网业务的难点。应用的物联网通信协定不同,使得这些设施之间的沟通存在微小的鸿沟。就好比人与人之间语言不同,无奈失常的交换。

EMQ X Broker 作为物联网消息中间件,则肩负着促成这些设施提供沟通交流的使命。为此,咱们开发了很多物联网协定插件,无论你偏爱煲电话粥式的激情(基于 TCP 长链接,比方 MQTT),还是一字一句书信的温情(基于 UDP 无连贯,比方 CoAP),或是你有一套属于本人的「暗语」(公有协定),在 EMQ X 的世界,咱们都能帮你找到能读懂你的「soulmate」。

对于 MQTT 协定:https://www.jianshu.com/p/ecd…

对于 CoAP 协定:https://www.jianshu.com/p/7fe…

本文将向你展现,MQTT 客户端和 CoAP 客户端,在 EMQ X World 的一次「约会」。

Step 1:启动 EMQ X Broker,关上 CoAP 插件,并确保插件的运行状态。

对于如何装置和启动 EMQ X Broker,你能够在这里找到帮忙。

关上 Dashboard,点击左侧插件,右侧搜寻 CoAP,点击启动,运行 CoAP 插件 (默认端口 5683)。

MQTT 的 PUB/SUB 模型中,为了实现端到端通信,须要设施之间通过 topic 作为桥梁,咱们应用 coap_to_mqttmqtt_to_coap 两个 topic,别离作为 CoAP 到 MQTT 的音讯 topic,和 MQTT 到 CoAP 的音讯 topic

MQTT 与 CoAP 都反对公布 / 订阅机制,MQTT 依附的是报文中的 Topic 字段,而 CoAP 协定类基于 REST 设计,在 EMQ X Broker 中:

PUTGET:作为 Publish Subscribe

URI:门路映射 topic,规定为:主题名 topic_name 转化为门路 /mqtt/topic_name,即 topic 加上 /mqtt/ 前缀。

URI Query:门路参数携带了终端信息,包含终端、用户名、明码。

# 示例
put "coap://host:port/mqtt/$topic?c=$client&u=$username&p=$password"
get "coap://host:port/mqtt/$topic?c=$client&u=$username&p=$password"

# -m get | put | post ...
# method 申请形式

# coap://host:port
# CoAP 协定门路格局,host 和 port,填写 EMQ X Broker 部署的 IP,和 CoAP 插件的端口(默认 5683)# /mqtt/$topic 
# 指 mqtt 的 topic,须要转换,规定:# topic 名称 topic_name , 在 CoAP 中须要应用 /mqtt/topic_name

# URI Query
# c : 终端
# u : 用户名
# p : 明码 

至此,筹备工作曾经实现。

Step 2:邀请第一位参会者,MQTT 客户端

将 MQTT X(EMQ 旗下开源 MQTT 桌面客户端)连贯至你的 EMQ X Broker,并为它订阅主题 coap_to_mqtt

Step 3:邀请第二位参会者,CoAP 客户端。

本文中应用的 CoAP 客户端是 libcoap。

# 先装置 libcoap
# 应用 git 下载,或者应用下载链接 https://github.com/obgm/libcoap/archive/refs/tags/v4.2.1.zip
git clone https://github.com/obgm/libcoap.git
# 如果你应用下载链接下载,unzip 解压
# unzip libcoap-4.2.1.zip

# 进入 libcoap 文件目录
cd libcoap
# 切换至稳固版本 作者应用的是 v4.2.1
# 如果你应用本文中的下载链接下载,不须要切换版本。git checkout v4.2.1
# 装置配置
./autogen
# ./autogen 的过程中可能会遇到局部依赖缺失的状况(比方 autoconf 和 automake),依照提醒装置对应依赖即可。./configure --enable-documentation=no --enable-tests=no
# 打包
make

Step 4:开始通信

装置实现后,CoAP 终端 PUT 音讯到 coap_to_mqtt 主题。

# CoAP 终端发送音讯 hello EMQ X world,  i am coap,topic 为 coap_to_mqtt
./examples/coap-client -m put -e "hello EMQ X world, i am coap"  "coap://127.0.0.1/mqtt/coap_to_mqtt?c=coap20211&u=tom&p=secret"
# 命令中的 127.0.0.1 替换为你的 EMQ X Broker 部署地址 

咱们能够看到 MQTT X 收到了来自 CoAP 的问候。

当初为 CoAP 终端订阅 mqtt_to_coap 主题。

# CoAP 终端订阅 mqtt_to_coap 主题,-s 20 示意订阅维持 20 秒
./examples/coap-client -m get -s 20 "coap://127.0.0.1/mqtt/mqtt_to_coap?c=client1&u=tom&p=secret"

MQTT X 发送 hello coap, i am mqtt welcome to EMQ X Wrold!mqtt_to_coap 主题。

CoAP 也收到了来自 MQTT 的回应。

./examples/coap-client -m get -s 20 "coap://127.0.0.1/mqtt/mqtt_to_coap?c=client1&u=tom&p=secret"
hello coap , i am mqtt ,welcome to EMQ World

至此,咱们实现了以 EMQ X Broker 作为媒介的一次端到端通信流程,让 MQTT 和 CoAP 在 EMQ X 世界里胜利「约会」。

在 EMQ X World,不仅有 MQTT、CoAP、LWM2M、JT808 以及将来将反对的更多不同物联网协定插件,同时咱们也为你提供了插件的开发模板。咱们期待在这里,所有的物联网设施都能相会,碰撞出夺目的火花,照亮物联网的世界。

本文作者

黄 迪 EMQ X 研发工程师,EMQ X Broker & Enterprise

周子博 EMQ X 开源项目经理,次要负责项目管理和社区保护,在 IoT 畛域深耕多年,有着十分丰盛的行业教训

版权申明:本文为 EMQ 原创,转载请注明出处。

原文链接:https://www.emqx.cn/blog/url-mqtt-and-coap

退出移动版