2011年9月20日火曜日

ADKとArduinoの使いかた



f:id:bs-android:20110919202258j:image


先月の記事に続きについてADK-demoボードの使いかたとAndroidAccessoryデモアプリのビルド方法についてレポートいたします。


☆ Android Accessoryとは


今年5月にgoogleから発表されたAndroidハードウェア拡張規格のことです。


詳しい情報はこちらを参照してください。


 http://developer.android.com/guide/topics/usb/adk.html


今回はgoogleで公開されているソースコードを使用しました。


 https://dl-ssl.google.com/android/adk/adk_release_0512.zip





☆ Android Accessoryの面白いところ


一般的にハードウェアの拡張といえばUSBに周辺機器を接続するというイメージがありますが


Android Accessoryは、なんと外部装置がUSBホストでAndroid端末が周辺機器として振舞います。


この方式を取るメリットとしてはスマートフォンのように電力的に非力なデバイスから


外部へ電力供給させることなく、外部から電力供給を受けながら半永久的に動作させることが


できることです。またフレームワーク層でハードウェア/ドライバを隠蔽してくれていることから


難しいドライバなどを書かなくても外部機器を接続できるメリットもあります。





1.Android Accessoryを実現するためのハードウェア


当初Android AccessoryはArduinoをベースとした実装として発表されましたが


最近になってArduinoを用いないADK対応ボードもいくつか出てきているようです。


今回はADKの基本を知るためにもArduinoをベースにしたものを用いることにしました。


Arduinoを用いたADKを実現するアプローチとして次のようなものがあります。


 a) RT-ADKボード


 b) Arduino ADKボード


 c) Arduino MEGA 256 + USB HOST Shield 2.0


d) Arduino uno + SparkFun USB HOST Shield





RT-ADKボードとサブボード


f:id:bs-android:20110919202257j:image:w360


RT-ADKボードはGoogleのロゴも付いていて、持っていて嬉しい基板ではありますが


ちょっと入手が大変なこともあり、今回は本家Arduinoが出しているArduino ADKボードでの


使用方法も併せて記載いたします。





☆Arduino USBシールドとADKボードの違いについて


オリジナルのUSB HOSTはシールドという形で拡張されるようになっていますが


RT-ADKボードとArduino ADKではシールド接続用の信号を温存するために


USB回路の接続にArduino非互換の信号を使っています。


そのため本家 USB HOSTシールドのライブラリをそのまま使うことができません


ちょっと古いですが最初のうちはADK Package配布に含まれているライブラリを使うようにしてください。


どうしても新しいものを使いたい方は次のピン割り当てを書き換えれば使えるようになるはずです。


 INT GPIO_9 -> ATMEGA2560(PE6)


 RST GPIO_8 -> ATMEGA2560(PJ2)


 GPX GPIO_7 -> ATMEGA2560(PJ3)





1-1.ツールとライブラリの準備


ADKで必要となるArduinoの開発環境は次のようにインストールを行う必要があります。


・Arduinoソフトウェア


Arduinoを動かすための基本ツールは次の場所から入手することができます。


 http://arduino.cc/en/Main/Software


ここでは9/20時点で最新版であるArduino 0022 を使用しています。


arduino-0022.zipをダウンロードし、任意のフォルダに展開します。


このツールは任意のフォルダから起動できるので外部ドライブに展開しても使用することができます。


今回はG:\に展開したものとして記載しています。





・Arduino ADK追加ファイル


Arduino ADKを使うために必要な追加ファイルは次の場所に公開されています。


なおこの追加ファイルはRT-ADKやunoには必要ありません。


http://www.arduino.cc/en/Main/ArduinoBoardADK


一番下にWindowsドライバのinfファイルが入ったzipファイルがありますのでダウンロードして


Arduino MEGA ADK.infをG:\arduino-0022\driversにコピーしておきます。





・Android Accessoryライブラリ


Android Accessoryで使用するライブラリをインストールします。


adk_release_0512.zipを展開しADK_release_0512\firmware\arduino_libs以下にある


次の2つのフォルダをG:\arduino-0022\librariesにコピーします。





・Capacitive Sensingライブラリ


RT-ADKボードに載っているタッチセンサーのライブラリもインストールします。


 http://www.arduino.cc/playground/Main/CapSense


ここに公開されている CapacitiveSense003.zip をダウンロードし


展開されたCapacitiveSense003フォルダをG:\arduino-0022\librariesにコピーします。





1-2. スケッチのビルド


Arduinoの世界ではソースコードをスケッチと呼びます。


ADKで配布されているコードにはスケッチも含まれていますので、これをビルドして使用します。


まずADK_release_0512\firmwareにあるdemokitフォルダをG:\arduino-0022にコピーしておきます。


arduino.exeを起動後にFile -> Openを実行し 上記コピーしたフォルダにあるdemokit.pdeを開きます。


次にTools -> Board にて "Arduino Mega 2560"を選択します。


Sketch -> Verify Compileを実行することによりビルドが開始されます。


正常にビルドされればステータス部分に"Done compiling"と表示されます。





☆Arduino ADKのみを使う場合は


Arduino ADKには RT-ADKの付属サブボードのようなものがありませんのでブレッドボードで代用します。


今回はフルカラーLED3個とスイッチ2個を載せてみました。


f:id:bs-android:20110919202256j:image:w360


