
IoT開発未経験者向け! IoTで注目を浴びるプロトコル、MQTTとは?
目次
こんにちは。最近IoTの開発をはじめた飯塚です。
IoTの分野ではMQTTという通信プロトコルが注目されています。しかし国内における導入実績が少ないこともあって、いざ調べてみると実際にどう使われているのかなかなか見つけられませんでした。
そのため今回は、MQTTの概要と実用例に焦点をしぼってまとめてみました。
この記事のターゲットはこんな人です。
・MQTTの導入を検討している、興味がある人
・MQTTの活用例やMQTTが選ばれる理由を知りたい人
目次
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モデルとは
・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 が考案して開発したプロトコルです。当初は油田パイプラインに取り付けられたセンサーを衛星とリンクするために使用されていました。
使われた場面
選ばれた理由
参照:【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を選んだ理由をはっきり述べた情報を見つけられなかったため、私個人の推測になります。
なおこの製品は下記リンクにあるように脆弱性が報告されて、問題になりました。
参照:【Youtube】Home Is Where The Heart Is
参照:ペースメーカー情報を自宅から病院に送信する遠隔機器がクラッキングされる恐れ
上記以外に、電力や農耕分野でもIoT分野は発展しているようです。
関連キーワード
まとめ
調べてみて、できるだけデータの送受信を保証しようとするMQTTの懸命さを感じました。
大量のデータをどう扱うかがIoT開発の課題の一つになると思いますが、通信面では軽量のMQTTを使うとネットワークコストの課題は解決できるかもしれません。
一度試してみてはいかがでしょうか。
参考ページ
- 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

