SparkfunのUSBホストシールドでADKしてみた。


201105142100.jpg

5月10日、Google I/OでAndroid Open Accessory Development Kitが発表されましたね。
電子工作クラスタの皆は、自作の機器をスマートフォンに接続するソリューションを 手に入れて、しかもデモがArduinoベースで組まれているので、もうワクワクです。

日本の株式会社アールティというところが、 GoogleがUSBセッションで配布したボードと同等の物を31,500円で販売しているのですが、ちょっとずいぶんお高いので、買おうという気にはなれませんでした。

しかし、ADKの回路図を見ていると、MAX3421Eという、Sparkfun社のUSB Host Shieldでも使っているチップが載っています。
これは手持ちのArduinoと SparkfunのUSB Host ShieldでもADKで遊べるんじゃないかと思って試してみました。

色々試行錯誤しましたが、結果、簡単に実現する方法が判明しました。

続き↓

手順は簡単です。
ADKをダウンロードしてきて、ADK_release_0506→firmware→arduino_libsの中にある、AndroidAccessoryとUSB_Host_Shieldフォルダを、Arduinoのライブラリフォルダにコピーします。
僕は自分のライブラリフォルダ(~/Documents/Arduino/libraries) にコピーしました。

ここまでは普通なのですが、ポイントが2つあります。

  1. ADKにはUSB_Host_Shieldライブラリが含まれていますが、本家のfelisさんのもので上書きします。
    上書きする必要があるのは、
    Max3421e_constants.h
    Max3421e.h
    Max3421e.cpp  
    どれもFebruary 25, 2011という日付になっているバージョン(100644)で試しました。
  2. SparkfunのUSBホストシールドは、本家のものとピンが異なっています。
    Max3421e_constants.hに、
    #define MAX_GPX 8
    #define MAX_RESET 7
    という記述がありますが、これを
    #define MAX_GPX 7
    #define MAX_RESET 8
    と書き換えて、Sparkfun仕様にするようにしてください。
    これはSparkfunのページにも記述があります。

これらの変更を終えたら、ADKに付属のdemokit.pdeを参考に、適当なスケッチを書いてやります。

Arduinoの注意点はもう一つあります。
Arduinoへの給電がUSBのみだと、どうやらUSBホストシールドからUSBに給電される電力が足りなくなる様です。
ですので、ArduinoにはACアダプタから給電してやる必要があります。
また、USBホストシールドのUSB端子横にスイッチがあるのですが、これはON側にしておかなければなりません。

Android側ですが、私はNexus Oneに2.3.4を入れ、また、XOOMに3.1を入れて試しました。
Eclipseの操作は、ドキュメントの通りにしました。  
あえて注意をすべき点を書いておくと、Google APIsのLevel 10と12をインストールしておく必要があるみたいです。

あとはデバイスを接続して、Eclipseにプロジェクトを新規作成し、コードを読み込み、Run demokitして端末にapkを転送してやるだけです。

ArduinoにビルドしたスケッチをUploadして、Nexus OneとUSBホストシールドを接続するとダイアログが表示されます。

IMG_1545

XOOMだと、こんな感じです。

IMG_1550

それぞれ、OKを押してやると、DemoKitアプリケーションが起動します。

IMG_1549

IMG_1552

ここまでできたら、あとは自由にハードウェアをArduinoに接続して、アプリケーションを書いてやるだけのはずです。

アールティのボードを買うと31,500円もしますが、スイッチサイエンスでArduino UnoとUSBホストシールドを購入すれば6,000円でお釣りがくるでしょう。
幸い、手元にどちらもあったので、何も追加で購入せずに楽しめました。