2013年1月24日木曜日

スマートウォッチi'm WatchでMJPEGストリームを表示してみた

前回のエントリでi'm Watchを用いてプラレールを操作する方法を紹介しました。今回は、MJPEGをストリーミングするタイプのWifiカメラの映像をi'm Watchで受け取って表示してみます。

いつものプラレールですが、使用例の動画が下記になります。


今回のポイントは、プラレール上のXperia Rayからの映像がMJPEGストリームとして送信され、i'm Watchがそれをデコードして表示している点です。以下で解説するように、動画はBluetoothテザリングで送られてきますので高速にはできず、毎秒5フレーム程度です。

なお、同時にプラレールの操作もi'm Watchで行っていますが、これは前回のエントリに基づいています。

仕組みとサンプルソース

システムの大まかな流れは下の図のようになります。

動画を送信するXperia Rayでは、Google PlayからインストールできるIP Webcamというソフトウェアを導入して実行しています。IPWebcamはサービスとしてバックグラウンドで実行できますので、他のアプリ(ここではBluetoothでPICマイコンに命令を送信するもの)を同時に実行できます。IP Webcamの設定の注意点は以下の通りです。上図で分かるようにデータはBluetoothで送られますので、データ量を減らすことが重要です。
  • Resolution: 320x240に。データ量削減のため
  • Quality: 30~50程度。低いほど画質が下がるが、データ量は減るので有効
  • Orientation: Landscape
  • FPS limit: 5以下に。一秒間に送られる画像の枚数
i'm Watch用の受信アプリですが、MJPEGのデコードに特化したサンプルのソースを
に置きました。このアプリをi'm Watchにインストールして利用します。注意点は以下の通りです。
  • i'm Watchを母艦(上の図ではXperia Ray)と接続し、Xperia Ray側でBluetoothテザリングを有効にします。なお、今回はXperia Rayにはカスタムロムをインストールしています(CM10-based JCROM)。
  • i'm Watch側のアプリから母艦のIPアドレスを指定する必要があります。GUIによる設定画面を用意しましたので、そちらで設定を行います(追記2013.4.30)。なお、androidでBluetoothテザリングを行うと母艦側は192.168.44.1になるようなので、その値を初期値としてあります。
このサンプルを使用しているイメージは下図のようになります。いい感じです。この図では母艦はCM10-based JCROMをインストールしたGalaxy S3です。


おわりに

届いた当初は何に使ったらよいのか途方に暮れたi'm Watchでしたが、adbが入ったファームウェアが公開され、自作アプリを試せるようになると俄然愛着がわきますね。時計としてはまあちょっと残念ですが(毎日充電しなきゃいけないし)。

expansysには色によって在庫があるようなので、気になる人は試してみては?

こちらもどうぞ


2013年1月21日月曜日

スマートウォッチi'm Watchでプラレールを操作してみた

android 1.6ベースのスマートウォッチi'm Watchでプラレールを操作してみました。早速ですが動画はこちら。



操作の流れは下図のようになります。

i'm Watchは母艦であるGalaxy S3とBluetoothテザリングによりネットワークを共有しているので、i'm WatchからGalaxy S3へソケット接続し、命令を送信します。Galaxy S3は受け取った命令をもとに、プラレール上のPIC24FマイコンへBluetooth命令を送信し、モーターを動かしています。なお、今回母艦であるGalaxy S3にはカスタムロム(CM10-based JCROM)をインストールしています。

i'm WatchとPICは直接通信できないの?

当初はi'm WatchとPICを直接通信できないかと思っていました。i'm Watchはandroid 1.6ベースなので、自作アプリからBluetoothを利用するときは(例えば)backport-android-bluetoothなどを使わねばならないのですが、実際にやってみると

のようにbackport-android-bluetoothが必要とするandroid.bluetooth.IBluetoothDeviceがないと言われたので今回は断念しました。

ソースとか

通信のサンプルソースは以下の通りです。
このサンプルの利用イメージは下図のようになります。

母艦からPICへの送信アプリは、hrdakinoriさんのDroidControlにサーバーソケット機能を追加して作成しています。hrdakinoriさんに感謝します。

なお、i'm Watch用アプリであるDroidControlImWatchでは、母艦のIPアドレスを指定する必要があります。設定用のGUIを用意しましたので、そちらで設定を行ってください(追記2013.4.30)。なお、androidでBluetoothテザリングを行うと母艦側は192.168.44.1になるようなので、その値を初期値としてあります。ポートは両方のアプリで指定する必要がありますが、今回は8081にしています(特に根拠はないです)。

参考にしたサイト