LoginSignup
2
1

More than 1 year has passed since last update.

EMQ XでCoAPとMQTTを相互に変換する

Posted at

CoAPとMQTTは、どちらもIoTの分野でよく利用されている軽量な通信プロトコルです。EMQ XはMQTTブローカーですが、CoAPを使って接続することもできます。そのため、あるデバイスがCoAPで送ったメッセージを他のデバイスがMQTTで受信することができ、その逆も可能となっています。今回は、EMQ XでCoAPを有効化する手順について説明します。

はじめに:CoAP <=> MQTTでどのように変換されるか

実際に手順を説明する前に、EMQ XがCoAPとMQTTをどのように相互変換しているかについて説明します。

CoAPとMQTTはどちらもpub/subモデルを使っています。そして、MQTTがトピックでメッセージの行き先を振り分ける一方で、CoAPのURIはRESTの原則に基づいています。EMQ XのCoAPプラグインでは、以下のようにCoAPとMQTTを対応させました。

CoAP MQTT
PUT Publish
GET Subscribe
URIのパス トピック
URIのクエリ client id, username, password

つまり、CoAPにおける

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

は、MQTTで$topicというトピックに

  • client ID: $client
  • username: $username
  • password: $password

という接続情報でpublishするのと同等になります($topicにpublishするためには、CoAP側でmqtt/$topicとパスを指定する必要があります。

getの場合も同様で、

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

は、

は、MQTTで$topicというトピックに

  • client ID: $client
  • username: $username
  • password: $password

という接続情報でsubscribeするのと同等です。

それでは、実際にやってみましょう。

EMQ Xを起動し、CoAPプラグインを有効化する

EMQ Xのインストール、起動についてはこちらを参照してください。

EMQ Xを起動したらダッシュボードを開きます。デフォルトでは http://localhost:18083 からダッシュボードに接続できます。設定を変更していなければ、

  • username: admin
  • password: password

でログインできます。

ダッシュボードを開いたら、左にあるPluginsをクリックしてCoAPのプラグインを探し、Startでプラグインを立ち上げます。

image.png

MQTTでEMQ Xに接続する

MQTTXでEMQ Xに接続し、トピック coap_to_mqttにsubscribeします。

image.png

CoAPでEMQ Xに接続する

今回はlibcoapを使います。

# リンクからダウンロードもできます  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
# stable version (今回はv4.2.1)に切り替え
# ダウンロードリンクを使った場合は不要
git checkout v4.2.1
# Couldn't find 'autoconf'! などのエラーが出た場合は
# 指示に従って対象のpackageをインストールしてください
./autogen.sh
./configure --enable-documentation=no --enable-tests=no
# Package化
make

上記が完了したら、libcoapのexamplesフォルダにあるcoap-clientを使います。

# CoAPクライアントで
# 'hello EMQ X world,  I am CoAP'というメッセージを
# トピック '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のエンドポイントに置き換えてください

このように、CoAPでメッセージをPUTすると、MQTT Xでメッセージが受信できます。

image.png

今度は、CoAPのGETを使ってsubscribeしてみます。

./examples/coap-client -m get -s 20 "coap://127.0.0.1/mqtt/mqtt_to_coap?c=client1&u=tom&p=secret"

MQTTからメッセージをpublishすると、

image.png

./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 X Wrold!

このように、メッセージがCoAP側に届きます。

おわりに

EMQ Xはほかにも、LwM2M, JT808などのプロトコルをサポートしています。

この記事はA「date」between MQTT and CoAP in the EMQ X worldの翻訳です。

2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1