前回の記事では、Raspberry Pi上でmod_mrubyを動作させることに成功しました。やはり次はマイコンボードらしく、GPIOを操作してLEDを光らせてみましょう。
しかし、普通に光らせても面白くないので、mod_mrubyを使ってブラウザからLEDを光らせてみました。
ちなみに、無線LAN化も試してみました。以下はその時の写真です。
準備
まずは、mrubyでGPIOを操作するために、mruby-WiringPiとmruby-sleepをmrbgemとしてmrubyに組み込みます。
以下のようなbuild_config.rbになります。
conf.cc = ENV['CC'] ¦¦ 'gcc'
conf.ld = ENV['LD'] ¦¦ 'gcc'
conf.ar = ENV['AR'] ¦¦ 'ar'
conf.cflags << (ENV['CFLAGS'] ¦¦ %w(-g -O3 -Wall -Werror-implicit-function-declaration))
conf.ldflags << (ENV['LDFLAGS'] ¦¦ %w(-lm))
conf.gem :git => 'https://github.com/akiray03/mruby-WiringPi.git'
conf.gem :git => 'https://github.com/matsumoto-r/mruby-sleep.git'
end
そして、mrubyをリビルドして、mod_mrubyに組み込みます。組み込み方は前回の記事を参考にして下さい。
mod_mrubyの設定とRubyスクリプトを書く
mod_mrubyの設定は以下のようにしました。リクエストコンテンツ処理直前のFixups当たりでフックします。
mrubyFixupsMiddle "/usr/local/apache/htdocs/led.rb"
そして、実際にフックさせるmrubyスクリプトは以下です。
io = WiringPi::GPIO.new
pin = 7
if r.uri == "/led/on"
io.write(pin, WiringPi::HIGH)
Apache.return 200
elsif r.uri == "/led/off"
io.write(pin, WiringPi::LOW)
Apache.return 200
elsif r.uri == "/led/flash"
5.times do ¦v¦
io.write(pin, WiringPi::HIGH)
Sleep::sleep 1
io.write(pin, WiringPi::LOW)
Sleep::sleep 1
end
Apache.return 200
else
Apache.return Apache::DECLINED
end
ブラウザからLEDを操作してみる
上記のようにmod_mrubyでApacheモジュールを作り、以下のようにアクセスします。
LEDをONにしたい場合
http://192.168.0.10/led/on
LEDをOFFにしたい場合
http://192.168.0.10/led/off
LEDを点滅(5回)したい場合
http://192.168.0.19/led/flash
実際にアクセスしてみると、きちんと光ました!
わーい、これでブラウザからGPIOが操作し放題です。
今後
mod_mruby経由でブラウザからRaspberry PiのGPIOを操作することに成功しました。
今度は、この技術を応用して、
http://192.168.1.10/エアコン/on
http://192.168.1.10/エアコン/off
http://192.168.1.10/温度/摂氏
http://192.168.1.10/温度/摂氏/tweet
http://192.168.1.10/ルンバ/on
http://192.168.1.10/ウォシュレット/ノズルクリーン
などなど夢が広がリングです!mod_mrubyで簡単にApacheモジュールを作ってみんなも遊んでみませんか?
0 Comments.