イチからはじめるusb host api

23
イイイイイイイイ USB Host API イイイ @ksksue

Upload: keisuke-suzuki

Post on 31-May-2015

8.582 views

Category:

Technology


1 download

DESCRIPTION

※【訂正】資料 p.4のMicrobridgeのデバイス給電の項目は「Android→デバイス」になっていますが正しくは「デバイス→Android」です (@kumadasu さんthx)

TRANSCRIPT

Page 1: イチからはじめるUSB Host API

イチからはじめるUSB Host API

すずき@ksksue

Page 2: イチからはじめるUSB Host API

でんもく会「イチからはじめる」シリーズ コンセプト:オープンスキル

= オープンソース + オープンハードウェアと理解しました

裏コンセプト:技術教えるからおもしろいもの作ってボクを楽しませてよ

Page 3: イチからはじめるUSB Host API

イチからはじめる USB Host API Android 3.1(Honeycomb) から実装された USB

Host API の紹介 USB Host API とタイトル銘打ってますが、対象が

広すぎるので、このプレゼンでは USB シリアルにしぼる方向で

デモ:GR-SAKURAシリアル通信でエコーバックさせて Androidで表示

Page 4: イチからはじめるUSB Host API

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

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

USB Host API と ADK の使い分け2 プログラミング難易度による使い分け

ADK :アプリプログラミングがラク USB Host API : アプリプログラミング

+USB 基礎知識 +USB プログラミング +USB デバッグ

技術的な障壁が高い・・・

→ プロトコル部分をライブラリ化することで ADK並にラクに開発できる環境になる

… ということで USB シリアル通信ライブラリ「 FTDriver 」を

github で公開

Page 7: イチからはじめるUSB Host API

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

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

USB Host API(FTDriver) を使った事例紹介~ Android と Arduino でシリアル通信~

Page 10: イチからはじめるUSB Host API

USB Host API(FTDriver) を使った事例紹介~ フルカラー LED 制御~ @juju_suu さん

http://www.youtube.com/watch?v=ns4DKYXES_o

構成

フルカラーLED パネル

Android タブレット

動画再生

Page 11: イチからはじめるUSB Host API

USB Host API(FTDriver) を使った事例紹介~シリアルサーボ制御~ akagawa さん

http://www.youtube.com/watch?v=QZOVAMQilCg

Page 12: イチからはじめるUSB Host API

対応状況 (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

イチからはじめる USB Host API FTDriver ゴール: USB シリアルを使って Android とマイコ

ンをつなげエコーバックさせてみよう

Page 14: イチからはじめるUSB Host API

USB シリアル接続に必要な小道具 USB A type ⇔ micro B type

変換コネクタ

USB A type ⇔ micro B type変換コネクタ

Page 15: イチからはじめるUSB Host API

接続先: 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

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

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

自分の Android はUSB Host API 対応? 1/4

エクアドル

ソースコード・アプリを公開しているとときどき質問がくる

  「ぼくのタブレット、 USB キーボードはうごくのに、キミのアプリはうごかないってどういうことさ?」(エクアドル在住アンドレスさん)

Page 19: イチからはじめるUSB Host API

自分の 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

自分の 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

自分の Android はUSB Host API 対応? 4/4

エクアドル

… という内容を踏まえて返信

  「中華 Pad乙。 m9 」

Page 22: イチからはじめるUSB Host API

まとめ USB Host API のとくちょう USB Host API を使ったライブラリでぐっと開発効率がよくなる

FTDriver でできること紹介 FTDriver で GR-SAKURA からのエコーバック表示 自分の Android は対応してる?

Page 23: イチからはじめるUSB Host API

ご清聴ありがとうございました