2016年9月17日土曜日

Ruby + pi_piper で RaspberryPi の GPIO を制御してみた

概要

Ruby で GPIO を制御するライブラリに pi_piper というライブラリがあります
今回はそれを使って簡単な L チカをやってみました

環境

  • Raspbian 8.0 (Jessie)
  • RaspberryPi2 TypeB
  • Linux raspberrypi 4.4.11-v7+ #888
  • ruby 2.1.5p273
  • gem 2.2.2
  • pi_piper 1.3.2

Ruby インストール

一応メモしておきます
ruby 自体は apt-get でインストールしました

  • sudo apt-get -y install ruby ruby-dev
  • sudo gem install bundler
  • bundle init
  • vim Gemfile
    • gem “pi_piper”
  • bundle install

配線

17 ピンと GND を使って配線するだけです
抵抗は 1KΩ を使っています

first_pi_piper_circuit.png

スクリプト

  • vim pi_piper.rb
require 'pi_piper'
include PiPiper

pins = [17]
led = 0

pins.each do |pin|
  begin
    File.open("/sys/class/gpio/unexport", "w") { |f| f.write("#{pin}") }
  rescue
    puts "Already unexported: #{pin}"
  end
end

pin = PiPiper::Pin.new(:pin => pins[led], :direction => :out)
pin.on
sleep 1
pin.off

簡単な L チカですが一点ポイントがあります
PiPiper::Pin.new する前に対象の GPIO を unexport する必要があります
で対象の GPIO がすでに unexport された状態で unexport しようとすると Exception が発生するので begin - rescue で囲っています

実行

  • bundle install && sudo bundle exec ruby pi_piper.rb

という感じで実行します
GPIO のファイルに直接内部で触っているので root 権限が必要です

成功すると 1 秒 LED が転送すると思います

最後に

Ruby で pi_piper を使ってみました
pi_piper は Eventmachine を使った GPIO の監視ができるためそれを使えるのがメリットだと思います

例えばタクトスイッチなどボタンを押す処理を loop ではなく Event 処理として扱うことができるようになります

イベント処理も機械があれば触ってみたいと思います

0 件のコメント:

コメントを投稿