[[FrontPage]] * 12/8 Arduino と Android の接続 ... ADK [#ffa552f2] ** ADK の概要 [#x88417b5] - ADK ...Accessory Development Kit - ADK はAndroid のアクセサリを作成するための、参考的な実装です。これは、ハードウェア会社や電子工作を趣味としている人々のスタートポイントとして利用できます。各ADKのリリースは、ソースコードとハードウェアの仕様が一緒に供給されます。これにより、あなた自身のアクセサリを簡単に作ることができます。新しい、これと異なるADKのハードウェアを作ることを推奨します。 &br; Android の機能を強化するため、オーディオのドッキングステーションや、運動機器や、個人的な医療検査機器や、電子百葉箱や、その他の外部ハードウェア機器などがAndroid アクセサリとして使えます。&br; アクセサリは、Android Open Accessory (AOA)プロトコルを使って、USB ケーブルやBluetooth 接続を通じて、Android デバイスと通信します。もし、USB を使うアクセサリを作成する場合、あなたのアクセサリハードウェアとAndroid が通信するために、どのようにAOAプロトコルを実装するか、理解する必要があります。より詳しくは、 [[Android Open Accessory protocol:http://source.android.com/tech/accessories/]] をみてください。 - 参考ページ/文献 -- http://itpro.nikkeibp.co.jp/article/NEWS/20110511/360206/ -- http://developer.android.com/tools/adk/index.html -- Smartphone World Volume. 3「Android × Arduino 即効プログラミング」CQ出版社 ** 簡単なADK応用プログラムの開発例 [#j9744a01] - http://y-anz-m.blogspot.jp/2011/12/androidhello-adk.html ** ADK 開発環境の構築 [#s8ca8b11] - 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; 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); } *** 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] *** 8. Android 側アプリをAndroid 端末の SDカードに保存し、アプリをインストール [#ode9cf9c] -- アストロファイルマネージャなどを利用 *** 9. Android 端末と Arduino をUSBケーブルで接続。 [#r8905741] *** 10. 実行。 [#q2ec023b] ** ADK利用の流れ [#n3745f4b] - 1. BroadcastReceiver を利用して、ACTION_USB_PERMISSION を判定する。 - 2. UsbAccessoryのインスタンスを取得する。 - 3. UsbAccessoryのインスタンスよりParcelFileDescriptorを取得する。 - 4. ParcelFileDescriptorよりFileDescriptorを取得し、FileInputStreamとFileOutputStreamを取得する - 5. 各Streamを利用し、入出力の処理を行う。 ** Arduino の光センサの状態をAndroid に表示、Android でArduino のLEDを点滅 [#gd08bddf] ** デバッグ [#p0b08f6e] - LogcatViewer [#z89dd6d3] -- http://d.hatena.ne.jp/bs-android/20100519/1274206549 ** Android で、LED 点灯自動制御 [#t0389563] ** 総合演習 [#ydd1ed5b] - 隣どおし、または前後で2-4人のグループを作って、今までのプログラムを参考にしたり、改造したりして、何か面白いものを作ってください。 ---- #counter