また、この連載でIoTを実現する技術的な構成要素のうち、前回紹介したmbed/アプリケーションボードのほか、IBM IoT Foundation(以下、IoTFと表記)、センサーデータの送信に用いるMQTT(MQ Telemetry Transport)という通信技術、およびJSON(JavaScript Object Notation)というデータフォーマットについて、それぞれ概説します。
IoTでは何ができ、どのような技術を用いるのかを、座学だけでなく体験を通じて学ぶことが第2回の目的です。
IoTを実現する技術的な構成要素
IoTで何ができるか?
IoTでは、「モノ」である組み込み機器がネットワークを介してクラウドなどのサーバへ自らデータを送り、サーバ上のアプリケーションと連携することで、高度で新しいサービスを実現します。ここでいう組み込み機器とは、ソフトウェアによって制御される機器の総称です。
組み込み機器にはどのようなものがあるでしょうか? 身の回りにあるものだけでも、スマートフォン、スマートウォッチ、冷蔵庫、エアコン、電子レンジ、デジタルビデオカメラ、電気メーターなど、挙げればきりがないほど多くのモノがソフトウェアによって制御されています。より大きなモノでは、自動車、家、ビルなどにも多数の組み込み機器が搭載されるようになってきています。
IoTの世界では、あらゆるモノがインターネットにつながることで、人とモノとがソーシャル・ネットワークでコミュニケーションできます。歩数計が持ち主の1日の歩数をTwitterでつぶやくことも、アプリから、別の場所にあるぬいぐるみにメッセージを送って自分の代わりに持ち主へ気持ちを伝えることも、電気メーターが電気の使用量を契約者へメールで知らせることも、マイカーの現在位置・通過した経路・部品の故障有無などをスマホアプリで確認することも、会議室の空き状況を会議室に問い合わせることも、技術的に可能です。
IoTの技術的な構成要素
この連載で紹介するIoTの技術的な構成要素には、以下があります。
- クライアント(組み込み機器):mbedおよびアプリケーションボード
- 通信技術:MQTT
- データフォーマット:JSON
- サーバ(クラウドサービスなどを利用):IoTF/Bluemix
次項より、それぞれ概説していきます。
mbedおよびアプリケーションボード
連載第1回で紹介したmbed(mbed NXP LPC1768)には、CPU、ROMやRAMなどの記憶装置のほか、さまざまな入出力インターフェースがあります。第1回で紹介したとおり、この連載ではmbed拡張基板としてアプリケーションボードを使用します(仕様の詳細はリンク先を参照ください)。
アプリケーションボードを使用する理由は次のとおりです。
- コネクタをつなぐだけでmbedを拡張できる
- 温度センサ、3軸加速度センサなど、複数のセンサを利用できる
- RJ45イーサネット・コネクタがあるためインターネット接続が容易である
- mbedのオンラインIDEからプログラムやライブラリをインポートして利用できる
MQTT
MQTTは、M2M(Machine-to-Machine,機械対機械)通信や、IoTに適したオープンな非同期通信技術です。執筆現在(2015年10月)の最新仕様MQTT v3.1.1は、OASIS(Organization for the Advancement of Structured Information Standards, 構造化情報標準促進協会)によって標準規格となっています。この規格にもとづく実装もオープンソース化されており、誰でも無償で使用することができます(公式サイト mqtt.org)。
MQTTは、細く不安定なネットワークを介して、メッセージをTCP/IPで送受信することに適しています。また、パブリッシュ/サブスクライブ型の通信パターンにより、1対1だけでなく1対多でメッセージを配信することができます。
図1はIoTにおけるMQTT通信のイメージです。トピックはパブリッシャーとサブスクライバーをブローカーが論理的に紐づけるための文字列です。
自宅で個人的にIoTを試す範囲では、mbed/アプリケーションボードとサーバ間の通信は、ブロードバンドのネットワーク環境が使えるため、通信品質について特に気にならないかもしれません。しかし、実際のIoTサービスでは、移動する車内や屋外など、さまざまな場所にある多数のモノが、サーバとデータを何度もやりとりします。そのため、通信技術自体が軽量であること、1対多の通信が可能であること、また送信側と受信側が同時に接続中でなくても通信できることが大変重要です。
なお、MQTTに限った話ではありませんが、すべての実装が標準規格のすべてをサポートしているわけではありません。実装によって細かな動作が異なる場合もあるため、特に個人目的以外で使用する場合は、機能・非機能要件を満たすことができるかどうか、十分にテストしましょう。
MQTTのメッセージ送信のサービス品質(QoS)には3種類あります。提供するサービスに応じてふさわしい品質を選択します。ただし、このサービス品質は、パブリッシャーとブローカー、またはブローカーとサブスクライバー間の通信に適用されるものです。パブリッシャーからサブスクライバーまでのサービス品質ではないため、MQTTを使用する際は、提供するサービスの特性に適した品質を選択しましょう。
3種類のサービス品質
QoS0(At most once:最高1回)
センサデータのように、一部のメッセージが欠けても影響のないサービスに利用します。メッセージが届いたことを確認しないため、高速にメッセージを転送することができます。
QoS1(At least once:最低1回)
1回は必ず通信相手に届けるサービスに利用します。同じメッセージが重複して届いてしまうことがあります。
QoS2(Exactly once:確実に1回)
入出金取引データのように、1回のみ必ず通信相手に送り届けるサービスに利用します。送信側でメッセージを削除する前に、送信側と受信側の間で少なくとも2組の送信/確認応答を行うため、メッセージの転送速度がQoS0/QoS1よりも遅くなります。