先述のデモでは、スマートウォッチと車載機器が通信してクルマの鍵代わりになっています。こうしたアプリケーションを開発する際は、車載機器と接続できるかどうか、解錠と施錠の挙動が正しく行えるか確認しなければなりません。従来であれば、テストの度に実車が必要です。そこで、私はこの車両の挙動をオンライン上で再現するカーエミュレーターを開発しました。
デモではスマートウォッチと車載機器の接続にはBLE(Bluetooth Low Energy)通信を利用していますが、カーエミュレーターではWeb Bluetooth APIを利用して、ブラウザとスマートウォッチとの間でBLE通信を行います。
このAPIは、ブラウザ経由でBluetoothデバイスとの通信を可能にするもので、GATT(Generic Attribute)プロトコルを利用して、対応するIoT機器などを数行のJavaScriptのコードで操作することができます。車載機器にインストールされているソフトウェアはクラウド上に用意し、オンラインで利用できるようにしています。スマートウォッチから見るとブラウザからのレスポンスが車載機器と同じなので、実際の車両を想定したテストを行えるということになります。
ブラウザとサーバとの通信にはHTML仕様で規定されているWebSocketを利用しています。を利用しています。これにより、双方向のインタラクティブな通信が可能になります。サーバ側はElixirのWAF(Web Application Firewall)であるPhoenixを利用しています。Elixirは、汎用プログラミング言語であるErlangの仮想マシン(Erlang VM、BEAMとも)上で動作する言語で、Erlangそのものは可用性の高いリアルタイムなシステムに向いています。並列処理や分散処理、耐障害性をランタイムレベルでサポートしており、電話局や銀行、電子商取引などで利用された実績があります。また、PhoenixではWebSocketを標準でサポートするChannelという機能があり、今回はこちらを利用しています。詳細なアーキテクチャは下記の図のようになっています。
それではカーエミュレーターを実際に利用している様子をご紹介します。こちらはベルリンで開催されていた「IoT TECH EXPO」に出展していた時のデモです。スマートウォッチで利用しているアプリケーションは、先述のデモで車両の施錠/解錠を行ったのと同じです。
カーエミュレーターは車載機器が送受信するデータをクラウド上で再現しています。ブラウザとスマートウォッチがペアリングされると、画面上に端末情報が表示されます。スマートウォッチの画面上にあるLOCK/UNLOCKのボタンをタップすると、ブラウザ上で再現したクルマの鍵が開閉されます。
上記のカーエミュレーターは初期の段階のため、UIが非常にシンプルで最低限のものしかありませんが、現在は複数のAPIを利用できるようになっており、コンソールのログも表示するようになっています。
こちらのカーエミュレーターと、サンプルのアプリケーションは、ハイモビリティのデベロッパーセンターで公開しています。
そして、このカーエミュレーターは2017年7月24日から開催されるMercedes-Benz(メルセデス・ベンツ)のハッカソンでも提供されることが決まりました。このハッカソンではメルセデス・ベンツが各種モデルの状態などを確認・操作するためのAPIを80以上利用できるようにしています。開発者はこれらのAPIを利用して、自動車向けアプリケーションを開発します。
Copyright © ITmedia, Inc. All Rights Reserved.