イチからはじめるusb host api
DESCRIPTION
※【訂正】資料 p.4のMicrobridgeのデバイス給電の項目は「Android→デバイス」になっていますが正しくは「デバイス→Android」です (@kumadasu さんthx)TRANSCRIPT
![Page 1: イチからはじめるUSB Host API](https://reader036.vdocuments.site/reader036/viewer/2022062303/556a5610d8b42a7a138b4ac3/html5/thumbnails/1.jpg)
イチからはじめるUSB Host API
すずき@ksksue
![Page 2: イチからはじめるUSB Host API](https://reader036.vdocuments.site/reader036/viewer/2022062303/556a5610d8b42a7a138b4ac3/html5/thumbnails/2.jpg)
でんもく会「イチからはじめる」シリーズ コンセプト:オープンスキル
= オープンソース + オープンハードウェアと理解しました
裏コンセプト:技術教えるからおもしろいもの作ってボクを楽しませてよ
![Page 3: イチからはじめるUSB Host API](https://reader036.vdocuments.site/reader036/viewer/2022062303/556a5610d8b42a7a138b4ac3/html5/thumbnails/3.jpg)
イチからはじめる USB Host API Android 3.1(Honeycomb) から実装された USB
Host API の紹介 USB Host API とタイトル銘打ってますが、対象が
広すぎるので、このプレゼンでは USB シリアルにしぼる方向で
デモ:GR-SAKURAシリアル通信でエコーバックさせて Androidで表示
![Page 4: イチからはじめるUSB Host API](https://reader036.vdocuments.site/reader036/viewer/2022062303/556a5610d8b42a7a138b4ac3/html5/thumbnails/4.jpg)
Android と外部機器を有線接続させる方式まとめ
USB Host API ADK MicroBridge
特徴 様々なデバイスに対応可。自由度が高い。
通信プロトコルをGoogle がサポート。
すべてのバージョンの Android に繋がる
Android 対応バージョン
3.1 以降 2.3.4 以降 すべて
デバイス選択幅 広 限定 限定
デバイス給電 Android→ デバイス
デバイス→ Android
Android→ デバイス
プログラミング難易度
高 中 中
対象デバイス例 Arduino, USB シリアル , マイコン , Midi, Kinect,etc…
ADK2012, Arduino ADK
Arduino + USB ホストシールド
![Page 5: イチからはじめるUSB Host API](https://reader036.vdocuments.site/reader036/viewer/2022062303/556a5610d8b42a7a138b4ac3/html5/thumbnails/5.jpg)
USB Host API と ADK の使い分け1 給電方式による使い分け
ADK : ○ Android 端末の電源を持続させる☓ 別電源が必要 (AC アダプタ or バッテリー ) 使用用途:長時間据え置き、ロガー
USB Host API : ○ Android 端末の電源を使える 長時間の使用には向いていない☓
使用用途:短時間だけ使用するツール、デモ 対象デバイスによる使い分け
ADK : USB Host 機能がついた AVR(Arduino)/PIC 系のADK 対応デバイス
USB Host API : 大抵のデバイス OK( アイソクロナス転送以外 )
![Page 6: イチからはじめるUSB Host API](https://reader036.vdocuments.site/reader036/viewer/2022062303/556a5610d8b42a7a138b4ac3/html5/thumbnails/6.jpg)
USB Host API と ADK の使い分け2 プログラミング難易度による使い分け
ADK :アプリプログラミングがラク USB Host API : アプリプログラミング
+USB 基礎知識 +USB プログラミング +USB デバッグ
技術的な障壁が高い・・・
→ プロトコル部分をライブラリ化することで ADK並にラクに開発できる環境になる
… ということで USB シリアル通信ライブラリ「 FTDriver 」を
github で公開
![Page 7: イチからはじめるUSB Host API](https://reader036.vdocuments.site/reader036/viewer/2022062303/556a5610d8b42a7a138b4ac3/html5/thumbnails/7.jpg)
USB Host API クラスClass DescriptionUsbManager Allows you to enumerate and communicate with
connected USB devices.UsbDevice Represents a connected USB device and contains
methods to access its identifying information, interfaces, and endpoints.
UsbInterface Represents an interface of a USB device, which defines a set of functionality for the device. A device can have one or more interfaces on which to communicate on.
UsbEndpoint Represents an interface endpoint, which is a communication channel for this interface. An interface can have one or more endpoints, and usually has input and output endpoints for two-way communication with the device.
UsbDeviceConnection Represents a connection to the device, which transfers data on endpoints. This class allows you to send data back and forth sychronously or asynchronously.
UsbRequest Represents an asynchronous request to communicate with a device through aUsbDeviceConnection.
UsbConstants Defines USB constants that correspond to definitions in linux/usb/ch9.h of the Linux kernel.
6 つ以上のクラス ,数十メソッド
(めんどくさい!)
![Page 8: イチからはじめるUSB Host API](https://reader036.vdocuments.site/reader036/viewer/2022062303/556a5610d8b42a7a138b4ac3/html5/thumbnails/8.jpg)
FTDriver https://github.com/ksksue/FTDriver USB シリアル通信用 Android ライブラリ
コンセプト: Arduino ライクなシンプルなインタフェースでシリアル通信しよう
Arduino FTDriver(Android)
Serial.begin(9600); Serial.begin(9600);
Serial.end(); Serial.end();
readByte = Serial.read();
Serial.read(readBuf);
Serial.write(writeBuf); Serial.write(writeBuf);
Arduino と FTDriver のシリアル通信リファレンス比較
![Page 9: イチからはじめるUSB Host API](https://reader036.vdocuments.site/reader036/viewer/2022062303/556a5610d8b42a7a138b4ac3/html5/thumbnails/9.jpg)
USB Host API(FTDriver) を使った事例紹介~ Android と Arduino でシリアル通信~
![Page 10: イチからはじめるUSB Host API](https://reader036.vdocuments.site/reader036/viewer/2022062303/556a5610d8b42a7a138b4ac3/html5/thumbnails/10.jpg)
USB Host API(FTDriver) を使った事例紹介~ フルカラー LED 制御~ @juju_suu さん
http://www.youtube.com/watch?v=ns4DKYXES_o
構成
フルカラーLED パネル
Android タブレット
動画再生
![Page 11: イチからはじめるUSB Host API](https://reader036.vdocuments.site/reader036/viewer/2022062303/556a5610d8b42a7a138b4ac3/html5/thumbnails/11.jpg)
USB Host API(FTDriver) を使った事例紹介~シリアルサーボ制御~ akagawa さん
http://www.youtube.com/watch?v=QZOVAMQilCg
![Page 12: イチからはじめるUSB Host API](https://reader036.vdocuments.site/reader036/viewer/2022062303/556a5610d8b42a7a138b4ac3/html5/thumbnails/12.jpg)
対応状況 (2012/10/6 現在 )
機種 OK/NG/?
Arduino UNO OKArduino MEGA OKArduino ADK OKArduino Leonard NGmbed NXP LPC11U24 ?
mbed NXP LPC1768 OK
NXP LPC1769 OKGR-SAKURA OKPSoC ?Arduino Duemilanove OK
Harpy nano OK
FTDI・ FT232RL・ FT232H・ FT2232C/D/HL・ FT4232HL・ FT230X
ラトックシステム・ REX-USB60F/MI
秋月 FT232RLUSB シリアルモジュール
![Page 13: イチからはじめるUSB Host API](https://reader036.vdocuments.site/reader036/viewer/2022062303/556a5610d8b42a7a138b4ac3/html5/thumbnails/13.jpg)
イチからはじめる USB Host API FTDriver ゴール: USB シリアルを使って Android とマイコ
ンをつなげエコーバックさせてみよう
![Page 14: イチからはじめるUSB Host API](https://reader036.vdocuments.site/reader036/viewer/2022062303/556a5610d8b42a7a138b4ac3/html5/thumbnails/14.jpg)
USB シリアル接続に必要な小道具 USB A type ⇔ micro B type
変換コネクタ
USB A type ⇔ micro B type変換コネクタ
![Page 15: イチからはじめるUSB Host API](https://reader036.vdocuments.site/reader036/viewer/2022062303/556a5610d8b42a7a138b4ac3/html5/thumbnails/15.jpg)
接続先: GR-SAKURA/*GR-SAKURA Sketch Template Version: V1.01*/#include <rxduino.h>
#define INTERVAL 10
void setup(){ Serial.begin(9600); pinMode(PIN_LED0,OUTPUT); pinMode(PIN_LED1,OUTPUT); digitalWrite(PIN_LED0, 1);}
void loop(){ if(Serial.available() > 0) { digitalWrite(PIN_LED1, 1); Serial.write(Serial.read()); delay(INTERVAL); digitalWrite(PIN_LED1, 0); } else { delay(INTERVAL); }}
シリアル受信した文字をそのまま送信
![Page 16: イチからはじめるUSB Host API](https://reader036.vdocuments.site/reader036/viewer/2022062303/556a5610d8b42a7a138b4ac3/html5/thumbnails/16.jpg)
FTDriver チュートリアル Android アプリ
1. Begin で接続
2. Write で書き込み
3. Read で読み込み
4. End で切断
Read ボタンタップするとエコーバックを表示
begin(), end(), read(), write() を使ったUSB シリアルプログラミングのチュートリアル
https://github.com/ksksue/FTDriver
![Page 17: イチからはじめるUSB Host API](https://reader036.vdocuments.site/reader036/viewer/2022062303/556a5610d8b42a7a138b4ac3/html5/thumbnails/17.jpg)
FTDriver Tutorial 1 のソースコード
if(mSerial.begin(FTDriver.BAUD9600)) { /* オープンが成功したときの処理 */} else { /* オープンが失敗したときの処理 */}
/* 一度に最大 4096byte 受信可能 */byte[] rbuf = new byte[4096];/* 受信したバイト数が戻り値 */len = mSerial.read(rbuf);
String wbuf = "FTDriver Test.";/* String を byte 配列に変換して渡す */mSerial.write(wbuf.getBytes());
mSerial.end();
![Page 18: イチからはじめるUSB Host API](https://reader036.vdocuments.site/reader036/viewer/2022062303/556a5610d8b42a7a138b4ac3/html5/thumbnails/18.jpg)
自分の Android はUSB Host API 対応? 1/4
エクアドル
ソースコード・アプリを公開しているとときどき質問がくる
「ぼくのタブレット、 USB キーボードはうごくのに、キミのアプリはうごかないってどういうことさ?」(エクアドル在住アンドレスさん)
![Page 19: イチからはじめるUSB Host API](https://reader036.vdocuments.site/reader036/viewer/2022062303/556a5610d8b42a7a138b4ac3/html5/thumbnails/19.jpg)
自分の Android はUSB Host API 対応?2 /4 Android の USB ホスト機能は Linux USB ホスト機
能と USB Host API の 2 種類存在Linux USB ホスト USB Host API
目的・用途 エンドユーザが USBキーボード / マウス /USB メモリを使える。
開発者が USB ホスト機能を使ってアプリケーション開発できる。
Android バージョン
Android3.1 以前でも動作
Android3.1 以降
対応内容 USB2.0 のUSB Mass Strage Class(USB メモリ ) 、 USB HID Class(USB キーボード、USB マウスなど )
USB 2.0アイソクロナス転送を除く 3 種類の転送方式に対応。プロトコルがわかれば開発者の手で USB デバイスに対応可
※「 Linux USB ホスト」という名称は USB Host API と区別しやすくするため 勝手につけた名称です
![Page 20: イチからはじめるUSB Host API](https://reader036.vdocuments.site/reader036/viewer/2022062303/556a5610d8b42a7a138b4ac3/html5/thumbnails/20.jpg)
自分の Android はUSB Host API 対応?3 /4 ややこしいところ
Android3.1 以降であっても端末によってはサポートされていない 中華 Pad は非サポートが多い Galaxy Nexus(Android 4.0) は日本版だけサポートされて
いなかった。後のアップデートでサポート 自分の Android は対応しているかどうか
どうやってチェックすればいいの? Web情報(少ない) Android アプリ「 USB Host Viewer 」 , 「 USB Device
Info 」をインストール、デバイスを接続して情報が表示されるかチェック(これがイチバン確実)
そもそも上記アプリがインストールできない場合はアウト
アンドレスさんのケース
![Page 21: イチからはじめるUSB Host API](https://reader036.vdocuments.site/reader036/viewer/2022062303/556a5610d8b42a7a138b4ac3/html5/thumbnails/21.jpg)
自分の Android はUSB Host API 対応? 4/4
エクアドル
… という内容を踏まえて返信
「中華 Pad乙。 m9 」
![Page 22: イチからはじめるUSB Host API](https://reader036.vdocuments.site/reader036/viewer/2022062303/556a5610d8b42a7a138b4ac3/html5/thumbnails/22.jpg)
まとめ USB Host API のとくちょう USB Host API を使ったライブラリでぐっと開発効率がよくなる
FTDriver でできること紹介 FTDriver で GR-SAKURA からのエコーバック表示 自分の Android は対応してる?
![Page 23: イチからはじめるUSB Host API](https://reader036.vdocuments.site/reader036/viewer/2022062303/556a5610d8b42a7a138b4ac3/html5/thumbnails/23.jpg)
ご清聴ありがとうございました