MQTTとは? IoT開発未経験者向けに概要と実用例をご紹介!
目次
こんにちは。最近IoTの開発をはじめた飯塚です。
IoTの分野では、MQTTという通信プロトコルが注目されています。しかし国内における導入実績が少ないこともあって、いざ調べてみると実際にどう使われているのかなかなか見つけられませんでした。
そのため今回は、MQTTの概要と実用例に焦点をしぼってまとめてみました。
この記事のターゲットはこんな人です。
・MQTTの導入を検討している、興味がある人
・MQTTの活用例やMQTTが選ばれる理由を知りたい人
MQTTとは
MQTTとは「Message Queue Telemetry Transport」の略で、publish/subscribeモデルという仕組みに基づいてつくられた、軽量なメッセージプロトコルです。
ネットワークが不安定な場所や、性能が低いデバイスでも動くように軽量化されているのが特徴で、TCP/IPネットワークをベースに作られています。IBMが開発したので、「IBM MQTT」で検索すると結構ドキュメントが引っかかります。
MQTTの特徴
- IoT特化の通信プロトコル
- 軽い
- 非同期
- Publish/Subscribeモデル
- 遺言(Will)
Publish/Subscribeモデルとは
・PublisherはMQTTブローカーにデータを送信します。
・SubscriberはMQTTブローカーにデータを受信しに行きます。
この仕組みによって、非同期通信を実現しています。さらにPublisherとSubScriberは互いに相手が誰なのかを知らないので、Publisher/Subscriberを増やすのも簡単というわけです。
遺言(Will)とは
これが遺言です。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 が考案して開発したプロトコルです。当初は油田パイプラインに取り付けられたセンサーを衛星とリンクするために使用されていました。
-
使われた場面
- 油田パイプラインの状態(油圧や油温など)を計測するセンサーと衛星の間の通信。
- 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と協力して開発したペースメーカーです。
-
使われた場面
- 患者のペースメーカーの状態を遠隔で監視する。
- 患者が診療所に通わなくても医者が心臓の動きを監視できるようになった。
- 心臓の動きに異常があったときに即座にわかるようになった。
- ペースメーカーのバッテリーの消耗を抑えられる。
- 管理センター側に障害が発生しても、心臓の動きのデータは復帰時に再送信できる。
- 患者の近くにあるスマホにデータを送信する場合に、通信のやや不安定なbluetoothを使ってもデータ送信を保証できる。
選ばれた理由
※MQTTを選んだ理由をはっきり述べた情報を見つけられなかったため、私個人の推測になります。
なお、この製品は下記リンクにあるように、脆弱性が報告されて問題になりました。
参照:【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公式
- 【IT Leaders】HTTPからMQTTへ – IBMが提唱するモノとモノがつながる時代に最適化したプロトコル&アプライアンス
- 【IBM developerWorks】 MQTTの基本知識
- 【Qiita】IoT時代のプログラミング(主にMQTTについて)
- 【GitHunGist】MQTT とはなんだったのか
- 【Youtube】How to Use the Paho Python MQTT Client for Beginners
- 3年後も使えるIoT/M2Mシステムは、APIを使った組み立て可能性が鍵
- 【PDF (IBM Redbooks)】Building Smarter Planet Solutions with MQTT and IBM WebSphere MQ
まとめ
調べてみて、できるだけデータの送受信を保証しようとするMQTTの懸命さを感じました。大量のデータをどう扱うかがIoT開発の課題の一つになると思いますが、通信面では軽量のMQTTを使うとネットワークコストの課題は解決できるかもしれません。
一度試してみてはいかがでしょうか。
《関連記事》