AMG Solution

IoT開発未経験者向け! IoTで注目を浴びるプロトコル、MQTTとは?

こんにちは。飯塚です。最近IoTの開発をはじめました。
 
IoTの分野ではMQTTという通信プロトコルが注目されています。しかし国内における導入実績が少ないこともあって、いざ調べてみると実際にどう使われているのかなかなか見つけられませんでした。
 
そのため今回は、MQTTの概要と実用例に焦点をしぼってまとめてみました。
 
この記事のターゲットはこんな人です。
 

MQTTの実装方法ではなく、概要を抑えたい人
MQTTの導入を検討している、興味がある人
MQTTの活用例やMQTTが選ばれる理由を知りたい人

目次

  1. MQTTを理解するためのキーワード
  2. MQTTとは
  3. MQTTの特徴
  4. HTTPとMQTTの比較
  5. MQTTのライセンス/費用/対応言語
  6. MQTTの実用例
  7. 関連キーワード
  8. まとめ
  9. 参考ページ

MQTTを理解するためのキーワード

  • IoT特化の通信プロトコル
  • 軽い
  • 非同期
  • Publish/Subscribeモデル
  • 遺言(Will)

MQTTとは

MQTTとはMessage Queue Telemetry Transportの略で、publish/subscribeモデルという仕組みに基づいてつくられた軽量なメッセージプロトコルです。ネットワークが不安定な場所や、性能が低いデバイスでも動くように軽量化されているのが特徴で、TCP/IP ネットワークをベースに作られています。
 
IBMが開発したので、「IBM MQTT」でググると結構ドキュメントが引っかかります。
 
下記のサイトがMQTTの仕様について、わかりやすく図解されていてとっつきやすいです。
【MAGELLAN Dev Center】MQTT の仕様

MQTTの特徴

Publish/Subscribeモデル

・MQTTではデータの送受信をPublisher(送信者)、Subscriber(受信者)の2つの役割にわけて行います。
・PublisherはMQTTブローカーにデータを送信します。
・SubscriberはMQTTブローカーにデータを受信しに行きます。

この仕組みによって、非同期通信を実現しています。さらにPublisherとSubScriberは互いに相手が誰なのかを知らないので、Publisher/Subscriberを増やすのも簡単というわけです。

遺言(Will)

・MQTTではPublisherの接続が意図しない理由で途切れた際に、Subscriberにメッセージを送ることができます。

これが遺言です。Subscriberが、Publisherの生死をリアルタイムで知ることができるのが利点です。

HTTPとMQTTの比較

HTTP MQTT
同期/非同期 同期 非同期
送受信対象 1対1 多対多
データ量 大きい(重い) 小さい(軽い)
通信が不安定 ×(送受信不可) ○(再送受信可能)

MQTTは非同期なので、サーバー側の障害によって送信できなかったデータを復帰後に再送信することができます。データ量のイメージとしては、HTTPがトラックなら、MQTTはバイクという感じでしょうか。

MQTTのライセンス/費用/対応言語

MQTTのライセンス ロイヤリティフリー
Eclipse Pahoのライセンス オープンソース(BSD)
対応言語 C, Java, Javascript, Python Lua, C++, embedded/minimal C, Go

 
※Eclipse PahoはMQTTのクライアント側を実装するためのライブラリ。
※対応言語はEclipse Pahoが対応している言語。例えばPHPでも実装はできるがEclipse Pahoは対応していない。

MQTTの実用例

油田パイプラインの監視


 
MQTTが開発当初に利用された実用例です。

MQTT は、1990 年代後半に IBM が考案して開発したプロトコルです。当初は油田パイプラインに取り付けられたセンサーを衛星とリンクするために使用されていました。

MQTT公式

使われた場面

  • 油田パイプラインの状態(油圧や油温など)を計測するセンサーと衛星の間の通信。
  • 選ばれた理由

  • 4000台のセンサーを使用中、さらに8000台を追加する必要があり、ネットワークコストを下げたかった。
  • 衛星が通信範囲の外に出てしまうと、データの送受信に失敗する可能性が高くなるので、HTTPのような安定した接続を必要とするプロトコルでは対応できない。
  • MQTTは非同期プロトコルなので、接続失敗によって送信に失敗しても、再接続したときにデータを届けることができる。
  • 参照:【Adafruit】The Origins of MQTT
     

    Facebook Messenger


    使われた場面

  • メッセージの送受信
  • 選ばれた理由

  • 送信データのサイズが小さいため、送受信が他のプロトコルよりも速いこと。
  • モバイル機器にとっては、帯域幅が狭くても送信できること、バッテリー消費が少ないことが利点になるため。
  • 参照:why facebook is using mqtt on mobile
     

    車のIoT化


     
    例えば「Sprint Velocity」という製品を使うと、車に乗る前にスマホから車の気温を操作して、過ごしやすい温度に設定しておくという使い方ができるようです。車の気温をスマホに送信する部分と、スマホから車に設定したい温度を送信する部分をMQTTで実装しています。
    参照:【Youtube】IBM and Sprint Velocity Drive Connected Cars into the Future
     
    またV2V(vehicle-to-vehicle)という車と車をインターネットでつなげる考え方のもと、車の位置情報をクラウドに送信、道路の混雑情報を分析して、なるべく空いている道路をナビゲーションするという技術も開発されています。
    参照:thoughts about using IoT MQTT for V2V and Connected Car from CES 2014
     

    病院のペースメーカーの監視(Smart Health)


     
    St. Jude MedicalがIBMと協力して開発したペースメーカーです。
    使われた場面

  • 患者のペースメーカーの状態を遠隔で監視する。
  • 患者が診療所に通わなくても医者が心臓の動きを監視できるようになった。
  • 心臓の動きに異常があったときに即座にわかるようになった。
  • 選ばれた理由
    ※MQTTを選んだ理由をはっきり述べた情報を見つけられなかったため、私個人の推測になります。

  • ペースメーカーのバッテリーの消耗を抑えられる。
  • 管理センター側に障害が発生しても、心臓の動きのデータは復帰時に再送信できる。
  • 患者の近くにあるスマホにデータを送信する場合に、通信のやや不安定なbluetoothを使ってもデータ送信を保証できる。
  •  
    なおこの製品は下記リンクにあるように脆弱性が報告されて、問題になりました。
    参照:【Youtube】Home Is Where The Heart Is
    参照:ペースメーカー情報を自宅から病院に送信する遠隔機器がクラッキングされる恐れ
     
    上記以外に、電力や農耕分野でもIoT分野は発展しているようです。

    関連キーワード

  • M2M(Machine To Machine)
  • V2V(Vehicle To Vehicle)
  • Paho(MQTTを実装のために提供されているライブラリ)
  • CoAP(Costrained Application Protocol)
  • QoS(Quality of Service)
  • まとめ

    調べてみて、できるだけデータの送受信を保証しようとするMQTTの懸命さを感じました。
     
    大量のデータをどう扱うかがIoT開発の課題の一つになると思いますが、通信面では軽量のMQTTを使うとネットワークコストの課題は解決できるかもしれません。
     
    一度試してみてはいかがでしょうか。

    参考ページ

    IIZUKA'S BLOG

    飯塚暉の記事

    飯塚暉の記事の最新情報をお届けいたします。

    SAME CATEGORY BLOG

    この記事と同様のカテゴリー記事

    新卒採用
    はじめました。
    LOADING