2013-08-03

Raspberry PiのGPIOをブラウザからいじれるWebIOPiを試してみた

このエントリーをブックマークに追加 このエントリーを含むはてなブックマーク
以前、GPIOでLEDをチカチカさせてみました。
Raspberry PiとRubyでLEDをチカチカさせる

その後、Raspberry PiでGPIOをブラウザからいじれるWebIOPiというものがあると知り試してみました。

WibIOPiに関しては、以下をご覧ください。
https://code.google.com/p/webiopi/


インストールは、以下のような感じです。

sudo su -
cd /usr/local/src
wget http://webiopi.googlecode.com/files/WebIOPi-0.6.0.tar.gz
tar xvzf WebIOPi-0.6.0.tar.gz
cd WebIOPi-0.6.0
./setup.sh

なんかいろいろインストールするのでちょっと時間がかかります。

RaspberryPiを起動したときにWebIOPiも自動起動させるならば、以下も実行します。
update-rc.d webiopi defaults

WebIOPiの起動は以下のとおりです。
sudo /etc/init.d/webiopi start

WebIOPiの停止は以下のとおりです。
sudo /etc/init.d/webiopi stop


デフォルトでは8000番ポートで起動するのでブラウザから接続します。
http://raspberrypi.local:8000/

ログインパスワードが聞かれますが、デフォルトでは
ユーザ名:webiopi
パスワード:raspberry
になります。


で、パスワード認証後の画面は以下のような感じになります。

GPIO Headerをクリックすると以下のような画面が出てきます。

このグレーのINとなっている部分をクリックするとOUTになります。
GPIO 27の横のINをクリックしてOUTにした例です。

そしてピン番号をクリックするとオレンジ色になりOUTの場合はHIGHになります。
13番のピンをクリックした例です。

このとき、以下のようなLEDを光らす回路を接続していたらLEDが光ります。再度クリックして黒に戻すと消えます。


ちょっと実験するには便利な感じです。


TOPページの他の部分をクリックすると以下のような画面が出ます。

GPIO Listは以下のような感じです。
GPIO Headerの表示方法を変更した感じです。


Serial Monitorは以下のような感じです。
こちらは試していないので、どんな動きをするのか不明です。


Device Monitorは以下のような感じです。

こちらも試していないので、どんな動きか不明です。


WebIOPiはAPIをいろいろ用意しています。
REST APIもあり、他のプログラムから利用することもできます。

APIの例です。
とりあえずGPIO27に対しての例で、リクエストURLは以下のような感じです。

現在状態取得
GET http://raspberrypi.local:8000/GPIO/27/value

利用状態をOUTに設定
POST http://raspberrypi.local:8000/GPIO/27/function/out

シグナルをHIGHにする
POST http://raspberrypi.local:8000/GPIO/27/value/1

シグナルをLOWにする
POST http://raspberrypi.local:8000/GPIO/27/value/0


というわけでRubyでいじってみた例です。

require "net/http"

def set_pin_out
  req = Net::HTTP::Post.new("/GPIO/27/function/out")
  set_req(req)
end

def pin_on
  req = Net::HTTP::Post.new("/GPIO/27/value/1")
  set_req(req)
end

def pin_off
  req = Net::HTTP::Post.new("/GPIO/27/value/0")
  set_req(req)
end

def set_req(req)
  req.basic_auth "webiopi","raspberry"
  Net::HTTP.start("raspberrypi.local", 8000) {|http|
    response = http.request(req, "")
    raise "NG" unless response.code == '200'
  }
end

set_pin_out
10.times do
  pin_on
  sleep 0.5
  pin_off
  sleep 0.5
end


RubyでGPIOを直接いじる場合はroot権限がないとダメでしたが、この場合はrootでなくてもGPIOが利用できます。
また別のマシンからもたたくことができるのも便利そうな気がします。

コメントを投稿