share facebook facebook2 twitter menu hatena pocket slack

2015.01.07 WED

RaspberryPi – WebIOPi でブラウザから LED チカチカ

川原 洋平

WRITTEN BY川原 洋平

ども、cloudpackかっぱ (@inokara) です。

引き続き…

冬休みの自由研究です。
試したレベルですいません…あと、LED の点灯と消灯写真は過去記事の使い回しですがちゃんと点灯、消灯は確認しておりますのでご了承ください。

参考

ブラウザから LED をチカチカ出来る

WebIOPi を試してみました。

試してみましたレベルでは語れないくらい多くの機能があるようです。

Web サーバーは Python で実装されていてブラウザからのコントロールは JavaScript で REST API を叩いているようです。→ということは、いろんなプログラムから操作することが出来そうです(とりあえず後ほど)

セットアップ

以下のような結線構成の Raspberry Pi にて実行しています。
Raspberrypi - WebIOPi でブラウザから LED チカチカ: 構成図

cd /usr/local/src
# WebIOPi を取得
sudo wget "http://downloads.sourceforge.net/project/webiopi/WebIOPi-0.7.0.tar.gz?r=http%3A%2F%2Fsourceforge.net%2Fprojects%2Fwebiopi%2Ffiles%2F&ts=1420016851&use_mirror=cznic"
# 一旦、リネーム
sudo mv WebIOPi-0.7.0.tar.gz?r=http:%2F%2Fsourceforge.net%2Fprojects%2Fwebiopi%2Ffiles%2F&ts=1420016851&use_mirror=cznic WebIOPi-0.7.0.tar.gz
# 展開
tar zxvf WebIOPi-0.7.0.tar.gz
cd WebIOPi-0.7.0
# インストール
sudo ./setup.sh

起動

sudo /etc/init.d/webiopi start

初めてのアクセス

ブラウザで Raspberry Pi アドレスのポート 8000 番にアクセスします。
Raspberrypi - WebIOPi でブラウザから LED チカチカ: ブラウザから動作確認

認証が掛かっており、初期の認証情報は以下のとおりです。

  • ユーザー名:webiopi
  • パスワード:raspberry

GPIO Header

GPIO Header をクリックすると以下のように物理的なピンの配置と共に GPIO ピンの状態が表示されます。
Raspberrypi - WebIOPi でブラウザから LED チカチカ: デフォルトのピン配置

INOUT は GPIO の入出力を表しており、ピンの番号の黒色は LOW で黄色が High を表しています。
Raspberrypi - WebIOPi でブラウザから LED チカチカ: ピン配置(動作後)

既に GPIO 25 ポートに LED が結線済みなので、入出力が OUT の状態でピン 22 番(GPIO 25)をクリックして黄色に変えると LED が点灯します。
Raspberrypi - WebIOPi でブラウザから LED チカチカ: 実機で動作確認 (22番のLEDが点灯)

GPIO List

GPIO List をクリックすると以下のように GPIO リストが表示されます。
Raspberrypi - WebIOPi でブラウザから LED チカチカ: GPIO List

GPIO Header が物理的なピンの配置を基準に GPIO の配線を表していたのに対して、GPIO List は GPIO の順番に物理的なピンが昇順に並んでいますが、今のところ(自分が使っているレベルでは…)GPIO Header とやれることは変わらない印象です。

その他…

Serial Monitor と Devices Monitor については今回は触れません。(現在の構成では特に情報が表示されていないので…)
すいません。

ところで…

REST API でチカチカ

API のエンドポイントについては、「参考」の webiopi/RESTAPI を御覧ください。

コマンドラインから

WebIOPi が動いているホストに対して以下のようにリクエストを送ることで LED を点灯してみたいと思います。

curl -u webiopi:raspberry -X POST localhost:8000/GPIO/25/value/1

Raspberrypi - WebIOPi でブラウザから LED チカチカ: 実機で確認 (コマンドラインから点灯)

消灯する場合には以下のようにリクエストを送ります。

curl -u webiopi:raspberry -X POST localhost:8000/GPIO/25/value/0

Raspberrypi - WebIOPi でブラウザから LED チカチカ: 実機で確認 (コマンドラインから消灯)

例えば Ruby から

「参考」の コチョナナバ: Raspberry PiのGPIOをブラウザからいじれるWebIOPiを試してみた を参考にして引数で LED の ON とか出来るようにしてみたのが以下です。

#!/usr/bin/env ruby

require 'net/http'

def on
  request = Net::HTTP::Post.new("/GPIO/25/value/1")
  puts "LED ON"
  gpio(request)
end

def off
  request = Net::HTTP::Post.new("/GPIO/25/value/0")
  puts "LED OFF"
  gpio(request)
end

def blink
  10.times do
    on
    sleep 0.5
    off
    sleep 0.5
  end
end

def gpio(request)
  request.basic_auth 'webiopi', 'raspberry'
  res = Net::HTTP.start("localhost", 8000) {|http|
    http.request(request)
  }
end

case ARGV[0]
when /on/i
  on
when /off/i
  off
when /blink/i
  blink
else
  puts "bad argument"
end

引数に onoff と blink を渡せば LED がついたり、消えたり点滅したり面白いです。また、Ruby 以外の言語で REST API 経由で操作することが可能となるのでローカルホストだけではなく頑張れば外出先等からでも LED を操作出来そうですな。

ついでに fluentd で…

例えば {"switch":"on"} を fluentd に送りつけたら LED を点灯させて、{"switch":"off"} を送りつけたら LED が消灯するようなことも出来てしまいます。(Raspberry Pi に fluentd がインストールされていることがそもそもの前提です。)

以下のように fluent-plugin-out-httpfluent-plugin-rewrite-tag-filter をインストールしましょう。

sudo fluent-gem install fluent-plugin-out-http --no-ri --no-rdoc -V
sudo fluent-gem install fluent-plugin-rewrite-tag-filter --no-ri --no-rdoc -V

もっと効率の良い方法があるかもしれませんが、以下のように fluentd の設定を書きます。

<match led>
  type rewrite_tag_filter
  #rewriteruleN <key> <pattern> <new_tag>
  rewriterule1 switch ^on$ led.on
  rewriterule2 switch ^off$ led.off
</match>

<match led.on>
   type http
   endpoint_url    http://localhost:8000/GPIO/25/value/1
   authentication  basic
   username        webiopi
   password        raspberry
</match>

<match led.off>
   type http
   endpoint_url    http://localhost:8000/GPIO/25/value/0
   authentication  basic
   username        webiopi
   password        raspberry
</match>

これで、後は fluentd を再起動するだけで完了です。

echo '{"switch":"on"}' | fluent-cat led

で点灯です。
Raspberrypi - WebIOPi でブラウザから LED チカチカ: 実機で確認 (fluentdで点灯)

echo '{"switch":"off"}' | fluent-cat led

で消灯です。
Raspberrypi - WebIOPi でブラウザから LED チカチカ: 実機で確認 (fluentdで消灯)

実用云々は置いといて WebIOPi で LED を操作するインターフェースが汎用的な HTTP が提供されているおかけですな。

ということで…

2014 年から 2015 年をまたにかけて WebIOPi を触ってみました。当初は単なる Web インターフェースだと思っていましたが、REST API を備えているので色々な言語から環境を問わず LED をチカチカすることが出来そうです。

元記事はこちらです。
RaspberryPi – WebIOPi でブラウザから LED チカチカ