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

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

*

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

      2014/09/23

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)システム概要




 - Android, 使ってみた

AdSense

AdSense

  関連記事

無線マイコン ToCoStick(トコスティック)をAndroidで使ってみた

無線マイコンの ToCoStick(トコスティック)をAndroidスマホで使っ …

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

(※2017/02/19 最新のRaspbian Jessie OSでは、初期状 …

Tiva C EK-TM4C123GXL(その1)起動確認まで

Tiva C EK-TM4C123GXLというマイコン評価ボードを使ってみました …

Raspberry Piをモニターとキーボードなしで導入する(その1)SSHでのログインまで

Raspberry Piをモニターとキーボードなしで導入する方法についてです。 …

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

温度管理システム的なものを作ってみるの5回目です。前回はCloud(Micros …

no image
Tiva C EK-TM4C123GXL(その11) ADコンバータ

Tiva C EK-TM4C123GXLを使ってみるの11回目です。前回は、UA …

no image
Tiva C EK-TM4C123GXL(その7) ボード上のスイッチを使う

Tiva C EK-TM4C123GXLを使ってみるの7回目です。 前回の続きで …

温度管理システム的なものを作ってみる(その2)Arduinoでの温度取得からスマホへ送信

「温度管理システム的なものを作ってみる」の2回目です。前回は全体的な内容について …

no image
Tiva C EK-TM4C123GXL(その10) UART通信でのデバッグ

Tiva C EK-TM4C123GXLを使ってみるの10回目です。今回は、UA …

AndroidでUSBシリアル通信(その3)ライブラリサンプルの通信確認

AndroidでUSBシリアル通信の3回目です。前回は以下のライブラリのArdu …