USB-IO Rubyからの制御

『手作り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 のついたスクリプトを書いてみよう~

この記事へのコメント

2st-rider
2007年11月23日 14:21
RubyでUSB-IOを制御できないかな?とおもって検索していたらこちらのBlogを見つけました。早速USB-IOも注文してしまったので参考にさせていただきます。
http://ameblo.jp/2st-rider/
2007年11月24日 13:40
参考になれば幸いです

この記事へのトラックバック