MQTTは、IoTおよびIIOTデバイス間でメッセージを伝送する、軽量のパブリッシュ/サブスクライブネットワークプロトコルです。MQTTプロトコルは、通常、TCP/IP上で動作します。小さなコードフットプリント」が求められる遠隔地との接続や、ネットワークの帯域幅が限られている場合に設計されています。MQTTプロトコルは、IIOTデバイス、IoT、スマートホームシステム、ホームオートメーションシステムのアプリケーションに理想的な選択肢であり、広く利用されています。
ESP8266、ESP32、Raspberry Pi、Arduinoマイコンを搭載したエンドノードが、他のMQTTクライアントと通信することで、メーカー、フリーランサー、プロトタイプに最適なユースケースとなります。
MQTTプロトコル
IoT/IIOT/スマートホームシステム/ホームオートメーションシステムにおいて、MQTTはどのように重要な役割を果たしているのか?
MQTTプロトコルでは、メッセージブローカーと多数のクライアントという2種類のネットワークエンティティが定義されています。MQTTブローカーは、クライアントからすべてのメッセージを受信し、メッセージを適切な宛先クライアントにルーティングするサーバーです。
Raspberry Pi, ESP8266, ESP32, Arduinoなどの小型コントローラでもMQTTクライアントとして動作します。
MQTTにおけるMQTTクライアント
MQTTクライアントとは、MQTTライブラリを実行し、ネットワーク経由でMQTTブローカーに接続するあらゆるデバイス(マイクロコントローラーから本格的なサーバーまで)を指します。
パブリッシャーは、配信する新しいデータがあると、接続されているブローカーにデータを含むコントロールメッセージを送信します。その後、MQTTブローカーは、そのトピックを購読しているMQTTクライアントに情報を配信します。
パブリッシャーはサブスクライバーのロケーション数に関するデータを持つ必要はなく、逆にサブスクライバーはパブリッシャーに関するデータを設定する必要はありません。
MQTTにおけるMQTT Broker
ブローカーが、現在サブスクライバーがいないトピックのメッセージを受信した場合、メッセージのパブリッシャーがメッセージをリテインメッセージとして指定していない限り、ブローカーはそのメッセージを破棄します。保持されたメッセージとは、retained フラグが true に設定された通常の MQTT メッセージのことです。ブローカーは、最後に保持したメッセージと、選択したトピックに対応する QoS を保存します。
保持されたメッセージのトピックにマッチするトピックパターンをサブスクライブした各クライアントは、サブスクライブ後すぐに保持されたメッセージを受け取ります。ブローカーは1つのトピックにつき1つのリテインメッセージのみを保存します。これにより、あるトピックの新規購読者は、パブリッシャーからの次の更新を待たずに、最新の値を受け取ることができます。
パブリッシングクライアントが初めてブローカに接続したときに、ブローカが、パブリッシングクライアントがブローカから予期せず切断されたことを検出した場合に、サブスクライバに送信するデフォルトメッセージを設定することができます。
クライアントはブローカとしかやりとりしませんが、システムには、現在のサブスクライバのトピックに基づいてデータを交換する複数のブローカサーバが含まれている場合があります。 MQTTのコントロールメッセージは、わずか2バイトのデータにすぎません。
コントロールメッセージは、必要に応じて約256メガバイトのデータを伝送することができます。クライアントとブローカーとの接続や切断、データの公開、データの受信確認、クライアントとサーバー間の接続の監視などに使用されるメッセージタイプが定義されています。