USBホストシールドがAmazonから届いたので,AndroidとArduinoを繋いでADK(Accessory Development Kit)を試してみました.
最近のAndroid端末はUSB Hostを持っていてADK無しでもArduinoとシリアル通信できたりするので,あまり必要ないかも.ただ,Androidに電源を供給しつつ使えるので長時間動かせる利点はあります.(あとから気づきましたが,ドックやqiで電源供給できる端末ならUSBふさがってても大丈夫ですね...)
Arduino
USBホストシールド 2.0 for Arduino (Amazon)
ホストシールドは,2世代目の2.0のものを使います.
Arduino Leonardo (Amazon)
Unoや他のArduinoでも良いと思います.
あと,Android端末とHost Shiel間用のものと,ArduinoとPCの接続用にマイクロUSBケーブルが二本必要です.
開発環境・ライブラリ
普段はArduinoの開発環境は使わずavr-gccでやってるのですが,慣れるためにIDE使います.IDEのバージョンは1.0.6をインストール.
git cloneするなり,zipをダウンロードするなりして,説明通りにArduinoのlibrariesディレクトリにUSB_Host_Shield_2.0という名前で配置.
アプリ
サンプルコードは色々公開されているので,参考にしつつ.
サンプルコードを探していると「android.hardware.usb」パッケージを使ったものと,「com.android.future.usb」パッケージを使ったものが存在しますが, com.android.future.usb の方は Android 2.3 でのAPIなので,今から使うなら android.hardware.usb の方を使うのが良いです.
とりあえず,ここではADKのデモアプリがPlayストアにあるのでAndroid端末にインストールします.
動かしてみる
ArduinoにUSB Host Shieldシールドをつなぎます.
IDEで「ツール」→「マイコンボード」でArduino Leonardoを選択.USB_Host_Shield_2.0のサンプルに, adk/demokit_20/demokit_20.ino があるので,とりあえずこれを書き込みます.
書き込んだあと,Android端末にUSBケーブルで接続すると,アプリからUSBアクセサリに接続を確認するダイアログが出るので「OK」を押すと,DemoKitのアプリが立ち上がるはずです.
demokit_20.ino のサンプルは,DemoKitのアプリから送られてくるデータのうちLED1のREDの値をpin3に出力しているようなので,適当なLEDをつなげば,アプリ上でバーを動かすとLEDの明るさが変わると思います.
LEDを繋ぐのすら面倒だという場合は,
#define LED1_RED 13
として,Arduino Leonardoの基板上に載っているLEDにするのが良いです.(1行書いてしまった…)
他
Android と Arduino,構成文字が似ていて何度も書いていると???ってなります.