前回の「AndroidでRS-232C機器を使う(その4)」では、USB変換ケーブル(RCL-USBMB)とUSBシリアルコンバータ(REX-USB60F)を使ってAndroidタブレット Nexus7(2012)とRS-232C接続の磁気カードリーダとの接続の概要を紹介しました。
そして、今回は、Androidタブレット Nexus7(2012)とRS-232C接続の磁気カードリーダを実際に接続し、サンプルプログラムを動作させてみます。
USB Serial Converterに関する最新トピック
2013年9月よりUSBコネクタにMicro-Bタイプを採用した製品『REX-USB60MB』を発売しています。
この製品ではUSB変換ケーブルが不要となり、直接Micro-Bコネクタへ装着することが可能です。
REX-USB60MB用にAndroid版簡易ターミナルアプリ『USB60Term』をGoogle Playにて公開しており、ご購入後、すぐにお使いいただけます。
REX-USB60MBは、最新のAndroid端末 Nexus 5 および Nexus 7 (2013) *注1 で動作確認済みです。
*注1) Nexus 7 (2013)で Android OS 4.3 の場合、USBデバイスとして検出されないことが確認されています。その場合はOSバージョンを4.4へアップデートする必要があります。
まずは、この作業の前にいくつかの準備を行います。
■Eclipseを使ったAndroidアプリ用の統合開発環境の構築
これについては、「AndroidでRS-232C機器を使う(その2)」で簡単に紹介していますので、そちらを参照してください。
また、すでにAndroidアプリ用の統合開発環境を構築済みの場合は、Android-SDKを最新のものに更新しておいてください。
■ Android Debug Bridge (ADB)の設定
Android Debug Bridge (ADB)の設定としてNexus7用ADB USBドライバの設定が必要ですが、
Android-SDKを最新のものに更新すれば、Nexus7用のエントリーが入ったADB USBドライバのINFファイルが自動的にインストールされます。
[android-sdk\extras\google\usb_driver]にある[androdi_winusb.inf]に以下のNexus7用のエントリーが
記述されています。
● Nexus7用のエントリー
;Google Nexus 7
%SingleBootLoaderInterface% = USB_Install, USB\VID_18D1&PID_4E40
%SingleAdbInterface% = USB_Install, USB\VID_18D1&PID_4E41
%CompositeAdbInterface% = USB_Install, USB\VID_18D1&PID_4E42
%CompositeAdbInterface% = USB_Install, USB\VID_18D1&PID_4E42&MI_01
%CompositeAdbInterface% = USB_Install, USB\VID_18D1&PID_4E44&MI_01
■MagneticCardReader01のダウンロードとプロジェクトのインポート
RATOC e2e Storeの「REX-USB60F」の製品ページを開きます。
そして、[ダウンロード]タブをクリックしてダウンロードファイルの一覧画面に切り替えます。
一覧リストから「Android OS対応D2xx.jar版 サンプルプログラム…」をダウンロードします。
ダウンロードしたファイルを任意のフォルダで解凍します。
EclipseでMagneticCardReader01プロジェクトをインポートします。
- [File]-[Import]から[Android]の[Existing Android Code Into Workspace]を選択して、[Next]を押します。
- [Browse…]を使って [….\MagneticCardReader01]フォルダを指定します。
- Project to Import 欄に表示されている
[□…\MagneticCardReader01]にチェックを入れます。
- [□Copy projects into workplace]にチェックを入れます。
- 上記の入力を確認した上で、[Finish]をクリックします。
プロジェクトがインポートされると、[Packege Explorer]に[MagneticCardReader01]が追加されます。
※左端の黄色の!マークは、FTDI社製クラスドライバが未だ組み込まれていないためで、次で説明するFTDI社製クラスドライバ(D2xx.jar)を設定すると消えます。
■FTDI社製クラスドライバ(D2xx.jar)のダウンロードとjarファイルのコピー
- FTDIのサイト(http://www.ftdichip.com/Android.htm)の“Announcing Java D2XX Android Driver Availability (7th February 2013)” から
以下の説明文のThe API is packaged in d2xx.jar and is distributed with demo application source code see technical note 147 (TN_147), which is available for download.
最後の”download”をクリックしてTN_147_Java_D2xx_for_Android_Demo_Source.zip
をダウンロードします。 - ダウンロードしたファイルを任意のフォルダで解凍します。
- [TN_147_Java_D2xx_for_Android_Demo_Source\demo_source\libs]フォルダにある
[D2xx.jar]ファイルを [libs]フォルダへコピーします。
以上でサンプルプログラムを実行する設定はできました。
■Nexus7へのAndroidアプリのインストールと実行
- パソコンとNexus7をUSBケーブルで接続して、Eclipseからプログラムがダウンロード可能な状態にします。
- そして、Eclipse上から「com.ratocsystems.usb60sample.MagneticXardReader01.Main」プロジェクトを選択して[Run]をクリックします。
- 「Android Device Chooser」の画面から「choose a running Android device」にチェックを入れて、「Nexus7….」を選択して、「OK」を押します。
- Androidアプリがインストールされて、そのまま起動します。
- パソコンとNexus7を接続しているUSBケーブルをNexus7側のMicro-USBポートから取外します。
- そして、取り外したMicro-USBポートへUSB Serial Converterを接続します。
- 画面の中央に「このUSBデバイスが接続されたときにMagneticCardReader01を開きますか?….」
といった実行許可の確認ダイアログが表示されます。 - [OK]を押して実行を許可します。
- USB Serial Converterが検出されて、先程の「USB Serial – Not connected」が「USB Serial – Connected」に変わります。
これで、Androidアプリから磁気カードリーダーへアクセスできるようになりました。
- 磁気カードリーダーを接続し、スワイプします。
- 磁気カードの情報が読み込まれると、左に読み込んだカード情報の桁数、カード情報がその右に表示されます。
- 最後に、USB Serial ConverterをAndroidタブレットのUSBポートから外してください。USB Serial Converterが取り外されたことを検出して、「USB Serial – Not connected」の表示に変わります。
これで、AndroidタブレットでRS-232C接続の磁気カードリーダーの動作が確認できました。
このように、Android環境でもUSB Serial Converterを利用することで、RS-232C機器が使用できるようになります。
次回は、サンプルプログラムのソースを例にポイントとなる処理を説明していきます。
「AndroidでRS-232C機器を使う(その6)」に続く…
関連記事
AndroidでRS-232C機器を使う(その1)
AndroidでRS-232C機器を使う(その2)
AndroidでRS-232C機器を使う(その3)
AndroidでRS-232C機器を使う(その4)
AndroidでRS-232C機器を使う(その6)
この記事で紹介した製品
お世話になります。
詳細な解説大変ためになりました。
ふと、疑問に思ったのですが、Android端末にUSBハブを介して複数の REX-USB60MB を接続し、それぞれの通信をコントロールすることは可能でしょうか?
Android、USB両方とも初心者です。よろしくお願いします。
T.Hayashi 様、当ブログをご覧いただきありがとうございます。
ご質問いただきました Android端末で複数のREX-USB60MBをUSBハブ接続で
同時に通信することが可能かとの件につきまして回答させていただきます。
最初に、USBハブでの接続となると、接続するUSBコネクタは、Micro-USB タイプではなく
Startdard A タイプとなるので、USBシリアルコンバータは、REX-USB60MBではなく
REX-USB60F を使用することになります。
まず、Android環境でUSB-HUB経由で接続した複数のREX-USB60Fを
プログラム側で切り替えて動作させることはFTDI社が提供している
ライブラリで基本的に可能であることを確認しております。
現時点で当社が確認しているのはここまでになります。
また、当社から提供しておりますAndroid用サンプルプログラムは、
複数のREX-USB60Fが接続された環境には対応しておりません。
お客様ご自身で複数のREX-USB60Fを識別して制御するプログラムを
作成する必要があります。
さらに、複数のREX-USB60Fで同時に入出力が発生するなどの同時使用に
ついては実績がなく、FTDI社が提供しているライブラリでの制御方法
や動作の可否についてもいまとところ不明です。
回答としては中途半端になりましたが、この先の課題とさせてください。
お世話になります。
ご回答ありがとうございました。