今回はタイトルの通りMQTTを使ってみて、動作を確認するまでを行います。
目的
covid-19の影響で、イベントに参加する顧客が非接触で楽しめるコンテンツが無いか?という相談が増えています。弊社のインタラクティブコンテンツは、壁を触ったりガジェットを共有したりすることが多いのですが、各人のスマホを操作して何かを行う形であれば、体験共有型のコンテンツがより安全に楽しめるのでは?と考えました。その方法を模索する一環として、IoTの通信プロトコルとしてよく使用されているMQTTを使ってみようと思います。MQTTを使用して、例えば不特定多数の人がスマホからイベント会場の照明演出を任意に変更する、というように、スマホを操作デバイス化して面白い演出ができそうです。
MQTTとは?
MQTT(Message Queueing Telemetry Transport)は、短いメッセージを複数のユーザー(publisher, subscriber)が頻繁に送受信することを想定して作られています(参照)。その軽量さから、IoT実現に適していると言われています。
MQTTはPublish-Subscribe方式でメッセージを送受信します。Publisher(出版者)がBrokerにメッセージを送ると、購読登録をしているSubscriber(購読者)はこのメッセージを受け取ることができます。図にするとこんな感じです。
購読者は特定のトピックのみに購読登録することで、任意のトピックに限定してメッセージを受信することができます。
実際にMQTTブローカー(mosquitto)をインストールしてpub/subしてみます。
環境
PC: macOS Mojave ver.10.14.6
mosquittoをインストールして動作確認
まずはmosquittoをインストールして動作確認まで行います。mosquittoは、MQTTプロトコルを実装したオープンソースのソフトウェアです(参照)
ターミナルで以下のコマンドを実行します。
brew install mosquitto
インストールが完了したら、
以下のディレクトリにパスを通します(環境によって違うかもしれません)。
/usr/local/opt/mosquitto/sbin
/usr/local/opt/mosquitto/bin
ブローカーを立ち上げます。以下のコマンドのみで起動します。
mosquitto
Subscribeする
新しいウィンドウでターミナルを起動して、subscribeします。
🔔コマンドオプション: -d = バックグラウンドでブローカーを実行。 -t = topicの指定
mosquitto_sub -d -t topic/test
Publishする
さらに別のウィンドウでターミナルを起動してpublishします。
コマンド引数-mの後にメッセージを入れます(今回はkumaʕ •ᴥ• ʔkumaです)。
mosquitto_pub -d -t topic/test -m "kumaʕ •ᴥ• ʔkuma"
先ほどsubscribeした方のターミナルに「kumaʕ •ᴥ• ʔkuma」と表示されていれば正常に動作しています。
とっても簡単に使えるようになりました。
今回はMacの中で通信してみましたが、今後は別のデバイス間でメッセージのやりとりをしてみようと思います。