[[12/8]] * Adk開発環境の構築 [#q6f622a4] - http://developer.android.com/tools/adk/adk.html *** 1. Arduino (1.0 以上)の開発環境をインストール [#w1805f29] - http://arduino.cc/en/Main/Software *** 2. ADK パッケージのダウンロード [#nbaea27a] - https://dl-ssl.google.com/android/adk/adk_release_20120606.zip *** 3. Arduino の例題プログラムやライブラリやハードウェアの仕様が入ったパッケージをダウンロードして、解凍 [#l997c43f] - app, arduino_libs, hardware ディレクトリがある。 -- https://dl-ssl.google.com/android/adk/adk_release_20120606.zip -- http://developer.android.com/tools/adk/adk.html *** 4. Arduino開発環境にADKライブラリのインストール [#g5f335b0] - arduino_libs/AndroidAccessory と arduino_libs/USB_Host_Shield directories を <arduino_installation_root>/libraries/にディレクトリごと、すべてコピー。 *** 5. Arduino のスケッチ(firmware)を作成し、Arduinoに書き込み [#u8adfbb2] - 以下、ADKの firmware の簡単なスケッチの例(今後、ずっとこれを使います) #include <Max3421e.h> #include <Usb.h> #include <AndroidAccessory.h> /* data format pin A0-A7 ... analog input 4-7 ... digital input 8-11 ... digital/analog(pwm) output receive [ 'a' or 'd' pin, data, ] send [ 4 (=data_length(byte)), 'a' port, data(high), data(low) ] or [ 4 (=data_length(byte)), 'd' data (pin 0-7) data (0x00) data (0x00) ] */ #define analogInMax 8 #define digitalInMax 8 #define digitalOutMax 14 int analogIns[analogInMax]; int digitalIns[digitalInMax]; int digitalOuts[digitalOutMax]; int digitalVal; AndroidAccessory acc("Google, Inc.", "AdkTwitter", "DemoKit Arduino Board", "1.0", "http://www.android.com", "0000000012345678"); void setup(); void loop(); void setup() { Serial.begin(115200); Serial.print("\r\nStart"); for(int i=0;i<digitalInMax;i++) digitalIns[i]=i; for(int i=0;i<digitalOutMax;i++) digitalOuts[i]=i; for(int i=0;i<digitalInMax;i++) pinMode(digitalIns[i],INPUT); for(int i=digitalInMax;i<digitalOutMax;i++) pinMode(digitalOuts[i],OUTPUT); // pinMode(ledPin, OUTPUT); // pinMode(b3Pin, INPUT); analogIns[0]=A0; analogIns[1]=A1; analogIns[2]=A2; analogIns[3]=A3; analogIns[4]=A4; analogIns[5]=A5; analogIns[6]=A6; analogIns[7]=A7; delay(5); // add 2012 12/9 acc.powerOn(); } void loop() { byte inMsg[3]; byte outMsg[4]; if (acc.isConnected()) { int len = acc.read(inMsg, sizeof(inMsg), 1); int i; byte b; if(len>0){ if(inMsg[0]=='a'){ if(inMsg[1]<digitalOutMax) analogWrite(digitalOuts[inMsg[1]], inMsg[2]); } else if(inMsg[0]=='d'){ if(inMsg[1]<digitalOutMax){ if(inMsg[2]==1) digitalWrite(digitalOuts[inMsg[1]], HIGH); else digitalWrite(digitalOuts[inMsg[1]], LOW); } } } digitalVal=0; for(int i=0;i<digitalInMax;i++){ int b=0; if(digitalRead(digitalIns[i])==HIGH) b=1; digitalVal=digitalVal<<1 | b; } outMsg[0]='d'; outMsg[1]=digitalVal & 0xff; outMsg[2]=0; outMsg[3]=0; acc.write(outMsg,4); int sensorValue; for(int i=0;i<analogInMax;i++){ sensorValue = analogRead(analogIns[i]); outMsg[0]='a'; outMsg[1]=i; outMsg[2]=(sensorValue>>8) & 0xff; outMsg[3]=sensorValue & 0xff; acc.write(outMsg,4); } } delay(100); } - 注意 2012 12/9 -- 12/8 の講習会中、大部分のArduino Mega ADK が Android 端末と接続したとき、Android 端末から認識されない事象が発生しましたが、この原因は以下の疑いが強いことがわかりました。以下の URL の対処方法に従い、setup() の acc.poworOn(); の前に delay(5); を加えることにより、この障害の発生を緩和することができます。 --- http://projectc3.seesaa.net/article/275855597.html *** 6. Android 側開発環境構築 [#k817d114] - Eclipse の Android SDK マネージャ のアイコンをクリックして起動し、Android 4.0 ( Google APIs 14 を含む) をインストールします。 -- &ref(12/8/eclipse-adk-1.png,50%); -- &ref(12/8/eclipse-adk-2.png,30%); *** 7. Android 側アプリ開発 [#m657b89d] - Eclipse の上で、UsbAccessory などを使ったAndroid のプロジェクトを作成します。既存の、ソースが公開されているプロジェクトをダウンロードして、それを書き換えることで、開発が比較的楽にできます。ここでは、 https://github.com/takashiyamanoue/AdkArduino01 のページから、ZIP に固められたプロジェクトをダウンロードして利用することにします。 -- &ref(12/8/AdkArduino01GitHub-1.jpg,50%); - ダウンロードした AdkArduino01-master.zip を解凍します。解凍するとAdkArduino01-master ディレクトリの中に AdkArduino01 ディレクトリが入っています。 - Eclipse を起動し、[File]->[New]->[Other] を選びます。 -- &ref(12/8/Android-eclipse-2.jpg,50%); - Android Project from Existing Code をクリックし、[Next]ボタンをクリックします。 -- &ref(12/8/Android-eclipse-3.jpg,50%); - 解凍したディレクトリ内にある AdkArduino01 ディレクトリを選んで、[Finish]をクリックし、Eclipse にダウンロードしたプロジェクトを読み込みます。 -- &ref(12/8/Android-eclipse-4.jpg,50%); - Eclipse の Package Explorer に org.yamalab.android.AdkArduino01.AdkArdinoLaunch が現れます。この段階では、エラーがあることを示す赤い四角内に白いバツ印のアイコンが表示されています。 -- &ref(12/8/Android-eclipse-5.jpg); - 読み込んだプロジェクトの properties の android の項目で Google APIs, Platform 4.0, API Level 14 を選びます(講習会で使う ICONIA TAB の場合)。このAPI を選ぶことにより、ADK で利用するUSB アクセサリなどが利用できるようになります。これでエラーが消えます。 -- &ref(12/8/android-eclipse-1.png,25%); - 読み込んだプロジェクトのソースコードを書き換えます。 -- AdkArduinoActivity.java の boolean emulatorDebug= ... ; の行が boolean emulatorDebug= false ; であった場合、これを boolean emulatorDebug= true ; に書き換えます。このプロジェクトの場合、emulatorDebug を true にすることにより、Arduino との通信を行わないようにしてGUI のデバッグなどが行えるようになります。 *** 8. Eclipse 上のデバッグ [#u84835dc] - Eclipse のデバッグ機能、 LogCat、Emulator を使ってデバッグします。 *** 9. パッケージの生成、実機へのインストール、実機でのデバッグ [#yd81d0df] - AdkArduinoActivity.java で boolean emulatorDebug= false ; とします。 - Package Excplorler の、このプロジェクトを右クリックして、パッケージを作成します。 -- &ref(ADK 開発環境の構築/android-export-1.jpg,50%); &br; &br; &br; -- &ref(ADK 開発環境の構築/android-export-3.jpg,50%); --- package を作成するプロジェクト名を入力(デフォルトのまま)して[next] をクリック &br; &br; &br; -- &ref(ADK 開発環境の構築/android-export-4.jpg,50%); --- create new key store を選択 --- キーファイル名(xxx.key など)とパスワードを入力 &br; &br; &br; -- &ref(ADK 開発環境の構築/android-export-5.jpg,50%); --- aliase 名(xxx など)を入力 --- パスワードを入力 --- 有効期限を入力 &br; &br; &br; --- 有効期限を入力 --- 作成者の氏名を入力 &br; &br; &br; -- &ref(ADK 開発環境の構築/android-export-6.jpg,50%); --- パッケージ名(xxx.apk) を入力 --- [finish] を入力 &br; &br; &br; - Android 端末を USB ケーブルで PC と接続し、 Android 側アプリをAndroid 端末の SDカードに保存し、アプリをインストールします。 -- アストロファイルマネージャなどを利用 *** 10. 実行。 [#q1a71d18] - 接続 -- Android端末(ICONIA TAB) は電源ケーブルで電源を供給し、USB ケーブルで、Arduino Mega の B 端子(平べったい端子)と接続します。 -- Arduino Mega の A端子(四角い端子)とパソコンをUSB ケーブルで接続し、Arduino Mega に電源を供給します。 -- 接続が終わると、Android 端末に、先ほどインストールした、AdkArduino を起動するか?を尋ねるウィンドウが表示されます。このときは、起動をキャンセルします。 - 起動 -- Android のアプリ一覧を表示し、AdkArduino をタップして起動します。最初、Android ロボットが寝た画像が表示されますが、しばらくすると、デバッグで見た画像に変わり、変化するA0の値などが表示されます。 -- 起動がうまくいかないときは、Android の設定のアプリケーションのところで、AdkArduino を強制停止すると、起動する場合があります。 ---- #counter