MQTT
MQTTIoTに適した通信方式
MQTTは、IBMが開発した通信方式でMessage Queue Telemetry Transportの略です。
現在一般的であるHTTP通信と比べ、以下の点でIoTに適した通信方式であります。
* 通信データ量が少ない
* 非同期通信
* パブリッシュ・サブスクライブモデルの通信方式
1つづつ説明していきます。
通信データ量が少ない
通信を行うために、実際に送るデータ以外にも情報が必要です。
その情報量がとても少ないのが特徴で、そのことにより 処理するためのメモリも軽減されますし、消費電力も軽減されます。
IoT分野ではバッテリーで動作させる場合もあるので、嬉しいですね。
非同期的に通信
同期的な通信とは、通信の最中に他の処理ができないことをいいます。
すぐに通信が成功して、データを取得できればいいのですが、持ち歩くようなデバイスが通信しようとした場合、必ずしも安定した通信ではないため、通信時間が長くなることも多いと思います。
その場合に、その他の処理ができる非同期通信はIoT分野には適しています。
パブリッシュ・サブスクライブモデルの通信方式
HTTP通信では、基本的に情報が欲しい方(クライアント)が欲しいときに通信を開始し、情報を持っている方(サーバ)が情報を返す方式です。
MQTTなどのパブリッシュ・サブスクライブモデルの通信方式では、情報を持っている方が情報を与えたいときに、情報を与えられることができます。
情報を与える方をパブリッシャー、受け取る方をサブスクライバーといい、それらを中継するものをブローカーと言います。
MQTTをベースとした通信を採用しているサービスとして、Facebook Messenger
が有名です。Facebook Messenger
では、メッセージを送ったタイミングで、受信者がそのメッセージを受け取ることが可能です。
この場合では、メッセージ送信者がパブリッシャー、Facebookのサーバがブローカー、受信者がサブスクライバーになります。
また、それらは複数で繋げることもできます。
例えば、下図のようにMQTT通信が可能な温度センサーが定期的に温度をブローカーへ送ったり、スピーカーがMQTT通信によりブザー音を鳴らすことが可能で、それらにPCやスマートフォンのアプリから通信できる環境があるとします。
温度センサーは温度を送信するパブリッシャーであり、スマートフォンやPCなど複数の端末でその温度の情報を受取るサブスクライバーになることが可能ですし、同じスマートフォンでスピーカーに対し情報を送信するパブリッシャーになることもできます。
この温度情報はブローカーに繋がっている全ての端末に対して送っているわけではないです。
この例の場合では、PCやスマートフォンには送りますが、スピーカーはその情報は必要ないので、受け取りません。
これらを可能とするために、どの端末がどのような情報を受け取るかということを示しているトピックというものを使っています。
このトピックはデータ送信時にスラッシュ(/)でデータと区切り送ります。
例えば、PCで温度を取得したい場合、ブローカーへtenp
というトピックを待ち受けます。
温度センサーがtemp/22
というデータを送ることで、temp
のトピックで待ち受けているPCに対して22
というデータを送ることができます。