Gainer mini
*1は USB 接続で PC の I/O を手軽に拡張できるモジュールです。基になっているのは Gainer
*2 ですが、小型になりラジコン・サーボの制御など独自の拡張があります。ほかに Gainer 互換のモジュールには、エレキジャックのフィジカル・コンピューティング
*3 で取り上げられている Ginger, Pepper, Sugar があります。

*1
http://gainer-mini.jp/*2
http://gainer.cc/*3
http://www.eleki-jack.com/FC/
■Gainer mini と玄箱 PRO のデバイス・ドライバ
Gainer mini は、玄箱 PRO からは USB シリアルとして扱われます。デバイス・ドライバは、 usbserial の汎用ドライバが使用できます。Debian 化した玄箱 PRO の場合には、
/sbin/insmod /lib/modules/2.6.25.4/kernel/drivers/usb/serial/usbserial.ko vendor=0x09b9 product=0x0000
を実行します。0x09b9 は Gainer mini のベンダーID、0x0000 がプロダクトIDです。実行時にエラー
kurobox:/# /sbin/insmod /lib/modules/2.6.25.4/kernel/drivers/usb/serial/usbserial.ko vendor=0x09b9 product=0x0000
insmod: error inserting '/lib/modules/2.6.25.4/kernel/drivers/usb/serial/usbserial.ko': -1 File exists
が出た場合には、rmmod でデバイス・ドライバを外します。usbserial モジュールに依存しているモジュールがあれば、それも外します。まず lsmod を実行します:
kurobox:/# lsmod
Module Size Used by
ftdi_sio 34248 2
usbserial 30960 5 ftdi_sio
ftdi_sio モジュールが usbserial に依存しているので、以下のようにします:
kurobox:/# rmmod ftdi_sio
kurobox:/# rmmod usbserial
kurobox:/# /sbin/insmod /lib/modules/2.6.25.4/kernel/drivers/usb/serial/usbserial.ko vendor=0x09b9 product=0x0000
LCDd などがシリアル・ポートを開いているとエラーになります:
kurobox:/proc/bus/usb# rmmod ftdi_sio
ERROR: Module ftdi_sio is in use
その場合には、rmmod の前に、
kurobox:/proc/bus/usb# killall LCDd
などしてシリアル・ポートを開いているプロセスを止めます。
■cu を使って試してみる Gainer mini をブレッドボードに挿すなどして USB ケーブルで玄箱 PRO とつなぎます。 cu コマンドを使って Gainer mini と通信ししてみます。ttyUSB0 として認識されている場合には、
cu -l /dev/ttyUSB0
とします。PC で試す場合には、TeraTerm や HyperTerminal を使うとよいでしょう
*4。プロトコルの設定は、ボーレート: 38400bps, ビット数: 8ビット, パリティ:なし, フロー制御:なしとします。Gainer mini のコマンドは、
<コマンド>*
Gainer mini からの返り値は、
<値>*
で返ってきます
*5。まず Q (リセット), KONFIGURATION_1 (モード設定), h (LED点灯), l(小文字のL, LED消灯) を試してみます。
kurobox:/# cu -l /dev/ttyUSB2
Connected.
Q*KONFIGURATION_1*h*l*~.
Disconnected.
kurobox:/#
Q* を送ると Q* が、KONFIGURATION_1* を送ると KONFIGURATION_1* が返ってきます。!* が返ってきたときにはもう一度送ってみてください。エコーバックがないので戸惑うかもしれませんが、気にせず入力します。
KONFIGURATION_1*を入れると点滅していた LED が消灯し、h*でLED点灯、l*でLED消灯します。cuの終了時には、<ENTER>のあと ~. を送ります。このとき Gainer mini 上のスイッチを押すと N* が、離すと F* が Gainer mini から送られてきます。
*4 Gainer.cc にあるチュートリアル
http://gainer.cc/wiki/index.php?title=Tutorial/Basic/Common/03/ja
*5 プロトコルについて書かれたExcelファイル:
http://gainer.svn.sourceforge.net/viewvc/gainer/trunk/gainer/firmware/io-module_protocol.xls?view=log
■簡単なプログラムを書いてみる おおよそがわかったので、プログラムを書いてみました。LEDを点滅させ、Gainer mini上のスイッチが押されると stderr に文字列を表示するプログラムです。
gainer-test.tar.gz をダウンロードして、make でコンパイルしてください。
tar xzvf gainer-test.tar.gz
cd gainer-test
make
Gainer mini が /dev/ttyUSB0 として認識されている場合は、
./gainer-test
とします。そうでない場合は、
./gainer-test <Gainer miniのシリアルデバイス>
で実行します。実行例はビデオを見てください。
<光永 法明>
(2009/1/7: 表記をGainer mini に改めました)
コメントする