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

システム開発エンジニアの西田五郎が運営しております。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, 使ってみた
-

執筆者:

関連記事

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

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

AndroidでUSBシリアル通信(2021/01/09版)ライブラリ最新版での動作確認

以下から始まる一連の記事でAndroidでのUSBシリアル通信について書きました。実際に開発案件につながったり、お問い合わせを頂いたりしているテーマです。 AndroidでUSBシリアル通信(その1) …

Raspberry Piをモニターとキーボードなしで導入する(その2)初期設定とリモートデスクトップ

(※2021/05/02追記 現時点で最新版のRaspberry PI OSでモニターとキーボードなしで導入する手順を書きました。ぜひこちらを見て下さい。) Raspberry Piをモニターとキーボ …

3Dプリンターを使ってみた(その5)Autodesk 123D CreatureでSTLファイルの生成

3Dプリンターを使ってみたの5回目です。前回は、Autodesk 123D Creature(ここからは、123D Creatureと書きます。)でモデルを仕上げる方法について書きました。今回は作成し …

no image

Microsoft AzureでASP.NETサイトを公開してみる(その2)ASP.NETサイトの作成

Microsoft AzureでASP.NETサイトを公開してみるの2回目です。今回は、前回インストールした Visual Studio Express 2013 for Web を使ってローカル環境 …