USB-IO Rubyからの制御
<<
作成日時 : 2006/07/23 21:38
>>
ブログ気持玉 2 /
トラックバック 0 /
コメント 2
『手作りUSB機器』に載っている USB-IO をスクリプト言語 Ruby で制御するスクリプトを書き、 LED を点灯させることができた。
以前、USB-IO 作成では、LED の点灯を ActiveBasic を使って行った。
今回は、スクリプト言語 Ruby で制御してみた。
動作環境
- Windows XP
- テクノキット 汎用USB-I/Oキット USBIOV8/K
- LED 1つ
- 抵抗 270Ω
- USBケーブル(ストレート)
- ruby 1.8.4 mswin32
- vbausbio.dll
準備
まず、以下を用意する
以下を実行する
- ruby-1.8.4-i386-mswin32.zip を展開する
- 制御用のスクリプトを置くディレクトリに vbausbio.dll を置く
- コマンドプロンプト(DOS窓)で制御用のスクリプトを置くディレクトリに移動する(例: cd c:\tmp)
Win32API モジュールを使ったスクリプト
ActiveBasic を用いた制御で使った bas_vbausbio.bas に書いてある出力関数の定義は、以下のようになっていた。
Declare Function uio_out Lib "vbausbio.dll" (ByVal Port As Long, ByVal OutDat As Long, ByVal p3 As Long) As Long
そこで、以下のようなスクリプトを書いた
require 'optparse'
require 'Win32API'
USAGE = "ruby usb_io1.rb [--on|--off] [-h]"
opt_onoff = :ON
ARGV.options {|opt|
opt.on( '--on') { opt_onoff = :ON }
opt.on( '--off') { opt_onoff = :OFF }
opt.on('-h', '--help') { puts USAGE; exit 0 }
opt.parse!
}
def led_off(f)
f.call(1, 255, 0)
end
def led_on(f)
f.call(1, 0, 0)
end
uio_out = Win32API.new('vbausbio.dll', 'uio_out', %w(I I I), 'I')
if opt_onoff == :ON
led_on(uio_out)
else
led_off(uio_out)
end
dl モジュールを使ったスクリプト
Win32API モジュールは古いらしいので、dl モジュールを使ったスクリプトも書いてみた。
require 'optparse'
require 'dl/import'
USAGE = "ruby usb_io2.rb [--on|--off] [-h]"
opt_onoff = :ON
ARGV.options {|opt|
opt.on( '--on') { opt_onoff = :ON }
opt.on( '--off') { opt_onoff = :OFF }
opt.on('-h', '--help') { puts USAGE; exit 0 }
opt.parse!
}
module USB_IO
extend DL::Importable
dlload "vbausbio.dll"
extern "long uio_out(long, long, long)"
end
if opt_onoff == :ON
USB_IO.uio_out(1, 0, 0)
else
USB_IO.uio_out(1, 255, 0)
end
動作確認
どちらのスクリプトも以下を実行すると、LED が点灯する(スクリプト名は usb_io.rb)
> D:\tmp\soft\ruby-1.8.4-i386-mswin32\bin\ruby.exe usb_io.rb
どちらのスクリプトも以下を実行すると、LED が消える
> D:\tmp\soft\ruby-1.8.4-i386-mswin32\bin\ruby.exe usb_io.rb --off
まとめ
- テクノキット 汎用USB-IOキットに接続した LED の点灯を ruby から制御するスクリプトを書いた
- LED の点灯を制御することができた
- 今度 GUI のついたスクリプトを書いてみよう〜
|