IoT を使ってみる(その6:MQTTブローカー Mosquitto編)

| 3 min read
Author: shuichi-takatsu shuichi-takatsuの画像

前回記事でMQTTを紹介しました。
今回はMQTTブローカー「Mosquitto」について説明したいと思います。

Contents

MQTT通信のおさらい

#

MQTTはパブリッシュ/サブスクライブ(publish/subscribe)型のデータ配信モデル(以降、PUB/SUBモデルと略す)を採用したメッセージ通信プロトコルです。

PUB/SUBモデルは以下の3つの要素で構成されています。

  • パブリッシャー(publisher): メッセージ送信側クライアント
  • サブスクライバー(subscriber): メッセージ受信側クライアント
  • ブローカー(broker): MQTT基地局としてのサーバ

MQTT通信構成図:

MQTTではブローカーがパブリッシャーとサブスクライバーの間に入ってメッセージを仲介します。
パブリッシャーとサブスクライバー同士が直接メッセージのやり取りをしないことが特徴です。
ブローカーは、どのIoTデバイスがどのメッセージを購読しているのかを判断し、メッセージのフィルタリングを行い、多対多の通信を行います。

Mosquitto とは

#

Mosquitto(Broker)」は上図のMQTTブローカーのオープンソース実装です。
PUB/SUB通信を行うクライアント部分の「Mosquitto Client」も提供されています。

クラウドで提供されるMQTTブローカーにはAWSのAmazon MQ(MQTT以外のプロトコルもサポートしている)などがありますが、Amazon MQを利用するにはAWSアカウントが必要であり、ちょっとMQTTを試したいと思っても敷居が高いのが難点です。

その点、MosquittoはPCやRaspberry PiなどのIoTデバイスにインストールでき、簡単にMQTTブローカー環境を構築できます。

Raspberry PiにMosquittoをインストールする

#

Raspberry Pi(3B+)へMosquittoをインストールするは非常に簡単です。
以下のコマンドを実行してインストールします。

sudo apt-get install mosquitto

状態を確認するには、以下のコマンドを実行します。

sudo service mosquitto status

サービスの状態が次のように出力されればインストールは成功です。

MQTTクライアントもインストールしてみましょう

sudo apt-get install mosquitto-clients

サブスクライブ

#

MQTTクライアントでサブスクライブしてみます。
Raspberry Piのターミナルから以下のコマンドを実行します。

mosquitto_sub -h localhost -t topic

上記のコマンドの意味を以下に示します。

  • mosquitto_sub:サブスクライブコマンド
  • -h localhost:MQTTブローカーのホストに”localhost”を指定
  • -t topic:サブスクライブするトピックに”topic”を指定

パブリッシュ

#

MQTTクライアントでパブリッシュしてみます。
Raspberry Piのターミナルから以下のコマンドを実行します。

mosquitto_pub -h localhost -t topic -m "hello! MQTT"

上記のコマンドの意味を以下に示します。

  • mosquitto_pub:パブリッシュコマンド
  • -h localhost:MQTTブローカーのホストに”localhost”を指定
  • -t topic:パブリッシュするトピックに”topic”を指定
  • m "hello! MQTT":送信するメッセージに”hello! MQTT”を指定

メッセージをパブリッシュすると、サブスクライブしている側のターミナルに以下のメッセージが出力されました。

複数台のIoTデバイスからパブリッシュ

#

この連載で使用しているIoTデバイスの ESP32 LOLIN D32 と、もう一台のデバイス ESP32 DevKitc V4 から同一トピックにメッセージを送信し、Mosquittoクライアントでメッセージを受信してみます。

送信している2台のIoTデバイス:

それぞれのIoTデバイスは次のメッセージを約1秒間隔で送信しています。

  • ESP32 LOLIN D32: ”payload - ESP32 LOLIN D32”
  • ESP32 Devkitc V4:”payload - ESP32 Devkitc V4”

サブスクライブしているターミナル上に、上記のメッセージが1秒毎で交互に受信されているのが確認できました。

まとめ

#

MQTTブローカーのオープンソース実装である「Mosquitto」をご紹介しました。
MosquittoをRaspberry Piにインストールして、複数台のIoTデバイスからメッセージをパブリッシュし、Mosquittoクライアントでメッセージが受信できていることを確認しました。

IoTに関するチュートリアルや実践テクニックをまとめています。

IoT活用の参考になれば幸いです。

豆蔵デベロッパーサイト - 先週のアクセスランキング
  1. Nuxt3入門(第1回) - Nuxtがサポートするレンダリングモードを理解する (2022-09-25)
  2. 自然言語処理初心者が「GPT2-japanese」で遊んでみた (2022-07-08)
  3. GitHub Codespaces を使いはじめる (2022-05-18)
  4. Jest再入門 - 関数・モジュールモック編 (2022-07-03)
  5. ORマッパーのTypeORMをTypeScriptで使う (2022-07-27)
  6. Nuxt3入門(第4回) - Nuxtのルーティングを理解する (2022-10-09)
  7. Nuxt3入門(第3回) - ユニバーサルフェッチでデータを取得する (2022-10-06)
  8. 第1回 OpenAPI Generator を使ったコード生成 (2022-06-04)
  9. Nuxt3入門(第8回) - Nuxt3のuseStateでコンポーネント間で状態を共有する (2022-10-28)
  10. Nuxt3入門(第2回) - 簡単なNuxtアプリケーションを作成する (2022-10-02)