RT-ADKのサブボードに比べブレッドボードに載せた回路はなかり簡素なものとなっていることから


ADKオリジナルソースから次のコードをコメントアウトする必要があります。


 JoyStick


 Temp/Light Sensor


 Relay


 ServoMoter


 CapacitiveSenser


修正済みのスケッチを次の場所に置きましたので、こちらを参考にして下さい。


https://sites.google.com/a/brilliantservice.co.jp/beagleboard/adk/demokit_ADK.pde?attredirects=0&d=1





1-3. スケッチのアップロード


ビルドが終わったスケッチをアップロードする前に、予めPCとAdruinoを接続しておきます。


Arduinoボードを最初に接続した時にはドライバを要求されますので次のドライバをインストールして下さい。


RT-ADK -> G:\arduino-0022\drivers\FTDI USB Drivers\


 Arduino ADK -> G:\arduino-0022\drivers\Arduino MEGA ADK.inf


次に Tools -> Serial Portでボードに接続しているポートを指定します。


File -> Upload to I/O board を実行すればビルドされたスケッチがボードへ転送され


ADKボードとして使用することができます。





2.AndroidAccessoryデモアプリ(DemoKit)


AndroidAccessoryを動作させるためのデモアプリはAndroid Open Accessory Development Kit


(adk_release_0512.zip)に含まれています。


今回はこのデモアプリを使って動作確認するところまで記載いたします。


なお、とりあえず動作だけという方のためにビルド済みのapkファイルも準備しました。


https://sites.google.com/a/brilliantservice.co.jp/beagleboard/adk/DemoKit_singed.apk?attredirects=0&d=1


署名付きにしましたので、そのまま adb install等でインストールできます。





☆ ネットワーク越しのデバッグ


ADKはadbで使われるUSBポートを塞いでしまうため、USB接続によるデバッグができなくなります。


そこで有線LAN経由でadbを使えるようにします。


ここではBeagleBoardのIPアドレスを192.168.1.23として記載ています。


IPアドレスは使用する環境に合わせて読み替えてください。


・BeagleBoard側の設定


adbデーモンを停止したのちにadbの設定切り替えます。


シリアルコンソールから次のように入力します。



# stop adbd
# ifconfig usb0 192.168.1.23 up
# setprop service.adb.tcp.port 5555
# start adbd


adbdはAndroid起動時にUSB接続となってしまいますので


起動ごとに上記の操作を行うようにしてください。





・ホスト側の設定


いったんadbサーバを停止してからネットワーク経由で接続を行います。



adb kill-server
adb start-server
adb connect 192.168.1.23:5555


正常に接続できれば、USB接続と同じように"adb"や"ddms"を使ってデバッグを行うことができます。





2-1. ソースコードの準備


今回は Android Open Accessory Development Kitで公開しているソースコードを用いました。


ここで配布されているADK Package(adk_release_0512.zip)をD:\workspaceに展開します。





2-2. Eclipseプロジェクトの作成


配布されているソースコードはそのままビルドすることができないことから


新規プロジェクトを作成しつつインポートさせます。


Eclipseを起動後 File -> New -> Android Projectで新規プロジェクトを作成します。


f:id:bs-android:20110919202254p:image:w360


新規プロジェクトのダイアログが出ますので次の項目を入力してFinishボタンを押します。


f:id:bs-android:20110919202253p:image:w360


Project nameは任意の名前でかまいません


 "Create project from existing source"を選択し


 "D:\workspace\adk_release_0512\ADK_rlease_0512\app"を指定


Build Targetは"Google APIs(2.3.3)"を選択


※Android 2.3.4の項目が無いのは2.3.4発表時に3.0のためにAPI Level 11が定義されていたため


適切なAPI Levelが割り当てられなかったためのようです。


そのため2.3.4は2.3.3+αとして扱われています。





2-3. ビルド、デバッグ


ADBの接続ができていればそのまま動作させることができます。


Targetバージョンが一致していないため警告マークが出ますが問題ありません。


f:id:bs-android:20110919202252p:image:w360


デモアプリをインストール後にADK ボードを接続すると次のような画面が出ます。


f:id:bs-android:20110919202251p:image:w360


ここでOKのボタンを押すとデモアプリが動き出します。


ボタンやジョイスティック操作に合わせて画面が変化したり、R,G,Bのスライダを


動かすとLEDが点灯すれば正常に動作しています。





今回は早足ではありましたがAndroidに独自ハードウェアを付ける方法について解説いたしました。


AndroidといえばJavaアプリというイメージがありますが、Adruinoが繋がるようになれば


簡単にハードウェアを触れるようになります。


これを機にハードウェアに興味を持ってくださる方が増えれば幸いです。





次回はADKの応用編としてFarmboxのプラットフォームとそれに必要になる機能


(無線LANとWebカメラなど)の追加方法についてレポートする予定です。





140 180 Android

記載されている会社名、および商品名等は、各社の商標または登録商標です。

2 コメント:

  1. 反応が遅くなってしまい申し訳ありません
    もしよろしければ
    queryあっとbrilliantservice.co.jp
    まで詳細をいただければ幸いです

    返信削除
  2. https://sites.google.com/a/brilliantservice.co.jp/beagleboard/adk/demokit_ADK.pde?attredirects=0&d=1
    にアクセスできなかったっす><

    返信削除

Related Posts Plugin for WordPress, Blogger...