11月22-23日にSFC ORFというSFCの研究室の発表会があって、そこでデモするブツに使う部品としてBuffaloの赤外線学習リモコンのRubyラッパーを書きました。これで家に帰る前に暖房つけたりできてうれしいですね。
玄人志向のKURO-RSとBuffaloのPC-OP-RSを操作できます。
MacとLinuxと、試してないけどたぶんWindowsでも動く気がする。コードはgithubに置いてる。
学習リモコン/KURO-RS/(1)使ってみる – 脳みそ沸騰中!のPerlのコードを参考にしました。
■PC-OP-RSを買う
気がついたらKURO-RSがどこにも売ってないんだけど、PC-OP-RSがKURO-RSと同じハードウェアで箱と付属ソフトが違うだけなのでどちらでも動かせます。
売り上げランキング: 4538
■インストール
gem install kuro-rs
そしてKURO-RSをMacやLinuxに刺す。
Windowsの人はドライバを入れてBuffaloアプリが動くことを確かめてからUSBポートに刺す。
KURO-RSはUSBポートに接続するとシリアルデバイスとして認識されます。MacやLinuxなら/dev/tty.usb****という名前になる。WindowsならドライバをインストールしていればCOM1とかCOM2とか名前がつく。
■赤外線リモコンを学習する
kuro-rsというコマンドがgemと一緒にインストールされています。
terminalで実行する
% kuro-rs /dev/tty.usbserial-0012a3b4そして15秒以内に赤外線をKURO-RSの本体に当てると、termialに16進数で赤外線データが出力されます。
学習した赤外線を発射しましょう
% kuro-rs /dev/tty.usbserial-0012a3b4 ffffffff0300f0e0018083...のように第二引数に16進数でデータを与えます。
これでテレビのチャンネルが切り替わるはず。
■自分のプログラムから使う
こんな感じでIOっぽく使えます。くわしくはexamplesディレクトリを見るといい。
require 'rubygems'
require 'kuro-rs'
# open KURO-RS
kr = KuroRs.open('/dev/tty.usbserial-0012a3b4')
# read
puts kr.read
## => hex dump (ffffffff0300f0e0018083...)
# write
kr.write 'ffffffff0300f0e0018083'
# close
kr.close
# block
KuroRs.open('/dev/tty.usbserial-0012a3b4'){|k|
k.verbose = true
puts k.read
## => hex dump (ffffffff0300f0e0018083...)
}
■Webアプリから使う
シリアルポートは複数プロセスで共有できないし、また複数スレッドから同時に書き込んだりもできないのでRailsやSinatraアプリにkuro-rs gemをそのまま組み込むのはオススメできません。
そういう時はkuro-rs-serverを使いましょう。
こうすると8080番portでhttpサーバーが起動します
% kuro-rs-server /dev/tty.usbserial-0012a3b4 --port 8080
curlから赤外線読み書きしてみる
# readreadもwriteも正常に行われるとstatus 200が返ります。失敗すると200以外。
% curl 'http://localhost:8080'
# => hex dump (ffffffff0300f0e0018083...)
# write
% curl -d 'ffffffff0300f0e0018083...' 'http://localhost:8080'
kuro-rs-serverを内部APIとしてRailsやSinatraから、あるいはAjaxから使うのが良いと思います。