Your SlideShare is downloading. ×
イチからはじめるADK北海道支部勉強会発表資料
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×

Introducing the official SlideShare app

Stunning, full-screen experience for iPhone and Android

Text the download link to your phone

Standard text messaging rates apply

イチからはじめるADK北海道支部勉強会発表資料

4,027
views

Published on

Published in: Education

0 Comments
6 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
4,027
On Slideshare
0
From Embeds
0
Number of Embeds
2
Actions
Shares
0
Downloads
31
Comments
0
Likes
6
Embeds 0
No embeds

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
No notes for slide

Transcript

  • 1. イチからはじめる ADK 日本Androidの会神戸支部 吉田 研一 第13回Android勉強会in札幌 今回は電子工作祭り! 2012年6月2日(土)
  • 2. はじめに自己紹介今回のセミナーの経緯書籍の紹介イベントの紹介
  • 3. 自己紹介• よしだけんいち(45歳) @dietposter • 奈良在住• JAG神戸&神戸GTUGメンバー• ECCコンピュータ専門学校専任教員 • 奈良高専卒、高校教諭免許(理科)有り
  • 4. 今回のセミナーの経緯3/24(土) ABC 2012 SpringにてADK勉強会(東京)の展示の際に、まいむぞうさんがコンタクト 吉田はOSC愛媛に参加し、ABC 2012 Springの「ロボットサミット」のハング アウト中継を行っていた後日、ADK勉強会(東京)MLにて北海道支部勉強会でADKの話をしてくれないかと依頼ありここで事情をはじめて知り吉田が喜んで手を挙げた 吉田は秋葉原で行われるADK勉強会と ハングアウトで自宅をつないでオンラ イン参加していた
  • 5. 書籍(共著)の紹介 著者(五十音順) (横浜支部ロボ部) 岩田 直樹 杉浦 登(部長) 原田 明憲 (神戸支部) 高木 基成(支部長)「Android ADK プログラミング 吉田 研一 &電子工作バイブル」
  • 6. 書籍(共著)の内容第1章 ADKの概要とハードウェアの制御(高木さん)p.13第2章 ADK ボードを動かそう(杉浦さん:RT-ADKボード)p.51第3章 Arduino UnoとUSBホストシールドで手軽にADK p.131 格安・簡単! LED, スイッチ, 光センサとのやりとりを行う第4章 Androidで赤外線通信(岩田さん:Arduino)p.53第5章 Androidで温度モニタリング(原田さん:PICマイコン)p.45第6章 MicroBridgeの利用(岩田さん:Arduino)p.27Appendix-1 ピンソケットのハンダ付け p.11 Arduinoの拡張基板「シールド」のハンダ付け方法を丁寧に解説(384ページ中141ページ担当しました)
  • 7. イベントの紹介(本日ですが) 横浜支部ロボ部 杉浦さん 原田さんPICマイコンを使ったADKキットのハンダ付け講習会 基板のみで500 円(税込) 部品込みで2,980 円(税込) ●株式会社テクノロードWEB SHOP http://techno-road.com/shop.html
  • 8. 進行
  • 9. アジェンダ (概論)ADKとは?その歴史AndroidとのUSB接続 ADK, MicroBridge, USB Host APIADKでつなぐマイコンの選択 PIC, Arduino, mbed開発手順とデバッグ、ログ
  • 10. イチからつくってみるソースコードhttps://github.com/yoshidaken1/GettingStartedADK回路図(ブレッドボード実体配線図)http://www.ospn.jp/press/20120404no22-2-useit-oss.html
  • 11. アジェンダ(コード概説)外部インテント(Arduinoからのアプリ起動)Androidから見た入出力ストリームArduinoと電子部品のやりとりコマンドデータ/データプロトコルの留意点
  • 12. 概論ADKとは?
  • 13. ADKとは?ADKと記述した場合は、「Open AccessoryDevelopment Kit」のことを指します。ADKのAは、AndroidではなくAccessoryの頭文字です。Android2.3.4とAndroid3.1以降に追加された周辺機器用のAPIを利用するためのソフトウェアやドキュメント、Accessory Demo Kitと呼ばれるハードウェアを合わせてADKと表現します。
  • 14. ADKとは?~歴史1~• 2011年5月 Google I/O (San Francisco) アールティ社がADKボードを提供ブリリアントサービス社(大阪)がLED植物工場を展示。LEDは共立電子(大阪日本橋) https://sites.google.com/site/bsfarmbox/
  • 15. ADKとは?~歴史2~ • 2011年11月 GDD Open Call (Tokyo) ADKを 用いた 作品の 展示 (12作品)大和田さん(横浜支部長)「OpenCall における ADK の傾向」より
  • 16. 2012年1月~2月•日本Androidの会定例会でアールティ社のプレゼン•各支部などでADK関連の勉強会が行われる。 •福岡支部、神戸支部、名古屋つ部、東京で独自に ADKハッカソンなど。
  • 17. 2012年3月• 鳥人間@hisashinさんの世界最小ADK対応Arduino 「Harpy nano」販売 回路図も公開 つくばFabLabで作成 http://www.harpyhack.com/
  • 18. 2012年4月(1) itogさん CEREVO DASHにADKガジェット 「FourBeat」出展 クラウド・ファ ウンディングに よる支援 興味をもたれた 方は支援を!http://camp-fire.jp/projects/view/254
  • 19. 2012年4月(2)石田さんのQDen 広告提供型充電サービス が、 日経BP社 A3 2012にてアイデア部門優秀賞 給電クレードル・ クラウド連携 サービスADK勉強会(東京)のLT大会”ADK BootCamp“資料
  • 20. 2012年5月 • ソシム社「Android ADKプログラミング &電子工作バイブル」発刊 http://www.socym.co.jp/book/809 • 日経Linux 5月号特集1 ここまでできる“未来”の部屋 Linuxで家電を自由に操る http://nkbp.jp/LKKH3C
  • 21. でもイマイチ流行らない• Adnroidのバージョンに制限 • スマートフォン2.3.4以上 • タブレット3.1以上• マイコンや電子工作の知識が必要…興味はあ るけどなかなか手を出しづらい。• 今年のGoogle I/OにはADKのプログラムは無 い、らしい。…オワコンか
  • 22. でもでも根強く続く技術•Android開発には様々な文化の人が関わる •組込み屋さん 「Androidレイアウトの •Web屋さん スタンダードアプローチ」 •携帯アプリ屋さん 住友さん •業務アプリ屋さん http://slidesha.re/L547Ud•ADKは様々な文化へのアプローチとなる技術ではないか。様々なものをつなぐメタファーかな。•あと、そろそろ4.0のAndroid携帯が増えそうなんで、基本が分かれば使える技術になるハズ!
  • 23. モノwith サービス=コト • 製品単体では受け入れられない時代が来ている • モノと同時に付随するサービスを体験すること で受け入れられ浸透していく時代だと感じる • モノとサービスが組み合わさりコト(事柄)と なってヒト(人)をつなぐように思ったり •ガジェットとスマートフォン-クラウドを結ぶ ADKはそういった「コト」をつくるアーキテク トになるかも?? ↓参考ブログ組込み技術とモバイル技術(2)-人と技術のマッシュアップ
  • 24. 概論AndroidとのUSB接続
  • 25. AndroidとのUSB接続• USB Accessory API(Androidが電源をもらう側) • AndroidがUSBデバイス(Type-Bコネクタ) • これがいわゆるADK• USB Host API(Androidが電源供給側) • AndroidがUSBホスト(Type-Aコネクタ)
  • 26. USBアクセサリモード とUSBホストモード USBホスト USBデバイスアクセサリ 電力 Androidが従 モード マイコンや A B Android FPGAなど (ADK) データ転送 USBデバイス USBホスト ホスト 電力 マイコンや Androidが主 モード FPGAなど B A Android データ転送
  • 27. Androidとの接続http://www.slideshare.net/KeisukeSuzuki1/osc-ftdriver
  • 28. ADK, MicroBridge, USB Host APIまとめ• ADK( ver.2.3.4以上で対応機種のみ) • マイコンから自動的にアプリを起動• MicroBridge(全機種対応) • ADB接続 デバッグモードにする必要あり• USB Host API (ver.3.1以上で対応機種のみ) • 全マイコン対応可能 ラッパライブラリを利 用すると使いやすい (FTDriver)
  • 29. 概論ADKでつなぐマイコン の選択
  • 30. ADKでつなぐマイコン Arduino•プロトタイピング開発が容易(プログラミング言語も簡単)•最新のIDEに対応していない(Yaoadkで解決)•USBホスト機能が必要Arduino Uno+USB Arduino Harpy Nano ホストシールド Mega ADK
  • 31. ADKでつなぐマイコン PIC•開発環境MPLAB, MPLAB X(C言語) •組込み開発らしいプログラミング•PIC24FマイコンはUSBホスト機能を内蔵し多機能でかつ簡便に実装できる(しかも低価格) •神戸支部、原子力部(NINJA)、横浜支部ロボ部など基板を作成•ファームウェアの書き込みに(PICKit 3など)ライタが必要 PIC ADK mini Yokorobo RT ADK mini Board 01-PIC24F
  • 32. ADKでつなぐマイコン mbed•CPUはARM Cortex-M3など•開発環境はクラウド上にあり、ブラウザでプログラミングする。 •ユーザ同士で公開されたライブラリやアプリ ケーションを流用できる •組込み界のソーシャルコーディング!? •WebSocketを簡単にコーディングできたりする実はまだ触っていません。是非チャレンジした いと思っています。 mbed NXP LPC1768
  • 33. Arduino, PIC, mbed まとめ•Arduino 携帯アプリ屋さん、業務アプリ屋さん向け? •入手しやすい。情報が多くノウハウも多い。 •企業でのプロトタイピング開発も増加 •組込み関連のノウハウが無い時のコスト(=投資コ スト・教育コスト・時間)圧縮にも向く•PIC 組込み屋さん向け? •Cによるコーディングにある程度慣れている、なお かつマイコンをある程度触っている人は、様々なこ とが比較的容易にできる•mbed Web屋さん向け? •個人利用としてはイチ押し(まだ触ってないけど) •神戸支部でもNXPの中の人を呼ぶ予定もあり(未定)
  • 34. 概論開発手順とデバッグ、ログ
  • 35. 開発手順① ①Arduinoファームウェアの開発USBケーブルでArduinoスケッチ をアップロード
  • 36. 開発手順②②Androidアプリの開発 adb 接続USBケーブルでapkを転送adb接続でデバッグ&logcat
  • 37. 開発手順③ シリアルモニタadb接続ができない! ③ADK接続&実行
  • 38. 開発手順④ シリアルモニタWi-Fiによる adb接続 Wi-Fiデバッグ ADK接続&実行
  • 39. WiーFiデバッグ中 シリアルモニタ ADK接続 &実行
  • 40. Wi-Fiによる adb接続手順(1)《前提》 PCとAndroid端末は同一のWi-Fi LAN上にあること。(1)まずはじめにPCとAndroid端末をUSBケーブルでつないでおいて、コマンドプロンプトより以下の2つのコマンドを投入する Android端末の>adb tcpip 5555 IPアドレスrestarting TCP mode port:5555>adb connect 192.168.1.101:5555connected to 192.168.1.101:5555
  • 41. Wi-Fiによる adb接続手順(2)(2)Android端末からUSBケーブルを外して、adb logcatコマンドを打ってみる> adb logcat…logcatが表示されます!•ちなみにadb logcatコマンドを投入しなくてもEclipseのLogcatビューでlogcat出力が始まります。•DDMSも使え、ASM(Android Screen Monitor)もUSBケーブル無しで表示されます。非常に便利!!ADKに関係なく使ってみて下さい。
  • 42. Wi-Fiデバッグの注意点 シリアルモニタ ADK接続を行うと 必ずWi-Fiデバッグ が切断される! >adb connect 192.168.1.101:5555 でWi-Fiデバッグが再接続します
  • 43. wifi logcat•Wi-FiデバッグはAndroid 3.1以上か4.0以上しか使えません。•Android 2.3.4の場合は、tomorrowkeyさんの「wifi logcat」が使えます(ただしlogcatだけ)。ブラウザからlogcatを見る(アップデートしました)
  • 44. まとめ• Android 3.1以上か4.0以上ならWi-Fiデバッグ • ADKに関係なくおススメ• Android 2.3.4ならwifi logcat• Arduino側は、シリアルモニタを使いprintデバッ グが可能 • スケッチ内にSerial.println()を入れる
  • 45. イチからつくってみる
  • 46. 前準備(1)OSPN記事(ブレッドボード実体配線図ほか全体の説明)http://www.ospn.jp/press/20120404no22-2-useit-oss.htmlソースコードをダウンロードしておくhttps://github.com/yoshidaken1/GettingStartedADKYaoadkライブラリをダウンロードしておくYet another open accessory development kit(ADK/MicroBridgeのためのArduinoライブラリ集)
  • 47. Google放置Play… •GoogleのADKサンプルソース「Demokit」はArduino IDE 0022対応のまま •Arduinoの開発環境は Arduino 1.0となり正式リリー スしたためライブラリが大きく変更 •そのままGoogleのADKサンプルを使うと動かないhttps://dl-ssl.google.com/android/adk/adk_release_0512.zip これもまたオワコン要因のひとつ(汗)
  • 48. Arduino 1.0対応ADKライブラリ作りました Android ADK勉強会(東京)メンバーと 協力して公開(Apache License v.2) github初心者でもZIPを ダウンロードするだけ!https://github.com/ADKstudyGroupTokyo/Yaoadk
  • 49. 前準備(2) 部品を通販で購入秋月電子通商 【URL】 http://akizukidenshi.com/
  • 50. なぜこの電子部品?• オライリーさんの書籍「Arduinoを はじめよう」で扱われるパーツに 絞りました。• 同書はデジタル入出力・アナログ 入出力などが初心者にわかりやす く説明されてます。• スイッチサイエンスでは必要なパ ーツだけをそろえた「Arduinoをは じめようキット」が販売されてい ます。
  • 51. 大まかな手順1. ブレッドボード上にパーツを配置する2. Arduino 1.0でスケッチを作成し、Arduino Uno + USBホストシールドにアップロード3. Arduino Uno + USBホストシールドにAndroidを接続 し外部インテントが起動するかダイアログを確認4. Androidプロジェクトを作成,Androidにアップロード5. Arduino Uno + USBホストシールドとAndroidを接続 し、動作確認
  • 52. 1.ブレッドボード上に部品を配置 ① ②【ブレッドボード上の接続】①黄色のジャンパーワイヤをa2と(+)へ A0へ ④ ③②光センサ( CdS セル)をe2とe4 へ③抵抗10kΩをc4とc8へ ⑤ ⑥④オレンジのジャンパーワイヤをa8と(-)へ⑤黄色のジャンパーワイヤをa9と(+)へ⑥タクトスイッチをe9, e11, f9, f11 へ D4へ ⑧ ⑦⑦抵抗10kΩをc11とc15へ⑧オレンジのジャンパーワイヤをa15と(-)へ ⑩⑨オレンジのジャンパーワイヤをa16と(-)へ⑩青色LEDの短い足(カソード)をe16へ ⑨ ⑪⑪青色LEDの長い足(アノード)をe18へ ⑫⑫抵抗1kΩをc18とc22へ D3へ⑬オレンジのジャンパーワイヤをa23と(-)へ ⑭⑭赤色LEDの短い足(カソード)をe23へ⑮赤色LEDの長い足(アノード)をe25へ ⑬ ⑮⑯抵抗1kΩをc25とc29へ D2へ ⑯
  • 53. Arudinoと配線 ① 緑色のジャンパーコードをa4と USBホストシールドのA0番へ ② 緑色のジャンパーコードをa11 とUSBホストシールドの4番へ ③ 黄色いジャンパーコードをa22 とUSBホストシールドの3番へ ④ 黄色いジャンパーコードをa29 とUSBホストシールドの2番へ ⑤ 黒いジャンパーコードを(-) とUSBホストシールドのGND ピンへ ⑥ 赤いジャンパーコードを(+) とUSBホストシールドの+5Vピ ンへブレッドボードとジャンパーワイヤーの配線はやり直しが できるので、プロトタイピングには最適!でも、そのまま置いておくと抜けてしまったり、たまに使 うときに配線をし直したり…。面倒でもある。
  • 54. ハンダ付けしてもヨシ ユニバーサル基板(ブレッド ボード配線パターンタイプ) (秋月電子:P-04303) 80円 ブレッドボード用ワイヤ / SHW-S0.65mm-7 (共立エレショップ: A1T141) 605円 あと、アルトイズの ミント缶 (楽天で 400円ほど)があれば
  • 55. どこでもフィジカル・ コンピューティング 原稿書いてる最中には常に持ち歩いていました これで あなたも Maker気分ADKの動作リファレンスにひとつ作っておくと便利です
  • 56. 2.スケッチを作成し Arduinoにアップロードhttps://github.com/yoshidaken1/GettingStartedADK/blob/ma ster/firm_Arduino0100/AdkDaio/AdkDaio.ino
  • 57. 3.ArduinoとAndroidを接続し外部 インテントが起動するか確認 ADK用Androidアプリを 自動起動しようとするが 見つからないとの ダイアログが表示される ADKの接続確認と機種対応の確認
  • 58. 4.Androidプロジェクトの作成Androidプロジェクトを作成しAndroidにアップロードするまでの作成手順は以下の通り 4.1 AndroidManifest.xmlに要素を追加 4.2 res/xml/accessory_filter.xmlの作成 4.3 res/layout/main.xmlで画面レイアウト作成4.4 javaプログラムを作成https://github.com/yoshidaken1/GettingStartedADK /tree/master/AdkDaioProj
  • 59. 5.ArduinoとAndroidを 接続し動作確認ADK用Androidアプリを自動起動してもいいか確認するダイアログが表示される ADK接続&実行
  • 60. コード概説外部インテント(Arduinoか らのアプリ起動)
  • 61. Arduinoスケッチ
  • 62. Androidソース res/xml/accessory_filter.xml 3つの文字列が一致していれ ば、外部インテントを受け取り アプリが起動する。
  • 63. Androidプロジェクトは Google APIs 2.3.3ターゲット名は「Google APIs」プラットフォームは「2.3.3」APIレベル10
  • 64. AndroidManifest.xmlに 使用ライブラリを指定 Google API 2.3.3に含まれるUSB アクセサリのライブラリを指定USBアクセサリ接続が行われるとaccessory_filter.xml 起動するか否かフィルター設定を参照するよう指定
  • 65. AdkDaioProjActivity.javaブロードキャストレシーバブロードキャストレシーバでUSBからの外部インテントによるダイアログを判別する。OKならプライベー トなopenAccessory()メソッドを呼び出し接続を行う。《ADKの定型的な処理=リファクタリング対象》
  • 66. コード概説Androidから見た入出力 ストリーム
  • 67. 出力ストリーム (Android→Arduino)イベントリスナーからプライベートなメソッドsendCommand()が呼び出されると…FileOutputStreamクラスのwriteメソッドでArduinoにデータを出力する
  • 68. AdkDaioProjActivity.javaバイト配列buffer[]にデジタル/アナログデータを 格納
  • 69. 入力ストリーム (Android←Arduino)スレッドを用い、run()メソッド内でFileIntputStreamクラスのreadメソッドでArduinoからのデータを入力受信したデータはMessageクラスのインスタンスとしてハンドラで表示処理
  • 70. AdkDaioProjActivity.java Arduinoからの入力があるときだけスレッドが必要 (出力だけなら不要)あらかじめ大きめのバイト配列buffer[]を用意しておき、 read()で入力ストリームから入力する
  • 71. AdkDaioProjActivity.javarun()メソッド内でUI処理ができないため、Messageクラス のインスタンスをwhat識別子つきでハンドラへ送信
  • 72. AdkDaioProjActivity.javawhat識別子で判別しUIウィジェットへデータを表示
  • 73. コード概説 Arduinoと電子部品のやりとり
  • 74. 基本的な入出力汎用入出力(GPIO) Arduinoの関数 RT-ADK&RT-SDK その他代表的なパー のパーツ ツデジタル出力 リレー LED(単色) digitalWrite()デジタルピンのOUTアナログ出力 RGB LED、サー DCモータデジタルピンのPWM出力 analogWrite() ボモータデジタル入力 タクトスイッチ 磁気センサ、モーシデジタルピンのIN digitalRead() ョンセンサアナログ入力 温度センサ、照度 加速度センサ、距離アナログ入力ピン analogRead() センサ、タッチセ センサ ンサ4つの基本パターンができると色んな電子部品を制御できるようになります。
  • 75. デジタル出力(Arduino→電子部品)digitalWrite(ピン番号, HIGHかLOWの値) HIGH:5V(LEDオン)LOW:0V(LEDオフ)
  • 76. アナログ出力(Arduino→電子部品) analogWrite(ピン番号,0から255の値)0V~5Vの電圧を256段階に分けてPWM出力
  • 77. Arduinoスケッチloop( )ブロック内 Androidからread
  • 78. デジタル入力(Arduino←電子部品) digitalRead(ピン番号) 戻り値はHIGHまたはLOWとなります。
  • 79. Arduinoスケッチloop( )ブロック内 Androidへwrite
  • 80. アナログ入力(Arduino←電子部品) analogRead(ピン番号)0V~5Vを1024段階(10ビット)に分けて入力
  • 81. Arduinoスケッチloop( )ブロック内 Androidへwrite10ビットのデータを2バイトに分けてバイト配列に格納し送信する必要がある
  • 82. 完成です
  • 83. コード概説コマンドデータ/データ プロトコルの留意点
  • 84. Javaはunsignedが無い•C言語でいう所の unsigned char(8ビット符号なし整数)が無い。 •unsignedは符号なし整数型の修飾子 •これが結構、始末が悪い(私見ですけど…。 苦々しく思っている組込み屋さんも少なくな いと思う、多分。)
  • 85. byte型(符号付き8ビット整数)•byte型は8ビットのうち最上位ビットが符号に用いられる(-128~127)。•Arduinoからのバイトデータをそのまま使えない事態が起きる。【対処】0xFFと論理和を取って8ビットの値を取り出す。
  • 86. AdkDaioProjActivity.javabyte型の値をintの変数に代入する場合0xFFと論理和を取って8ビットの値を取り出す。 でもど~して8ビット(=1バイト)ごとに分けて 送る必要があるの??
  • 87. Socket通信は バイトストリーム • ネットワークバイトオーダー • 機種ごとのエンディアンの違いを吸収す るため1バイトづつ配列に並べてストリ ームとする • Arduinoはリトルエンディアン • Android端末はビッグエンディアンWokashi:[arduino][android]ADKでfloat型のデータを扱う
  • 88. ByteBufferクラス• byte[] バイト配列よりもByteBufferクラス の方が効率よくストリームを利用できる、 らしい。• StringとStringBuffer的な存在? [arduino][android][adk]構造体を送る ADK使ってAndroid端末側に構造体で データを送りつける。
  • 89. Java(Android)と Arduinoのデータ型 データ型 Java Arduino byte 1byte 1byte int 4byte 2byte long 8byte 4byte float 4byte 4byte double 8byte 4byte ArduinoはAtmel社のAVRマイコンのデータ型の”sizeof”を アーキテクチャに依存する意識する場面がある
  • 90. という訳で何か出来たら 一緒に展示しましょう!! 2012年3月OSC愛媛とABC 20122012年5月オープンセミナー2012岡山とOSC名古屋 ハングアウトでつないで講演・展示しました。北海道と神戸で展示会場をハングアウトでつないだり 都合が合えば是非お願いします(^-^)/
  • 91. ご清聴ありがとうござい ましたm(_ _)m