Hatena::ブログ(Diary)

Android(アンドロイド)情報-ブリリアントサービス RSSフィード


Corona(コロナ)情報−ブリリアントサービス

2011-09-20

ADKとArduinoの使いかた

06:53 |

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-ADKunoには必要ありません。

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等でインストールできます。


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

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

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

ここではBeagleBoardIPアドレスを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のプラットフォームとそれに必要になる機能

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

ikuyama10ikuyama10 2011/09/23 10:02 こんにちは。日本Androidの会福岡支部の山口と申します。ADKの情報を検索していてこのページにたどり着きました。今後も興味深い記事、期待しています。ところで、日本Androidの会福岡支部ではこのたび11月12日(土)にAndroid Make Daysというイベントを予定しています。イベントの内容はAndroid+Arduino(PICもあり)でMakeなことをしようというものです。記事の内容を拝見していて、是非ともお話を伺ってみたいと思いました。もしご興味があれば、メールにて詳細をお伝えいたしますので、宜しければメールをいただければと思います。

bs-androidbs-android 2011/09/29 09:30 反応が遅くなってしまい申し訳ありません
もしよろしければ
queryあっとbrilliantservice.co.jp
まで詳細をいただければ幸いです

re_shikajirore_shikajiro 2012/05/11 18:19 https://sites.google.com/a/brilliantservice.co.jp/beagleboard/adk/demokit_ADK.pde?attredirects=0&d=1
にアクセスできなかったっす><