空を見上げて
トップページ » ソフト » スマートフォン » Nexus7(その3)

Nexus7(その3)

さっそくNexus7にUSBをつなぐ検討。

 Nexus7はHostにもDeviceにもなる。但しHostにするにはOTGケーブルを別途購入の必要がある。どうも海外製らしくAmazonで購入したが、時間がかかりすぎ。しょうがないので¥100ショップのマイクロUSBアダプタを改造して使用した。
 目標としてArduinoをつなぐことを考える。これが自由にできれば後は発展形でいろいろ自作が可能になるように思う。
 大雑把にはUSBで制御するには4つの方法がある。

方式1)USBデバイスドライバを入れる
 Androidではドライバをインスト-ルできない。これは権限の問題でrootをとれば可能になる。大半のCPUはARMなのでARMのLinuxドライバがあればいいが、カーネルのVerなどで入らないこともある。
 FTDIなどはメジャーなChipなのでドライバは探せばあると思う。後はアプリを書けばよいが、これも小さなネイティブアプリを書いてそれをAndroidのアプリと通信するような書き方になる。
*V1.6ではこの方式をやっていた。しかし「rootをとるのが一般的ではない」「とれても設置が面倒」「アプリはクロス環境を構築しないとできない」など欠点としては敷居が高すぎるし作業に危険もある。
 条件さえ満足すれば、V1.5でも動くし、ネイティブコードなので実行も高速。

方式2)MicroBridgeによる接続
 これは考え方としてはAndroidのADB(Debug)コネクタを通じて通信させるもの。AndroidからはIPポートに見える。「非ADK」とも呼ばれている。
 特徴としては、ADBが使えればAndroidのVerは問わないのが特徴。
http://code.google.com/p/microbridge/
 Arudinoでやる場合Arudino側がHostになるのでUSB Host Sieldなどが必要になる。そちらを購入しなくてもHarpyという一体化されたKitもあるので、こちらなどを利用する方が良いように思われる。
http://www.harpyhack.com/
ただNexus7側がデバイスに見えるので、これなら相手から充電させられそう。
*比較的、安定しているようでNexus7でもスンナリ動いた。MicroBridgeはAndroidの上ではTCP/IPに見えるのでIPのソフトを書けばPCと通信もできる。
これなら(Arduinoは関係なく)ワイアレスでPCと接続できる...があまり思いつかない。PCで入れた語句をNexus7で検索させるようなものを作ればPCの画面が多少は広く使えるが、これを使わなくてもWiFiKeyboardとかEzKeyboardを入れればPCでキー入力ができる。
https://play.google.com/store/apps/details?id=org.jakky1.ezKeyboard&hl=ja
ブラウザから入力するならPCでやった方が早いので、作っても使うかどうか疑問もある。

方式3)ADKによる接続
 これはV2.3からサポートされている。(ADKV1.0)Googleの正当なやり方だが、不安定との悪評も多い。上と同じく、Arudinoでやる場合Arudino側がHostになりUSB Host SieldやHaarpyなどが必要になる。
 現在はADK2012というかプロトコルがUp(V2.0)したようで、USB以外でも使える。(BlueToothなど)
 Nexus7を購入してやっとここにたどり着いた。その間にArduinoのUSBもV2.0となり、ADKをサポートしはじめた。いろいろやっていると、このUSBV2の最新版が一番筋がいい。そもそも不思議なことに全部動くわけでもない。動かないサンプルもある。
 例えばTermはあるのだが、Androidのアプリが落ちる(起動できない。)しょうがないので自作してみた。できるには出来たが、何が悪いのか取りこぼしがある。
*Googleの純正はいいのだが、これなら形態としてMicroBridgeと変わらないし、さほどメリットが感じられなかった。Googleの提供しているサンプルの画面はやたら凝っているが、やっていることパケット内容で切り替えている。(LEDや温度センサなどがあるが、データ構造の形式で区別している)ADK 2012ともなると、サンプルでArduinoの旧型は見捨ててしまったような印象もある。
 これはUSBのアクセサリをつなぐと対応したアプリを自動的に立ち上げることができる。

方式4)USBデバイスを直接制御する
 V3.1より直接USBの制御を記述できるようになった。これを行うには一般的にはドライバ層で行われるようなやり取りをアプリケーション側で記述する必要がある。
 例えばArduinoではFTDIなどのChipでUSBからシリアル変換制御させるが、これをアプリで記述する必要がある。とは言っても汎用的なターミナルは既に存在しており、「Android USB Serial Monitor Lite」でできる。
https://play.google.com/store/apps/details?id=jp.ksksue.app.terminal
このソースも提供されていた。
他にも、
FTSampleTerminal
がオープンソースでライブラリ化されており、使いやすい。
https://github.com/ksksue/FTDriver
*Arduinoに限れば、これが一番形態として良いように感じた。
しかしNexus7に関して言えば電源はNexus7側から供給されるため内蔵電池で動いていることになる。この状態では充電できないので長時間駆動ができない。クレイドルが発売されてそれをつければ解決できるかもしれない。
 これはそういうUSBのアクセサリをつなぐと対応したアプリを立ち上げることができる。

結局は4種の開発をやってみたが、4)が筋が良いように感じた。(Nexu7ではDockが必要。一応側面にDock用のPinがある。)但しVer依存するのでそれを嫌うのであれば2)のADBが向いている。
やってみると(115200bps)ADB,USB直接は比較的取りこぼしがないがADKは何が悪いのか取りこぼしが発生する。通信速度というより、パケット間隔をあければよいようだが、制限がわからず使いにくい。

まとめると以下のような感じになる。
AndroidVer Android 利点 欠点
方法1:root 1.5より Host 高速 難易度高(一般向きではない)
方法2:ADB 1.5より Device 汎用性 USB-Hostの必要性あり
方法3:ADK 2.3より Device ? USB-Hostの必要性あり
方法4:USB 3.1より Host 安価

2)や3)をやる場合は、FTDIを外して単なるシリアルブリッジにしてしまった方がArudinoでは使いやすい。

使いやすそうな素材。
・Harpy
http://www.harpyhack.com/
 一応オープンソースであり小型にできている。Nanoで¥2880なのでArduino+USB Hostシールドよりは安い。ADBでもADKでもできる。
・AGB65 Android
http://www.robotsfx.com/robot/AGB65_ANDROID.html
 シリアルブリッジになっている。Harpyよりさらに小型になる。中身はBlackBoxなのでサンプルソフトを改造するような形になる。(ファームのソースは開示されていない。)¥6300なので、ブリッジにしてはかなり高くついてしまう。
これはデバイスのファームが不明なのでADKでしか動かない。

by   at 09:00
コメント

コメントはありません

コメントを書く




保存しますか?


(書式を変更するような一部のHTMLタグを使うことができます)


Please enter the security code you see here