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ボタンを押すと一式のライブラリがダウンロードできます.
プロジェクトのビルド
ダウンロードしましたら解凍してください.ここではデスクトップに解凍しました.Android Studioの最初の画面で,下図のように「Open an existing Android Studio Project」を選択します.
デスクトップに置かれているプロジェクトを下図のように選択します.
プロジェクトが開かれますと下図のようなエラーが発生します.これは,プロジェクトのターゲットがSDK19となっており,わたくしの開発環境ではそれが入っていないために発生しています.SDK19をインストールするという選択肢もあるのですが,ここではbuild.gradleに書かれているターゲットを23に引き上げます.下図のように,usb-serial-for-android-master⇒usbSerialForAndroid⇒src⇒build.gradleを開きます.今回問題となっているのはおもにcompleSdkVersionですが,一緒にbuildToolVersionも変更します.下図のcompileSdkVersionとbuildToolVersionに注目してください.
下図のようにcompileSdkVersionを23,buildToolVersionを23.0.2にしてください.そして,gradleとの同期をとるためTryAgainを押してください.なお,buildToolVersionがインストールされていないとそれを伝えるエラーが現れます.この場合,インストールできるリンクが現れますのでそれに従って下さい.以上でライブラリは完成です.
サンプルプログラムの実行
usb-serial-for-androidにはUSB接続されたデバイス名を表示し,そのデバイスから受信したデータを表示するサンプルプログラムusbSerialExamplesが含まれていますのでこれを実行してみます.下図のようにusbSerialExamples⇒java⇒src.com.hoho.android.usbserial.examples⇒SerialConsoleActivity.javaを開きます.今回接続しようとしてるXBeeは9600[bps]で接続しようとしているため,setParametersの第1引数を9600に変更します.
次にNexus7をパソコンに接続しダウンロードします.ダウンロードすると下図のようにアプリケーションが立ち上がります.この時点ではXBeeが接続されていないため,デバイスが見つからない状態です.
FT232RLが搭載されたXBee接続基板とNexus7を接続しますと,下図のようにUSBデバイス用アプリを選択を求められます.今回はSerial Examplesを選択します.
見つかったデバイスであるVendor 0403 Product 6001がFT232RLですので,これを選択します.
次にパソコンにXBeeを接続し,XCTUを立ち上げてデータを送信します.なお,今回はあらかじめ2個のXBeeをCoordinator ATとRouter ATにし,さらに送信先として相手のMACアドレスを登録してあります.下図のようにXCTUにてパケットを作成したうえで,Send selected packetを選択します.
うまくいきますと,下図のように受信したデータがNexus7に現れます.
ライブラリの作成
上記までで,同じプロジェクト内にあるサンプルプログラムを実行できることを確認できましたが,毎回このプロジェクトを使用するわけにもいきませんので,usbSerialForAndroidをJARにして利用することにします.ここではAndroid StudioによるJARライブラリの作成方法について説明します.なお,ここに係れている方法はこちらのホームページを参考にしました.
ここでは,「UsbSerialForAndroidLibrary.jar」を作るようにgradleの設定ファイルを編集します.そのために,下図のようにbuild.gradle[Module: usbSerialForAndroid]を開き,図の下に示す文言を追加します.
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'を選択します.
ここまでで,makeJarというタスクを実行すればJARライブラリが生成される状態になりましたのでこれを実行します.下図のように,Andorid Studioの右端にある「Gradle」をクリックしてGradle projectsを開きます.このままではusb-serial-for-android-masterが現れませんので,Gradle projectsの左上にあるRefreshボタンを押します.そして,usbSerailForAndroid⇒Tasks⇒otherを選択します.
otherの中に下図のようにmakeJarがありますのでダブルクリックしますとJARが生成されます.
生成されたJARファイル(usbSerialForAndoridLibrary.jar)はusbSerialForAndroidフォルダ⇒Releaseフォルダ内にあります.
usbSerialForAndroidLibrary.jarの使用
作成されましたJARを新しいプロジェクトで使ってみましょう.まずは新規プロジェクトを作成します.そして,そのプロジェクトの中にあるappフォルダ⇒libsフォルダにusbSerialForAndroid.jarをコピーします.これだけでは追加したJARファイルをプロジェクトが認識してくれないので,下図のようにusbSerialForAndroidLibrary.jarを右クリックし,ポップアップメニューにあるAdd As Library..を選択します.
これでライブラリを使用したアプリケーションを作成できるはずです.なお,usbSerialForAndroidはGNU Lesser General Public ライセンスとなっています.アプリの公開についてはこのライセンスに準拠してください.