イチからはじめるusb host api
DESCRIPTION
※【訂正】資料 p.4のMicrobridgeのデバイス給電の項目は「Android→デバイス」になっていますが正しくは「デバイス→Android」です (@kumadasu さんthx)TRANSCRIPT
イチからはじめるUSB Host API
すずき@ksksue
でんもく会「イチからはじめる」シリーズ コンセプト:オープンスキル
= オープンソース + オープンハードウェアと理解しました
裏コンセプト:技術教えるからおもしろいもの作ってボクを楽しませてよ
イチからはじめる USB Host API Android 3.1(Honeycomb) から実装された USB
Host API の紹介 USB Host API とタイトル銘打ってますが、対象が
広すぎるので、このプレゼンでは USB シリアルにしぼる方向で
デモ:GR-SAKURAシリアル通信でエコーバックさせて Androidで表示
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 ホストシールド
USB Host API と ADK の使い分け1 給電方式による使い分け
ADK : ○ Android 端末の電源を持続させる☓ 別電源が必要 (AC アダプタ or バッテリー ) 使用用途:長時間据え置き、ロガー
USB Host API : ○ Android 端末の電源を使える 長時間の使用には向いていない☓
使用用途:短時間だけ使用するツール、デモ 対象デバイスによる使い分け
ADK : USB Host 機能がついた AVR(Arduino)/PIC 系のADK 対応デバイス
USB Host API : 大抵のデバイス OK( アイソクロナス転送以外 )
USB Host API と ADK の使い分け2 プログラミング難易度による使い分け
ADK :アプリプログラミングがラク USB Host API : アプリプログラミング
+USB 基礎知識 +USB プログラミング +USB デバッグ
技術的な障壁が高い・・・
→ プロトコル部分をライブラリ化することで ADK並にラクに開発できる環境になる
… ということで USB シリアル通信ライブラリ「 FTDriver 」を
github で公開
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 つ以上のクラス ,数十メソッド
(めんどくさい!)
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 のシリアル通信リファレンス比較
USB Host API(FTDriver) を使った事例紹介~ Android と Arduino でシリアル通信~
USB Host API(FTDriver) を使った事例紹介~ フルカラー LED 制御~ @juju_suu さん
http://www.youtube.com/watch?v=ns4DKYXES_o
構成
フルカラーLED パネル
Android タブレット
動画再生
USB Host API(FTDriver) を使った事例紹介~シリアルサーボ制御~ akagawa さん
http://www.youtube.com/watch?v=QZOVAMQilCg
対応状況 (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 シリアルモジュール
イチからはじめる USB Host API FTDriver ゴール: USB シリアルを使って Android とマイコ
ンをつなげエコーバックさせてみよう
USB シリアル接続に必要な小道具 USB A type ⇔ micro B type
変換コネクタ
USB A type ⇔ micro B type変換コネクタ
接続先: 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); }}
シリアル受信した文字をそのまま送信
FTDriver チュートリアル Android アプリ
1. Begin で接続
2. Write で書き込み
3. Read で読み込み
4. End で切断
Read ボタンタップするとエコーバックを表示
begin(), end(), read(), write() を使ったUSB シリアルプログラミングのチュートリアル
https://github.com/ksksue/FTDriver
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();
自分の Android はUSB Host API 対応? 1/4
エクアドル
ソースコード・アプリを公開しているとときどき質問がくる
「ぼくのタブレット、 USB キーボードはうごくのに、キミのアプリはうごかないってどういうことさ?」(エクアドル在住アンドレスさん)
自分の 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 と区別しやすくするため 勝手につけた名称です
自分の Android はUSB Host API 対応?3 /4 ややこしいところ
Android3.1 以降であっても端末によってはサポートされていない 中華 Pad は非サポートが多い Galaxy Nexus(Android 4.0) は日本版だけサポートされて
いなかった。後のアップデートでサポート 自分の Android は対応しているかどうか
どうやってチェックすればいいの? Web情報(少ない) Android アプリ「 USB Host Viewer 」 , 「 USB Device
Info 」をインストール、デバイスを接続して情報が表示されるかチェック(これがイチバン確実)
そもそも上記アプリがインストールできない場合はアウト
アンドレスさんのケース
自分の Android はUSB Host API 対応? 4/4
エクアドル
… という内容を踏まえて返信
「中華 Pad乙。 m9 」
まとめ USB Host API のとくちょう USB Host API を使ったライブラリでぐっと開発効率がよくなる
FTDriver でできること紹介 FTDriver で GR-SAKURA からのエコーバック表示 自分の Android は対応してる?
ご清聴ありがとうございました