https://github.com/ksksue/FTDriver
Android 3.1以降で対応した、USB Host APIにより、FTDIチップから任意のシリアル入出力が出来ます。
今回、ksksue氏のgithubからのフォークに初挑戦し、そこにBit-bangモードに対応する改変を入れてみました。
上記本線からforkしたのはこちら⇨ https://github.com/yishii/FTDriver
Bit-bangモードとは、FTDIのFT232BM、FT245BMからサポートされたモードで、USBシリアル/USBパラレル変換ではなく、汎用入出力IOをUSBからの制御に基づいて行う、USB-IO的な動作するモードです。
FT232RLでは、5ビットのC-BUSピンのも追加され、UARTの機能を生かしたまま、Bit-bangモードを使用することもできます(要EEPROM書き換え)。
Bit-bangモードの制御追加は、OSSのlibusb上の制御モジュールlibFTDIを参考に実装してみました。
使い方は簡単。こんなかんじです。
FTDriver mSerial; final int MODE_SERIAL = FTDriver.BAUD115200; mSerial = new FTDriver((UsbManager)getSystemService( Context.USB_SERVICE)); mSerial.begin(MODE_SERIAL); // 第二引数 1 => Output mSerial.setBitmode(true, 0xff, FTDriver.FTDI_MPSSE_BITMODE_BITBANG); for(i=0;i<=5;i++){ data[0] = (byte)0xff; mSerial.write(data,1); Log.i("FTDriverTest","Output high"); data[0] = (byte)0x00; mSerial.write(data,1); Log.i("FTDriverTest","Output low"); } // exit from bit-bang mode mSerial.setBitmode(false, 0, 0); mSerial.end();入力の場合、
FTDriver mSerial; final int MODE_SERIAL = FTDriver.BAUD115200; byte data; mSerial = new FTDriver((UsbManager)getSystemService( Context.USB_SERVICE)); mSerial.begin(MODE_SERIAL); mSerial.setBitmode(true, 0x00, FTDriver.FTDI_MPSSE_BITMODE_BITBANG); data = mSerial.getPinState(); // exit from bit-bang mode mSerial.setBitmode(false, 0, 0); mSerial.end();
動画貼り付けました。実験としては、秋月のフルカラーLEDバーをFTDI FT232RLが搭載されたArduino duemilanoveのFTDIピンに接続し、Android側からIO制御するものです。
FTDIボードとして、Arduino duemilanoveを使用していますが、AVR側は何もしない起動直後に無限ループするファームを焼いています。従って、Arduinoではなく、単なるFTDIボードとして使用しています。
以下のボードでAndroidから8ビットの汎用I/Oできるってことです。
FT232RL搭載小型USB-シリアルアダプタ 5V
posted with amazlet at 12.02.18
スイッチサイエンス
売り上げランキング: 16984
売り上げランキング: 16984