MQTTプロトコルでIoTデバイスの軽量通信を実現

IoTデバイスの通信に欠かせないプロトコルがあります。MQTTです。軽量でネットワーク帯域を節約できる設計が特徴です。しかも、HTTPと比べて最大80%少ない帯域で同じデータを送れます。そこで今回は、MQTTの仕組みと使い方を解説します。

MQTTの基本構造

MQTTはパブリッシュ/サブスクライブ型のプロトコルです。送信者と受信者が直接接続しません。つまり、ブローカーと呼ばれる中継サーバーを介して通信します。しかし、この構造が大きなメリットを生みます。

具体的には、デバイスはトピックにメッセージをパブリッシュします。また、受信側はトピックをサブスクライブして待機します。さらに、ブローカーがメッセージのルーティングを担当します。そのため、送受信の疎結合が実現します。実際、数千台のデバイスでもスケーラブルに動作します。

MQTTがIoTに適している理由

MQTTは1999年にIBMが設計しました。当初は石油パイプラインの監視用でした。つまり、低帯域で不安定な環境を想定した設計です。しかも、プロトコルヘッダがわずか2バイトです。

たとえば、HTTPのヘッダは数百バイトになります。しかし、MQTTはその数十分の一です。さらに、常時接続でリアルタイム通信も可能です。そのため、バッテリー駆動のIoTデバイスに最適です。特に、センサーデータの送信では消費電力の差が顕著です。

MQTTのQoSレベル

MQTTには3段階のQoS(サービス品質)レベルがあります。QoS 0は「最大1回」の配信です。また、QoS 1は「最低1回」の配信を保証します。さらに、QoS 2は「正確に1回」の配信です。

つまり、用途に応じて信頼性を選択できます。しかし、QoSが高いほどオーバーヘッドも増えます。たとえば、温度センサーならQoS 0で十分です。しかし、決済処理ならQoS 2が必要です。そのため、要件に合ったQoSレベルの選択が重要です。

MQTTブローカーの選択と導入

ブローカーにはいくつかの選択肢があります。具体的には、Mosquittoが最も人気のあるオープンソース実装です。また、EMQXは大規模環境に適しています。さらに、AWS IoT CoreはクラウドマネージドのMQTTブローカーです。

なお、Mosquittoはapt installで簡単に導入できます。しかし、本番環境では認証やTLS暗号化の設定が必須です。つまり、セキュリティの設計も重要です。そのため、テスト環境と本番環境で設定を分けましょう。特に、認証なしでブローカーを公開するのは厳禁です。

まとめ

MQTTはIoTデバイスの通信に最適な軽量プロトコルです。パブリッシュ/サブスクライブ型で疎結合な設計が特徴です。しかも、3段階のQoSで信頼性を選択できます。特に、Mosquittoブローカーを使えば手軽に導入可能です。