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

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

Android 使ってみた

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

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

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

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

usb-serial-for-android

(※2021年1月10日追記 現時点での最新版のライブラリについては以下で書きました。
AndroidでUSBシリアル通信(2021/01/09版)ライブラリ最新版での動作確認
2021年1月10日追記ここまで)

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

デバイス(ケーブル)の認識
サンプルプログラムでは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, 使ってみた
-

執筆者:

関連記事

no image

Tiva C EK-TM4C123GXL(その6) Initialization と GPIO

Tiva C EK-TM4C123GXLを使ってみるの6回目です。やっと今回から本題のプログラミングです。 前回まででEWARMでTiva C用の新規プロジェクトが作成出来たとしてそのプロジェクトでプ …

no image

Microsoft AzureでASP.NETサイトを公開してみる(その1)概要と開発環境

Microsoft Azureのサイト上で、ローカル環境で開発したASP.NETのサイトを公開するまでの手順についてです。(※簡単にサイト公開までということで、データベースは利用しません。ご了承下さい …

Raspberry PiでAC100V(ソリッド・ステート・リレー)制御

Raspberry PiでAC100VのON/OFF制御を試してみました。今回そのために以下のソリッド・ステート・リレーキットを利用しました。この製品を選んだ理由としては「扱いが簡単」かなと思ったから …

3Dプリンターを使ってみた(その1)今までやったこと

3Dプリンターとは3Dデータを元にして樹脂類や石膏等の材質から3Dの形状を出力する機械です。代表的な造形方法に熱溶解積層法というのがあり、熱に溶ける樹脂を層にして重ねていく方法で立体を作り上げていきま …

3Dプリンターを使ってみた(その6)熱溶解積層法での出力処理について

3Dプリンターを使ってみたの6回目です。前回はAutodesk 123D Creatureで作成したモデルからSTLファイルを作成する方法について書きました。今回はやっと実際に3Dプリンターでの出力に …