C LIS -
配布物の確認をお願いします ○   ブレッドボード                         ○   配線材 ○   LED (赤色)                            ●                       ...
2013/01/19        ADKハンズオン 2013
自己紹介 – 有山 圭二 ○   有限会社シーリスの代表 ○   普段はAndroidのアプリ開発とかしています     ●         たまにコントリビュートもしてるよ ○   電子工作の経験は、約2ヶ月01.19, 2013    Co...
今回は、              「発表ドリブン学習」です01.19, 2013     Copyright C-LIS CO., LTD. 2011                                              ...
発表ドリブン学習とは?              勉強会等での発表が決まってから、 ようやくその技術の勉強を本格的に始めること。01.19, 2013       Copyright C-LIS CO., LTD. 2011          ...
資料が出来上がったのは、午前3時頃でした01.19, 2013   Copyright C-LIS CO., LTD. 2011                                               7
ADK(Accessory Development Kit) とは ○   Android端末にアクセサリを接続する規格AOA(Android Open     Accessory)に準拠したデバイスや、対応アプリケーションを実     装する...
ADK 2011の概要 ○   オープンソースハードウェア”Arduino”に、Android端末     を接続する「USBホスト機能」を付加したもの。 ○   Androidとの通信をハンドリングするライブラリが配布さ     れている。0...
Arduino とは ○   Arduino(アルドゥイーノ)は、AVRマイコン、入出力ポー     トを備えた基板、C言語風のArduino言語とそれの統合開     発環境から構成されるシステム。 (Wikipediaより) ○   USB...
“Arduino IDE”の取得とインストール                                         http://arduino.cc/en/Main/Software01.19, 2013   Copyright ...
シリアルドライバのインストール (Mac OS)                                 http://www.ftdichip.com/Drivers/VCP.htm01.19, 2013   Copyright C-...
Arduino IDE の起動01.19, 2013   Copyright C-LIS CO., LTD. 2011                                               13
はじめて の スケッチ #define PIN_LED 13 void setup() {     pinMode(PIN_LED, OUTPUT); } void loop() {     digitalWrite(PIN_LED, HIGH...
Verify01.19, 2013   Copyright C-LIS CO., LTD. 2011                                               15
Arduino へ 書き込み01.19, 2013   Copyright C-LIS CO., LTD. 2011                                               16
Arduino MEGA ADK    PCへ接続     + 給電  Android端末へ01.19, 2013    Copyright C-LIS CO., LTD. 2011                               ...
ArduinoをPCに接続01.19, 2013   Copyright C-LIS CO., LTD. 2011                                               18
Arduinoを接続したポートを選択01.19, 2013   Copyright C-LIS CO., LTD. 2011                                               19
Arduinoの種類を選択01.19, 2013   Copyright C-LIS CO., LTD. 2011                                               20
書き込み01.19, 2013   Copyright C-LIS CO., LTD. 2011                                               21
動作の確認方法は?01.19, 2013     Copyright C-LIS CO., LTD. 2011                                                 22
LED               短い方がGND01.19, 2013   Copyright C-LIS CO., LTD. 2011                                               23
LEDを挿す              短い方がGND01.19, 2013             Copyright C-LIS CO., LTD. 2011                                         ...
LEDを点滅 #define PIN_LED 13 void setup() {     pinMode(PIN_LED, OUTPUT); } void loop() {     digitalWrite(PIN_LED, HIGH);   ...
01.19, 2013   Copyright C-LIS CO., LTD. 2011                                               26
何を作っていたのか01.19, 2013    Copyright C-LIS CO., LTD. 2011                                                27
電子回路01.19, 2013   Copyright C-LIS CO., LTD. 2011                                               28
LEDが壊れるかも01.19, 2013   Copyright C-LIS CO., LTD. 2011                                               29
抵抗を入れる01.19, 2013   Copyright C-LIS CO., LTD. 2011                                               30
どこに?01.19, 2013   Copyright C-LIS CO., LTD. 2011                                               31
Arduino上には、ほとんど部品が置けない01.19, 2013   Copyright C-LIS CO., LTD. 2011                                               32
回路は外に作る01.19, 2013   Copyright C-LIS CO., LTD. 2011                                               33
ブレッドボード01.19, 2013   Copyright C-LIS CO., LTD. 2011                                               34
ブレッドボード (配線)01.19, 2013   Copyright C-LIS CO., LTD. 2011                                               35
ブレッドボードに配線01.19, 2013   Copyright C-LIS CO., LTD. 2011                                               36
ブレッドボードに配線01.19, 2013   Copyright C-LIS CO., LTD. 2011                                               37
ブレッドボードに配線13番ピンへ GNDへ 01.19, 2013   Copyright C-LIS CO., LTD. 2011                                                38
LEDをゆっくりと点滅 #define PIN_LED 13 void setup() {     pinMode(PIN_LED, OUTPUT); } int light = 0; int p = 1; void loop() {     ...
オシロスコープで観察01.19, 2013   Copyright C-LIS CO., LTD. 2011                                               40
Width PWM (Pulse Wave Modulation)01.19, 2013   Copyright C-LIS CO., LTD. 2011                                             ...
スイッチ - タクトスイッチ01.19, 2013   Copyright C-LIS CO., LTD. 2011                                               42
スイッチでLEDをON/OFFする01.19, 2013   Copyright C-LIS CO., LTD. 2011                                               43
SWTCH ILLUMINATE LED#define PIN_LED 13#define PIN_SWITCH 8#define ON 1void setup() {    Serial.begin(115200);    pinMode(P...
void loop() {     int state = digitalRead(PIN_SWITCH);     if (state == ON && state != prevState) {         on = !on;     ...
上手く動かない場合 - シリアルモニタ void setup() {     Serial.begin(115200);     pinMode(PIN_LED, OUTPUT);     pinMode(PIN_SWITCH, INPUT);...
シリアルモニタの表示01.19, 2013   Copyright C-LIS CO., LTD. 2011                                               47
シリアルモニタ01.19, 2013   Copyright C-LIS CO., LTD. 2011                                               48
Cds - 光伝導体素子01.19, 2013   Copyright C-LIS CO., LTD. 2011                                               49
明るさに応じてLEDをON/OFFする01.19, 2013   Copyright C-LIS CO., LTD. 2011                                               50
暗くなると光るLED #define PIN_LED 13 #define PIN_CDS A0 #define ON 1 #define LIGHT_THRESHOLD 700 void setup() {     Serial.begin(...
void loop() {     int state = analogRead(PIN_CDS);     Serial.println(state);     if (state > LIGHT_THRESHOLD && on       ...
ADK 編01.19, 2013   Copyright C-LIS CO., LTD. 2011                                               53
01.19, 2013   Copyright C-LIS CO., LTD. 2011                                               54
ADK 2011パッケージのダウンロード              https://dl-ssl.google.com/android/adk/adk_release_20120606.zip01.19, 2013        Copyrig...
ADK 2011ライブラリをコピー              arduino_libs以下を、Documents/Arduino/libraries にコピー01.19, 2013                 Copyright C-LIS...
Arduino スケッチ - ADKへの対応 #include <usb.h> #include <AndroidAccessory.h> #define PIN_LED 13 AndroidAccessory acc("C-LIS CO., ...
Android端末との接続01.19, 2013   Copyright C-LIS CO., LTD. 2011                                               58
Androidプロジェクトの作成01.19, 2013   Copyright C-LIS CO., LTD. 2011                                               59
usb.jarをbuild pathに追加   [SDKをインストールしたディレクトリ]/add-ons/addon-google_apis-google-10/libs 6001.19, 2013      Copyright C-LIS C...
<?xml version="1.0" encoding="utf-8"?>  <manifest xmlns:android="http://schemas.android.com/apk/res/android"      package=...
<?xml version="1.0" encoding="utf-8"?>  <resources>      <usb-accessory manufacturer="C-LIS CO., LTD." model="ADK Test" ve...
Android端末との接続01.19, 2013   Copyright C-LIS CO., LTD. 2011                                               63
AndroidからArduinoの接続を処理する01.19, 2013      Copyright C-LIS CO., LTD. 2011                                                  64
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"       xmlns:tools="http://schemas.android.com/t...
import com.android.future.usb.UsbAccessory;  import com.android.future.usb.UsbManager;  // 以下、import 省略  public class Main...
private final BroadcastReceiver mUsbReceiver = new BroadcastReceiver() {          @Override          public void onReceive...
@Override      public void onResume() {          super.onResume();          if (mInputStream != null && mOutputStream != n...
private ParcelFileDescriptor mFileDescriptor = null;      private FileInputStream mInputStream = null;      private FileOu...
@Override      public void onPause() {          super.onPause();          closeAccessory();      }      @Override      pub...
protected void enableControls(boolean enable) {              mLed.setEnabled(enable);      }                              ...
01.19, 2013   Copyright C-LIS CO., LTD. 2011                                               72
AndroidからArduinoを操作                 (データを送信)01.19, 2013       Copyright C-LIS CO., LTD. 2011                              ...
public class MainActivity extends Activity implements OnCheckedChangeListener {      // 省略      @Override      protected v...
Arduino - Android端末からの情報を受信 void loop() {  byte receive_msg[1];     if (acc.isConnected()) {       int len = acc.read(rece...
ArduinoからAndroidにデータ送信                     (データの受信)01.19, 2013        Copyright C-LIS CO., LTD. 2011                      ...
ADK CDS ILLUMINATE LED #include <Usb.h> #include <AndroidAccessory.h> #define PIN_LED 13 #define PIN_CDS A0 #define ON 1 #...
boolean init_flg = false;boolean on = false;int light = 0;int p = 1;void loop() { int state = analogRead(PIN_CDS); if (acc...
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"      xmlns:tools="http://schemas.android.com/to...
public class MainActivity extends Activity implements OnCheckedChangeListener {      // 省略      private ToggleButton mLed ...
private ParcelFileDescriptor mFileDescriptor;      private FileInputStream mInputStream;      private FileOutputStream mOu...
private int mCdsValue = 0;      private final Runnable mDataReceiveRunnable = new Runnable() {          public void run() ...
01.19, 2013   Copyright C-LIS CO., LTD. 2011                                               83
ADK開発の取り扱い ○   ハードウエアの設計・組み立て ○   Arduino ←→ Android データ通信プロトコル設計 ○   Arduinoスケッチの実装 ○   Androidアプリの実装01.19, 2013     Copy...
参考書籍                                        Arduinoをはじめよう                                        今回のハンズオンのArduino編は、ほ     ...
参考書籍                                     Android ADK 組込みプログラミング                                     完全ガイド                 ...
質疑応答本資料は、有限会社シーリスの著作物であり、クリエイティブコモンズの表示-非営利-継承 3.0 Unported ライセンスの元で公開しています。本資料の内容の一部は、Googleが作成、提供しているコンテンツを複製したもので、クリエイテ...
ご清聴ありがとうございました。       Arduinoスケッチ+Androidアプリのソースコードは、下記で配布しています              https://github.com/keiji/adk-handson01.19, 20...
Upcoming SlideShare
Loading in...5
×

20130119 adkハンズオン発表資料

9,826

Published on

20130119に開催した「ADKハンズオン」の発表資料です。

参考: http://www.zusaar.com/event/489057

6 Comments
10 Likes
Statistics
Notes
  • なるほど
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here
  • あれ、ざきさんのコメントをfavったつもりが、自分のスライドを自分でお気に入り登録してる。。。?

    恥ずかしい!
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here
  • @MakotoYamazaki ありがとうございます。Fritzingは個人的に使ってみるとして、ハンズオンの資料に載せるのはあくまで回路図だけ、それを見ながらブレッドボード上に配線するって方針にしてます。

    ブレッドボード上の配線を明示すると、ハンズオンの全行程が写経になってしまうので、それぞれの部品が、何と何に繋がっているのかを確認しながら手探りで作っていく部分は残したかったのです。

    結果として、みんなの配線は違うものになりました。中には「ああ、こんなやり方があるのか」という新しい発見もありましたよー
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here
  • 力作!
    ブレッドボード使った回路図描くのに Fritzing http://fritzing.org/ が便利だったよ。いわたんがこの前書いた本の回路図も Fritzing で描いたって言ってた。
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here
  • @kogorou こちらこそ、いっぱい勉強させてもらいました。
    また宜しくお願いします!
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here
No Downloads
Views
Total Views
9,826
On Slideshare
0
From Embeds
0
Number of Embeds
2
Actions
Shares
0
Downloads
16
Comments
6
Likes
10
Embeds 0
No embeds

No notes for slide

20130119 adkハンズオン発表資料

  1. 1. C LIS -
  2. 2. 配布物の確認をお願いします ○ ブレッドボード ○ 配線材 ○ LED (赤色) ● 緑(長)× 1 ○ タクトスイッチ ● 緑(長)× 2 ○ 抵抗器 1kΩ × 1 ● 赤×2 ○ 抵抗器 10kΩ × 2 ● 黒×2 ○ Cds ○ サーミスタ 作業中でも、線材や部品の不足に気づいたら、 声をかけて下さい01.19, 2013 Copyright C-LIS CO., LTD. 2011 2
  3. 3. 2013/01/19 ADKハンズオン 2013
  4. 4. 自己紹介 – 有山 圭二 ○ 有限会社シーリスの代表 ○ 普段はAndroidのアプリ開発とかしています ● たまにコントリビュートもしてるよ ○ 電子工作の経験は、約2ヶ月01.19, 2013 Copyright C-LIS CO., LTD. 2011 4
  5. 5. 今回は、 「発表ドリブン学習」です01.19, 2013 Copyright C-LIS CO., LTD. 2011 5
  6. 6. 発表ドリブン学習とは? 勉強会等での発表が決まってから、 ようやくその技術の勉強を本格的に始めること。01.19, 2013 Copyright C-LIS CO., LTD. 2011 6
  7. 7. 資料が出来上がったのは、午前3時頃でした01.19, 2013 Copyright C-LIS CO., LTD. 2011 7
  8. 8. ADK(Accessory Development Kit) とは ○ Android端末にアクセサリを接続する規格AOA(Android Open Accessory)に準拠したデバイスや、対応アプリケーションを実 装する開発キット ○ 2011年5月、Google I/Oで発表 (ADK 2011) ○ Android端末とアクセサリはUSBで接続。Android側ではアク セサリの認識と対応アプリケーションの立ち上げまでを担当 ○ Android端末とアクセサリの通信は、byte列の送受信で行う01.19, 2013 Copyright C-LIS CO., LTD. 2011 8
  9. 9. ADK 2011の概要 ○ オープンソースハードウェア”Arduino”に、Android端末 を接続する「USBホスト機能」を付加したもの。 ○ Androidとの通信をハンドリングするライブラリが配布さ れている。01.19, 2013 Copyright C-LIS CO., LTD. 2011 9
  10. 10. Arduino とは ○ Arduino(アルドゥイーノ)は、AVRマイコン、入出力ポー トを備えた基板、C言語風のArduino言語とそれの統合開 発環境から構成されるシステム。 (Wikipediaより) ○ USB接続経由でプログラムの書き込みが出来る01.19, 2013 Copyright C-LIS CO., LTD. 2011 10
  11. 11. “Arduino IDE”の取得とインストール http://arduino.cc/en/Main/Software01.19, 2013 Copyright C-LIS CO., LTD. 2011 11
  12. 12. シリアルドライバのインストール (Mac OS) http://www.ftdichip.com/Drivers/VCP.htm01.19, 2013 Copyright C-LIS CO., LTD. 2011 12
  13. 13. Arduino IDE の起動01.19, 2013 Copyright C-LIS CO., LTD. 2011 13
  14. 14. はじめて の スケッチ #define PIN_LED 13 void setup() { pinMode(PIN_LED, OUTPUT); } void loop() { digitalWrite(PIN_LED, HIGH); } adk-handson/led01.19, 2013 Copyright C-LIS CO., LTD. 2011 14
  15. 15. Verify01.19, 2013 Copyright C-LIS CO., LTD. 2011 15
  16. 16. Arduino へ 書き込み01.19, 2013 Copyright C-LIS CO., LTD. 2011 16
  17. 17. Arduino MEGA ADK PCへ接続 + 給電 Android端末へ01.19, 2013 Copyright C-LIS CO., LTD. 2011 17
  18. 18. ArduinoをPCに接続01.19, 2013 Copyright C-LIS CO., LTD. 2011 18
  19. 19. Arduinoを接続したポートを選択01.19, 2013 Copyright C-LIS CO., LTD. 2011 19
  20. 20. Arduinoの種類を選択01.19, 2013 Copyright C-LIS CO., LTD. 2011 20
  21. 21. 書き込み01.19, 2013 Copyright C-LIS CO., LTD. 2011 21
  22. 22. 動作の確認方法は?01.19, 2013 Copyright C-LIS CO., LTD. 2011 22
  23. 23. LED 短い方がGND01.19, 2013 Copyright C-LIS CO., LTD. 2011 23
  24. 24. LEDを挿す 短い方がGND01.19, 2013 Copyright C-LIS CO., LTD. 2011 24
  25. 25. LEDを点滅 #define PIN_LED 13 void setup() { pinMode(PIN_LED, OUTPUT); } void loop() { digitalWrite(PIN_LED, HIGH); delay(1000); digitalWrite(PIN_LED, LOW); delay(1000); } adk-handson/blink_led01.19, 2013 Copyright C-LIS CO., LTD. 2011 25
  26. 26. 01.19, 2013 Copyright C-LIS CO., LTD. 2011 26
  27. 27. 何を作っていたのか01.19, 2013 Copyright C-LIS CO., LTD. 2011 27
  28. 28. 電子回路01.19, 2013 Copyright C-LIS CO., LTD. 2011 28
  29. 29. LEDが壊れるかも01.19, 2013 Copyright C-LIS CO., LTD. 2011 29
  30. 30. 抵抗を入れる01.19, 2013 Copyright C-LIS CO., LTD. 2011 30
  31. 31. どこに?01.19, 2013 Copyright C-LIS CO., LTD. 2011 31
  32. 32. Arduino上には、ほとんど部品が置けない01.19, 2013 Copyright C-LIS CO., LTD. 2011 32
  33. 33. 回路は外に作る01.19, 2013 Copyright C-LIS CO., LTD. 2011 33
  34. 34. ブレッドボード01.19, 2013 Copyright C-LIS CO., LTD. 2011 34
  35. 35. ブレッドボード (配線)01.19, 2013 Copyright C-LIS CO., LTD. 2011 35
  36. 36. ブレッドボードに配線01.19, 2013 Copyright C-LIS CO., LTD. 2011 36
  37. 37. ブレッドボードに配線01.19, 2013 Copyright C-LIS CO., LTD. 2011 37
  38. 38. ブレッドボードに配線13番ピンへ GNDへ 01.19, 2013 Copyright C-LIS CO., LTD. 2011 38
  39. 39. LEDをゆっくりと点滅 #define PIN_LED 13 void setup() { pinMode(PIN_LED, OUTPUT); } int light = 0; int p = 1; void loop() { light += p; if (light == 0 || light == 255) { p *= -1; } delay(10); analogWrite(PIN_LED, light); } adk-handson/illuminate_led01.19, 2013 Copyright C-LIS CO., LTD. 2011 39
  40. 40. オシロスコープで観察01.19, 2013 Copyright C-LIS CO., LTD. 2011 40
  41. 41. Width PWM (Pulse Wave Modulation)01.19, 2013 Copyright C-LIS CO., LTD. 2011 41
  42. 42. スイッチ - タクトスイッチ01.19, 2013 Copyright C-LIS CO., LTD. 2011 42
  43. 43. スイッチでLEDをON/OFFする01.19, 2013 Copyright C-LIS CO., LTD. 2011 43
  44. 44. SWTCH ILLUMINATE LED#define PIN_LED 13#define PIN_SWITCH 8#define ON 1void setup() { Serial.begin(115200); pinMode(PIN_LED, OUTPUT); pinMode(PIN_SWITCH, INPUT);}boolean on = false;int prevState = 0;int light = 0;int p = 1; adk-handson/switch_illuminate_led01.19, 2013 Copyright C-LIS CO., LTD. 2011 44
  45. 45. void loop() { int state = digitalRead(PIN_SWITCH); if (state == ON && state != prevState) { on = !on; light = 0; p = 1; Serial.println("State change."); } prevState = state; if (on == true) { light += p; if (light == 0 || light == 255) { p *= -1; } delay(10); } analogWrite(PIN_LED, light); } adk-handson/switch_illuminate_led01.19, 2013 Copyright C-LIS CO., LTD. 2011 45
  46. 46. 上手く動かない場合 - シリアルモニタ void setup() { Serial.begin(115200); pinMode(PIN_LED, OUTPUT); pinMode(PIN_SWITCH, INPUT); } void loop() { int state = digitalRead(PIN_SWITCH); if (state == ON && state != prevState) { on = !on; light = 0; p = 1; Serial.println("State change."); } // 省略01.19, 2013 Copyright C-LIS CO., LTD. 2011 46
  47. 47. シリアルモニタの表示01.19, 2013 Copyright C-LIS CO., LTD. 2011 47
  48. 48. シリアルモニタ01.19, 2013 Copyright C-LIS CO., LTD. 2011 48
  49. 49. Cds - 光伝導体素子01.19, 2013 Copyright C-LIS CO., LTD. 2011 49
  50. 50. 明るさに応じてLEDをON/OFFする01.19, 2013 Copyright C-LIS CO., LTD. 2011 50
  51. 51. 暗くなると光るLED #define PIN_LED 13 #define PIN_CDS A0 #define ON 1 #define LIGHT_THRESHOLD 700 void setup() { Serial.begin(115200); pinMode(PIN_LED, OUTPUT); pinMode(PIN_CDS, INPUT); } boolean on = false; int prevState = 0; int light = 0; int p = 1; adk-handson/cds_illuminate_led01.19, 2013 Copyright C-LIS CO., LTD. 2011 51
  52. 52. void loop() { int state = analogRead(PIN_CDS); Serial.println(state); if (state > LIGHT_THRESHOLD && on || state < LIGHT_THRESHOLD && !on) { on = !on; light = 0; p = 1; } if (on) { light += p; if (light == 0 || light == 255) { p *= -1; } delay(10); } analogWrite(PIN_LED, light); } adk-handson/cds_illuminate_led01.19, 2013 Copyright C-LIS CO., LTD. 2011 52
  53. 53. ADK 編01.19, 2013 Copyright C-LIS CO., LTD. 2011 53
  54. 54. 01.19, 2013 Copyright C-LIS CO., LTD. 2011 54
  55. 55. ADK 2011パッケージのダウンロード https://dl-ssl.google.com/android/adk/adk_release_20120606.zip01.19, 2013 Copyright C-LIS CO., LTD. 2011 55 http://developer.android.com/tools/adk/adk.html
  56. 56. ADK 2011ライブラリをコピー arduino_libs以下を、Documents/Arduino/libraries にコピー01.19, 2013 Copyright C-LIS CO., LTD. 2011 56
  57. 57. Arduino スケッチ - ADKへの対応 #include <usb.h> #include <AndroidAccessory.h> #define PIN_LED 13 AndroidAccessory acc("C-LIS CO., LTD.", "ADK Test", "This is an ADK test.", "1.0.0", "http://www.c-lis.co.jp", "1234567890"); void setup() { pinMode(PIN_LED, OUTPUT); acc.powerOn(); } void loop() { if (acc.isConnected()) { digitalWrite(PIN_LED, HIGH); } else { digitalWrite(PIN_LED, LOW); } } adk-handson/adk_led01.19, 2013 Copyright C-LIS CO., LTD. 2011 57
  58. 58. Android端末との接続01.19, 2013 Copyright C-LIS CO., LTD. 2011 58
  59. 59. Androidプロジェクトの作成01.19, 2013 Copyright C-LIS CO., LTD. 2011 59
  60. 60. usb.jarをbuild pathに追加 [SDKをインストールしたディレクトリ]/add-ons/addon-google_apis-google-10/libs 6001.19, 2013 Copyright C-LIS CO., LTD. 2011
  61. 61. <?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="jp.co.c_lis.adktest" android:versionCode="1" android:versionName="1.0" > <uses-sdk android:minSdkVersion="10" android:targetSdkVersion="17" /> <application android:allowBackup="true" android:icon="@drawable/ic_launcher" android:label="@string/app_name" android:launchMode="singleInstance" android:theme="@style/AppTheme" > <uses-library android:name="com.android.future.usb.accessory" /> <activity android:name="jp.co.c_lis.adktest.MainActivity" android:label="@string/app_name" > <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> <intent-filter> <action android:name="android.hardware.usb.action.USB_ACCESSORY_ATTACHED" /> </intent-filter> <meta-data android:name="android.hardware.usb.action.USB_ACCESSORY_ATTACHED" android:resource="@xml/accessory_filter" /> </activity> </application> </manifest> AndroidManifest.xml 6101.19, 2013 Copyright C-LIS CO., LTD. 2011
  62. 62. <?xml version="1.0" encoding="utf-8"?> <resources> <usb-accessory manufacturer="C-LIS CO., LTD." model="ADK Test" version="1.0.0" /> </resources> res/xml/accessory_filter.xml01.19, 2013 Copyright C-LIS CO., LTD. 2011 62
  63. 63. Android端末との接続01.19, 2013 Copyright C-LIS CO., LTD. 2011 63
  64. 64. AndroidからArduinoの接続を処理する01.19, 2013 Copyright C-LIS CO., LTD. 2011 64
  65. 65. <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" tools:context=".MainActivity" > <ToggleButton android:id="@+id/toggle_led" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_centerHorizontal="true" android:layout_centerVertical="true" android:textOff="LED OFF" android:textOn="LED ON" /> </RelativeLayout> res/layout/activity_main.xml01.19, 2013 Copyright C-LIS CO., LTD. 2011 65
  66. 66. import com.android.future.usb.UsbAccessory; import com.android.future.usb.UsbManager; // 以下、import 省略 public class MainActivity extends Activity { private static final String LOG_TAG = "AdkTest"; private static final String ACTION_USB_PERMISSION = "jp.co.c_lis.adktest.action.USB_PERMISSION"; private UsbManager mUsbManager = null; private PendingIntent mPermissionIntent = null; private boolean mPermissionRequestPending = false; private UsbAccessory mAccessory = null; private ToggleButton mLed = null; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); mLed = (ToggleButton) findViewById(R.id.toggle_led); mUsbManager = UsbManager.getInstance(this); mPermissionIntent = PendingIntent.getBroadcast(this, 0, new Intent( ACTION_USB_PERMISSION), 0); IntentFilter filter = new IntentFilter(ACTION_USB_PERMISSION); filter.addAction(UsbManager.ACTION_USB_ACCESSORY_DETACHED); registerReceiver(mUsbReceiver, filter); // 現在は非推奨。Fragment#setRetainInstance(boolean)を使う Object obj = getLastNonConfigurationInstance(); if (obj != null) { mAccessory = (UsbAccessory) obj; openAccessory(mAccessory); } } MainActivity.java01.19, 2013 Copyright C-LIS CO., LTD. 2011 66
  67. 67. private final BroadcastReceiver mUsbReceiver = new BroadcastReceiver() { @Override public void onReceive(Context context, Intent intent) { String action = intent.getAction(); if (ACTION_USB_PERMISSION.equals(action)) { synchronized (this) { UsbAccessory accessory = UsbManager.getAccessory(intent); if (intent.getBooleanExtra( UsbManager.EXTRA_PERMISSION_GRANTED, false)) { openAccessory(accessory); } else { Log.d(LOG_TAG, "permission denied for accessory " + accessory); } mPermissionRequestPending = false; } } else if (UsbManager.ACTION_USB_ACCESSORY_DETACHED.equals(action)) { UsbAccessory accessory = UsbManager.getAccessory(intent); if (accessory != null && accessory.equals(mAccessory)) { closeAccessory(); } } } }; MainActivity.java01.19, 2013 Copyright C-LIS CO., LTD. 2011 67
  68. 68. @Override public void onResume() { super.onResume(); if (mInputStream != null && mOutputStream != null) { return; } UsbAccessory[] accessories = mUsbManager.getAccessoryList(); UsbAccessory accessory = (accessories == null ? null : accessories[0]); if (accessory != null) { if (mUsbManager.hasPermission(accessory)) { openAccessory(accessory); } else { synchronized (mUsbReceiver) { if (!mPermissionRequestPending) { mUsbManager.requestPermission(accessory, mPermissionIntent); mPermissionRequestPending = true; } } } } else { Log.d(LOG_TAG, "mAccessory is null"); } } MainActivity.java1.19, 2013 Copyright C-LIS CO., LTD. 2011 68
  69. 69. private ParcelFileDescriptor mFileDescriptor = null; private FileInputStream mInputStream = null; private FileOutputStream mOutputStream = null; private void openAccessory(UsbAccessory accessory) { mFileDescriptor = mUsbManager.openAccessory(accessory); if (mFileDescriptor != null) { mAccessory = accessory; FileDescriptor fd = mFileDescriptor.getFileDescriptor(); mInputStream = new FileInputStream(fd); mOutputStream = new FileOutputStream(fd); Log.d(LOG_TAG, "accessory opened"); enableControls(true); } else { Log.d(LOG_TAG, "accessory open fail"); } } private void closeAccessory() { enableControls(false); try { if (mFileDescriptor != null) { mFileDescriptor.close(); } } catch (IOException e) { } finally { mFileDescriptor = null; mAccessory = null; } Log.d(LOG_TAG, "accessory closed"); } MainActivity.java01.19, 2013 Copyright C-LIS CO., LTD. 2011 69
  70. 70. @Override public void onPause() { super.onPause(); closeAccessory(); } @Override public void onDestroy() { unregisterReceiver(mUsbReceiver); super.onDestroy(); } MainActivity.java1.19, 2013 Copyright C-LIS CO., LTD. 2011 70
  71. 71. protected void enableControls(boolean enable) { mLed.setEnabled(enable); } MainActivity.java01.19, 2013 Copyright C-LIS CO., LTD. 2011 71
  72. 72. 01.19, 2013 Copyright C-LIS CO., LTD. 2011 72
  73. 73. AndroidからArduinoを操作 (データを送信)01.19, 2013 Copyright C-LIS CO., LTD. 2011 73
  74. 74. public class MainActivity extends Activity implements OnCheckedChangeListener { // 省略 @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); mLed = (ToggleButton) findViewById(R.id.toggle_led); mLed.setOnCheckedChangeListener(this); // 省略 } private void setLed(boolean on) { try { mOutputStream.write(on ? 0x1 : 0x0); mOutputStream.flush(); } catch (IOException e) { Log.e(LOG_TAG, "IOException", e); } } @Override public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { switch (buttonView.getId()) { case R.id.toggle_led: setLed(isChecked); break; } } } MainActivity.java01.19, 2013 Copyright C-LIS CO., LTD. 2011 74
  75. 75. Arduino - Android端末からの情報を受信 void loop() { byte receive_msg[1]; if (acc.isConnected()) { int len = acc.read(receive_msg, sizeof(receive_msg), 1); if (len > 0) { if(receive_msg[0] == 1) { digitalWrite(PIN_LED, HIGH); } else { digitalWrite(PIN_LED, LOW); } } } } adk-handson/adk_led01.19, 2013 Copyright C-LIS CO., LTD. 2011 75
  76. 76. ArduinoからAndroidにデータ送信 (データの受信)01.19, 2013 Copyright C-LIS CO., LTD. 2011 76
  77. 77. ADK CDS ILLUMINATE LED #include <Usb.h> #include <AndroidAccessory.h> #define PIN_LED 13 #define PIN_CDS A0 #define ON 1 #define LIGHT_THRESHOLD 700 AndroidAccessory acc("C-LIS CO., LTD.", "ADK Test", "This is an ADK test?", "1.0.0", "http://www.c-lis.co.jp", "1234567890"); void setup() { Serial.begin(115200); pinMode(PIN_LED, OUTPUT); pinMode(PIN_CDS, INPUT); acc.powerOn(); } adk-handson/cds_illuminate_led01.19, 2013 Copyright C-LIS CO., LTD. 2011 77
  78. 78. boolean init_flg = false;boolean on = false;int light = 0;int p = 1;void loop() { int state = analogRead(PIN_CDS); if (acc.isConnected()) { if (!init_flg) { analogWrite(PIN_LED, LOW); init_flg = true; } byte receive_msg[1]; byte send_msg[1]; send_msg[0] = state / 4; acc.write(send_msg, sizeof(send_msg)); int len = acc.read(receive_msg, sizeof(receive_msg), 1); if (len > 0) { if(receive_msg[0] == 1) { analogWrite(PIN_LED, 255); } else { analogWrite(PIN_LED, 0); } } } else { init_flg = false; // 以下、cds_illuminate_led の重複 }} adk-handson/adk_cds_illuminate_led01.19, 2013 Copyright C-LIS CO., LTD. 2011 78
  79. 79. <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" tools:context=".MainActivity" > <ToggleButton android:id="@+id/toggle_led" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_centerHorizontal="true" android:layout_centerVertical="true" android:textOff="LED OFF" android:textOn="LED ON" /> <TextView android:id="@+id/tv_label" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_above="@id/toggle_led" android:layout_centerHorizontal="true" /> </RelativeLayout> res/layout/activity_main.xml01.19, 2013 Copyright C-LIS CO., LTD. 2011 79
  80. 80. public class MainActivity extends Activity implements OnCheckedChangeListener { // 省略 private ToggleButton mLed = null; private TextView mLabel = null; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); mLed = (ToggleButton) findViewById(R.id.toggle_led); mLed.setEnabled(false); mLed.setOnCheckedChangeListener(this); mLabel = (TextView) findViewById(R.id.tv_label); // 省略 } MainActivity.java01.19, 2013 Copyright C-LIS CO., LTD. 2011 80
  81. 81. private ParcelFileDescriptor mFileDescriptor; private FileInputStream mInputStream; private FileOutputStream mOutputStream; private void openAccessory(UsbAccessory accessory) { mFileDescriptor = mUsbManager.openAccessory(accessory); if (mFileDescriptor != null) { mAccessory = accessory; FileDescriptor fd = mFileDescriptor.getFileDescriptor(); mInputStream = new FileInputStream(fd); mOutputStream = new FileOutputStream(fd); Thread thread = new Thread(mDataReceiveRunnable); thread.start(); Log.d(LOG_TAG, "accessory opened"); enableControls(true); } else { Log.d(LOG_TAG, "accessory open fail"); } } private void closeAccessory() { enableControls(false); try { if (mFileDescriptor != null) { mFileDescriptor.close(); } } catch (IOException e) { } finally { mInputStream = null; mOutputStream = null; mFileDescriptor = null; mAccessory = null; } Log.d(LOG_TAG, "accessory closed"); } MainActivity.java01.19, 2013 Copyright C-LIS CO., LTD. 2011 81
  82. 82. private int mCdsValue = 0; private final Runnable mDataReceiveRunnable = new Runnable() { public void run() { int len = 0; byte[] buff = new byte[1]; try { while (len >= 0) { len = mInputStream.read(buff); mCdsValue = ((int) buff[0] & 0xff); mHandler.sendEmptyMessage(HANDLE_RECEIVE_MESSAGE); synchronized (this) { try { wait(1000 / 8); } catch (InterruptedException e) { } } } } catch (IOException e) { Log.e(LOG_TAG, "IOException", e); } } }; private static final int HANDLE_RECEIVE_MESSAGE = 0x01; private final Handler mHandler = new Handler() { public void handleMessage(Message msg) { switch (msg.what) { case HANDLE_RECEIVE_MESSAGE: mLabel.setText("明るさ: " + mCdsValue); break; } } }; MainActivity.java01.19, 2013 Copyright C-LIS CO., LTD. 2011 82
  83. 83. 01.19, 2013 Copyright C-LIS CO., LTD. 2011 83
  84. 84. ADK開発の取り扱い ○ ハードウエアの設計・組み立て ○ Arduino ←→ Android データ通信プロトコル設計 ○ Arduinoスケッチの実装 ○ Androidアプリの実装01.19, 2013 Copyright C-LIS CO., LTD. 2011 84
  85. 85. 参考書籍 Arduinoをはじめよう 今回のハンズオンのArduino編は、ほ とんどこの書籍をなぞったもの。 後半がArduino言語のリファレンスに なっているので、中級者以降にもお薦 め。 ADKの話題は無し。 http://www.amazon.co.jp/Arduino%E3%82%92%E3%81%AF%E3%81%98%E3%82%81%E3%82%88% E3%81%86-Make-PROJECTS-Massimo-Banzi/dp/487311398901.19, 2013 Copyright C-LIS CO., LTD. 2011 85
  86. 86. 参考書籍 Android ADK 組込みプログラミング 完全ガイド 深く知りたいならこの一冊。432pの ボリュームで、基礎から丁寧に解説。http://www.amazon.co.jp/Android-%E7%B5%84%E8%BE%BC%E3%81%BF%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0%E5%AE%8C%E5%85%A8%E3%82%AC%E3%82%A4%E3%83%89-Smart-Mobile-Developer/dp/479812593801.19, 2013 Copyright C-LIS CO., LTD. 2011 86
  87. 87. 質疑応答本資料は、有限会社シーリスの著作物であり、クリエイティブコモンズの表示-非営利-継承 3.0 Unported ライセンスの元で公開しています。本資料の内容の一部は、Googleが作成、提供しているコンテンツを複製したもので、クリエイティブコモンズの表示 2.5 ライセンスに記載の条件に従って使用しています。01.19, 2013 Copyright C-LIS CO., LTD. 2011 87
  88. 88. ご清聴ありがとうございました。 Arduinoスケッチ+Androidアプリのソースコードは、下記で配布しています https://github.com/keiji/adk-handson01.19, 2013 Copyright C-LIS CO., LTD. 2011 88
  1. A particular slide catching your eye?

    Clipping is a handy way to collect important slides you want to go back to later.

×