Android端末をUSBのホストとし,USB-シリアル変換ICを介してXBeeとを接続するには,usb-serial-for-androidというライブラリが必要であることが分かってきました.この文章では,Android Stuidoでこのライブラリを利用し,XBeeとの通信を行ってみたいと思います.

まず動作環境を下に示します.

  • Android Stuido 1.5.1
  • usb-serial-for-android v0.2.0
  • Nexus7 2013 SDK23(Android 6.0)
  • FT232RL

usb-serial-for-androidのダウンロード

GitHubに登録されているライブラリをダウンロードしてきます.この文章を書いている2016年2月時点で,バージョンは0.2.0でした.下図のようにDownload ZIPボタンを押すと一式のライブラリがダウンロードできます.

DownloadUsbSerialForAndroid

 


プロジェクトのビルド

ダウンロードしましたら解凍してください.ここではデスクトップに解凍しました.Android Studioの最初の画面で,下図のように「Open an existing Android Studio Project」を選択します.

UsbSerialForAndroid01

 

デスクトップに置かれているプロジェクトを下図のように選択します.

UsbSerialForAndroid02

 

プロジェクトが開かれますと下図のようなエラーが発生します.これは,プロジェクトのターゲットがSDK19となっており,わたくしの開発環境ではそれが入っていないために発生しています.SDK19をインストールするという選択肢もあるのですが,ここではbuild.gradleに書かれているターゲットを23に引き上げます.下図のように,usb-serial-for-android-master⇒usbSerialForAndroid⇒src⇒build.gradleを開きます.今回問題となっているのはおもにcompleSdkVersionですが,一緒にbuildToolVersionも変更します.下図のcompileSdkVersionとbuildToolVersionに注目してください.

UsbSerialForAndroid04

 

下図のようにcompileSdkVersionを23,buildToolVersionを23.0.2にしてください.そして,gradleとの同期をとるためTryAgainを押してください.なお,buildToolVersionがインストールされていないとそれを伝えるエラーが現れます.この場合,インストールできるリンクが現れますのでそれに従って下さい.以上でライブラリは完成です.

UsbSerialForAndroid05

 


サンプルプログラムの実行

usb-serial-for-androidにはUSB接続されたデバイス名を表示し,そのデバイスから受信したデータを表示するサンプルプログラムusbSerialExamplesが含まれていますのでこれを実行してみます.下図のようにusbSerialExamples⇒java⇒src.com.hoho.android.usbserial.examples⇒SerialConsoleActivity.javaを開きます.今回接続しようとしてるXBeeは9600[bps]で接続しようとしているため,setParametersの第1引数を9600に変更します.

UsbSerialForAndroid06 

 

 次にNexus7をパソコンに接続しダウンロードします.ダウンロードすると下図のようにアプリケーションが立ち上がります.この時点ではXBeeが接続されていないため,デバイスが見つからない状態です.

UsbSerialForAndroid07

 

FT232RLが搭載されたXBee接続基板とNexus7を接続しますと,下図のようにUSBデバイス用アプリを選択を求められます.今回はSerial Examplesを選択します.

UsbSerialForAndroid08

 

見つかったデバイスであるVendor 0403 Product 6001がFT232RLですので,これを選択します.

UsbSerialForAndroid09

 

次にパソコンにXBeeを接続し,XCTUを立ち上げてデータを送信します.なお,今回はあらかじめ2個のXBeeをCoordinator ATとRouter ATにし,さらに送信先として相手のMACアドレスを登録してあります.下図のようにXCTUにてパケットを作成したうえで,Send selected packetを選択します.

UsbSerialForAndroid10

 

うまくいきますと,下図のように受信したデータがNexus7に現れます.

UsbSerialForAndroid11

 


ライブラリの作成

上記までで,同じプロジェクト内にあるサンプルプログラムを実行できることを確認できましたが,毎回このプロジェクトを使用するわけにもいきませんので,usbSerialForAndroidをJARにして利用することにします.ここではAndroid StudioによるJARライブラリの作成方法について説明します.なお,ここに係れている方法はこちらのホームページを参考にしました.

ここでは,「UsbSerialForAndroidLibrary.jar」を作るようにgradleの設定ファイルを編集します.そのために,下図のようにbuild.gradle[Module: usbSerialForAndroid]を開き,図の下に示す文言を追加します.

UsbSerialForAndroid12

def JAR_NAME='usbSerialForAndroidLibrary.jar'
task clearJar(type: Delete) {
    delete 'build/libs/' + JAR_NAME
}
task makeJar(type: Copy) {
    from('build/intermediates/bundles/release/')
    into('release/')
    include('classes.jar')
    rename('classes.jar', JAR_NAME)
}
makeJar.dependsOn(clearJar, build)

 

次にモジュールをmakeするために下図のようにBuild⇒Make Module 'usbSerialForAndroid'を選択します.

 UsbSerialForAndroid13


ここまでで,makeJarというタスクを実行すればJARライブラリが生成される状態になりましたのでこれを実行します.下図のように,Andorid Studioの右端にある「Gradle」をクリックしてGradle projectsを開きます.このままではusb-serial-for-android-masterが現れませんので,Gradle projectsの左上にあるRefreshボタンを押します.そして,usbSerailForAndroid⇒Tasks⇒otherを選択します.

UsbSerialForAndroid14

 

otherの中に下図のようにmakeJarがありますのでダブルクリックしますとJARが生成されます.

UsbSerialForAndroid15

 

生成されたJARファイル(usbSerialForAndoridLibrary.jar)はusbSerialForAndroidフォルダ⇒Releaseフォルダ内にあります.


usbSerialForAndroidLibrary.jarの使用

作成されましたJARを新しいプロジェクトで使ってみましょう.まずは新規プロジェクトを作成します.そして,そのプロジェクトの中にあるappフォルダ⇒libsフォルダにusbSerialForAndroid.jarをコピーします.これだけでは追加したJARファイルをプロジェクトが認識してくれないので,下図のようにusbSerialForAndroidLibrary.jarを右クリックし,ポップアップメニューにあるAdd As Library..を選択します.

UsbSerialForAndroid16

 

これでライブラリを使用したアプリケーションを作成できるはずです.なお,usbSerialForAndroidはGNU Lesser General Public ライセンスとなっています.アプリの公開についてはこのライセンスに準拠してください.