株式会社インデペンデンスシステムズ横浜

システム開発エンジニアの西田五郎が運営しております。Raspberry Pi や Arduino その他新規開発案件のご依頼をお待ちしております。

Android 使ってみた

AndroidでUSBシリアル通信(その4)ライブラリサンプルの内容

投稿日:2014年4月30日 更新日:

AndroidでUSBシリアル通信の4回目です。今回は、前回動作確認をしたライブラリサンプルの内容、つまり設定ファイルやプログラムの構成、プログラムの仕様等を見ます。
shl23

ライブライは以下です。より詳細はこのページの説明も合わせて見て下さい。

usb-serial-for-android

まずはデバイス関連からです。

デバイス(ケーブル)の認識
サンプルプログラムではArduinoに接続するとアプリの起動画面が表示されます。その設定部分についてです。マニュフェストファイルに以下の定義があります。ここでintent-filterを定義しています。また、USB デバイスのプロパティを指定したリソースファイル(”@xml/device_filter” )を指定しています。ここに対応しているデバイス(ケーブル)の一覧が指定されています。

一覧に指定されているデバイスが接続されると、ダイアログにそれらを表示してアプリケーションを開始するか確認します。開始した場合、アプリケーションは自動的にデバイスにアクセスする権限が与えられます。このあたりは実際に動作確認した通りです。

<intent-filter>
    <action android:name="android.intent.action.MAIN" />
    <category android:name="android.intent.category.DEFAULT" />
    <category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
<intent-filter>
    <action android:name="android.hardware.usb.action.USB_DEVICE_ATTACHED" />
</intent-filter>

<meta-data
    android:name="android.hardware.usb.action.USB_DEVICE_ATTACHED"
       android:resource="@xml/device_filter" />

デバイスリストの内容
今現在は以下の記述になっています。

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <!-- 0x0403 / 0x6001: FTDI FT232R UART -->
    <usb-device vendor-id="1027" product-id="24577" />

    <!-- 0x0403 / 0x6015: FTDI FT231X -->
    <usb-device vendor-id="1027" product-id="24597" />

    <!-- 0x2341 / Arduino -->
    <usb-device vendor-id="9025" />

    <!-- 0x16C0 / 0x0483: Teensyduino  -->
    <usb-device vendor-id="5824" product-id="1155" />

    <!-- 0x10C4 / 0xEA60: CP210x UART Bridge -->
    <usb-device vendor-id="4292" product-id="60000" />

    <!-- 0x067B / 0x2303: Prolific PL2303 -->
    <usb-device vendor-id="1659" product-id="8963" />
</resources>

とりあえず、ここに指定されているvendor-idとproduct-idであればドライバが対応していて通信が出来るということです。大きく分けてマイコンボード系とUSBシリアル(RS-232c)変換チップ(変換回路)に分かれます。

デバイスリスト マイコンボード系
Arduino ここでも使用したメジャーなプロトタイピングボードです。
Teensy(Teensyduino)私は知らなかったのですがARM系のマイコンボードでTeensyduinoというのはArduino IDEをベースにした開発環境のようです。
Teensy 3.1

デバイスリスト USBシリアル変換チップ系
こちらの方が少し複雑かと思います。もちろんよくこの変換ケーブルを利用されている方は理解されているかと思いますが、変換ケーブル自体は各社から販売されていますがその内部のUSBシリアル変換チップは代表的なメーカがあります。そのメーカの変換チップが上記のデバイスリストに指定されています。

その代表的なメーカは、FTDIprolificSilicon Labsです。私個人的には、FTDIとprolificをよく見かけます。

以下ではprolificのチップが内蔵されています。スケルトンなので何とか見えるかと思います。
serialcable

USBシリアル変換チップ系での動作について
このデバイスリストに設定されている変換チップを内蔵したケーブルが全て正確にデータ送受信が出来るかというとそうでもないようです。実際に何種類か試したところ同じプログラムでも正常に送受信できる場合と出来ない場合がありました。このあたりは要注意です。

デバイスドライバの実装
ライブラリのUsbSerialLibraryフォルダ配下に上記リストのドライバの実装ファイルとユーティリティクラスがあります。アプリケーション側からはデバイスの種類は意識しないで同じインターフェースで利用出来ます。

デバイス関連は以上です。

続いてサンプルアプリについてです。ライブラリのUsbSerialExamplesフォルダ以下にソースがあります。

DeviceListActivity
SerialConsoleActivity

以上の2つのActivityがあります。DeviceListActivityの方が認識したデバイスリストを表示するActivityで、SerialConsoleActivityの方が実際にデータ受信を行うActivityです。実装としてはデバイスドライバのライブラリを利用してシリアル通信で一般的なインターフェースだと思われる、open、close、read、write等をスレッドと組み合わせて実装しています。実際にソースを見て頂く方が分かりやすいです。

DeviceListActivityの実行例(Arduino)
arduinodriver

SerialConsoleActivityの実行例(Arduino)
console

最後にまとめ的にです。

今回の方法では、AndroidのUSBホスト機能を使い、ドライバもある程度汎用性があるので、マイコンボード、制御機器、通信機器等でパソコンから制御するアプリケーションがある場合は、場合によってはスマホやタブレットに置き換えられることもあると思います。また新規設計の場合は無線化という課題もあると思いますが始めからスマホやタブレットという仕様も考えられるかと思います。

(2014/07/07追記 以下からのシリーズの記事でArduinoに温度センサを接続してAndroidで取得する内容等を書きました。)
温度管理システム的なものを作ってみる(その1)システム概要




AdSense

AdSense

-Android, 使ってみた
-

執筆者:

関連記事

SHARP製スマホSHL23でBLE通信を試してみた

SHARP製のスマホSHL23でBLE(Bluetooth Low Energy)通信のプログラミングを試してみました。わざわざSHARP製のスマホSHL23と書かないで普通にAndroidのスマホと …

AndroidでUSBシリアル通信(その2)ライブラリサンプルのArduinoスケッチ

AndroidでUSBシリアル通信の2回目です。前回はハードウェア構成、ソフトウェア構成等全体的な内容について書きました。今回はAndroidの通信相手となるArduinoのスケッチの動作確認を行って …

3Dプリンターを使ってみた(その3)Autodesk 123D Creatureで骨格作り

3Dプリンターを使ってみたの3回目です。前回は、Autodesk 123D Creature(ここからは、123D Creatureと書きます。)でモデルを作る際の大きな流れを書きました。今回は骨格と …

温度管理システム的なものを作ってみる(その5)AndroidからCloudへの送信

温度管理システム的なものを作ってみるの5回目です。前回はCloud(Microsoft Azure)での処理について書きました。そのCloudの処理の温度データ登録処理に送信するためのAndroidの …

NuGetでOpenCVを導入する

Visual Studio Express 2013 for Windows Desktopの開発環境でNuGetを使ってOpenCVを導入してみました。その方法についてです。 まずは、OpenCV( …