ども、cloudpack の かっぱ (@inokara) です。
引き続き…
冬休みの自由研究です。
試したレベルですいません…あと、LED の点灯と消灯写真は過去記事の使い回しですがちゃんと点灯、消灯は確認しておりますのでご了承ください。
参考
ブラウザから LED をチカチカ出来る
WebIOPi を試してみました。
試してみましたレベルでは語れないくらい多くの機能があるようです。
Web サーバーは Python で実装されていてブラウザからのコントロールは JavaScript で REST API を叩いているようです。→ということは、いろんなプログラムから操作することが出来そうです(とりあえず後ほど)
セットアップ
以下のような結線構成の Raspberry Pi にて実行しています。
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 番にアクセスします。
認証が掛かっており、初期の認証情報は以下のとおりです。
- ユーザー名:webiopi
- パスワード:raspberry
GPIO Header
GPIO Header をクリックすると以下のように物理的なピンの配置と共に GPIO ピンの状態が表示されます。
IN
と OUT
は GPIO の入出力を表しており、ピンの番号の黒色は LOW
で黄色が High
を表しています。
既に GPIO 25 ポートに LED が結線済みなので、入出力が OUT
の状態でピン 22 番(GPIO 25)をクリックして黄色に変えると LED が点灯します。
GPIO List
GPIO List をクリックすると以下のように GPIO リストが表示されます。
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
消灯する場合には以下のようにリクエストを送ります。
curl -u webiopi:raspberry -X POST localhost:8000/GPIO/25/value/0
例えば 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
引数に on
と off
と blink を渡せば LED がついたり、消えたり点滅したり面白いです。また、Ruby 以外の言語で REST API 経由で操作することが可能となるのでローカルホストだけではなく頑張れば外出先等からでも LED を操作出来そうですな。
ついでに fluentd で…
例えば {"switch":"on"}
を fluentd に送りつけたら LED を点灯させて、{"switch":"off"}
を送りつけたら LED が消灯するようなことも出来てしまいます。(Raspberry Pi に fluentd がインストールされていることがそもそもの前提です。)
以下のように fluent-plugin-out-http と fluent-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 の設定を書きます。
type rewrite_tag_filter #rewriteruleN rewriterule1 switch ^on$ led.on rewriterule2 switch ^off$ led.off type http endpoint_url http://localhost:8000/GPIO/25/value/1 authentication basic username webiopi password raspberry type http endpoint_url http://localhost:8000/GPIO/25/value/0 authentication basic username webiopi password raspberry
これで、後は fluentd を再起動するだけで完了です。
echo '{"switch":"on"}' | fluent-cat led
echo '{"switch":"off"}' | fluent-cat led
実用云々は置いといて WebIOPi で LED を操作するインターフェースが汎用的な HTTP が提供されているおかけですな。
ということで…
2014 年から 2015 年をまたにかけて WebIOPi を触ってみました。当初は単なる Web インターフェースだと思っていましたが、REST API を備えているので色々な言語から環境を問わず LED をチカチカすることが出来そうです。
元記事はこちらです。
「RaspberryPi – WebIOPi でブラウザから LED チカチカ」