MQTT 和 CoAP 在 EMQ X 世界的一次「約會」

隨着 5G 網絡技術的進步,物聯網世界也在飛速發展,時至今日,無數的物聯網設備在世界的各個角落發光發熱。

但有別於傳統互聯網,端到端的溝通,一直是物聯網業務的難點。使用的物聯網通訊協議不同,使得這些設備之間的溝通存在巨大的鴻溝。就好比人與人之間語言不同,無法正常的交流。

EMQ X Broker 作爲物聯網消息中間件,則肩負着促成這些設備提供溝通交流的使命。爲此,我們開發了很多物聯網協議插件,無論你偏愛煲電話粥式的熱情(基於 TCP 長鏈接,比如 MQTT),還是一字一句書信的溫情(基於 UDP 無連接,比如 CoAP),或是你有一套屬於自己的「暗語」(私有協議),在 EMQ X 的世界,我們都能幫你找到能讀懂你的「soulmate」。

關於 MQTT 協議:https://www.jianshu.com/p/ecde412d2eeb

關於 CoAP 協議:https://www.jianshu.com/p/7fec0916a0d3

本文將向你展示,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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章