ものづくりブログ

ゼロからスタートして何かを作って世に出すまでのことを書くブログです.

WebIOPiを使ってスマホでRaspberry Piを制御する(実行編)

 

こんにちは.

 

前回WebIOPiのインストールと初期設定が整いました.今回はいよいよそれを使ってブラウザからアクセスしてみようと思います.

 

ラズパイの電源を入れる前に,PIRセンサを使用した時と同じく,下記のように回路を作成します.

 

f:id:daisukekmr:20150128003525p:plain

 

f:id:daisukekmr:20150128003609p:plain

 

接続が完了したら電源を入れましょう.前回の記事自動起動するように設定していれば,WebIOPiが起動しているはずなので,もうブラウザからアクセスできるはずです.アクセスできなければdefaultに設定できていない可能性があるので,もう一度下記のコマンドで起動しましょう.

 

sudo /etc/init.d/webiopi start

 

さて,前回の記事を参考にブラウザでアクセスしてから,下記の画面まで進みましょう.

 

f:id:daisukekmr:20150204232917j:plain

 

画面両端のIN/OUTはそれぞれのポートのモードが入力になっているか出力になっているかを表します.これをクリックするとINとOUTを切り替えることが可能です.

 

また,OUTのポートの番号をクリックすると,出力の1と0を切り替えることが可能です.色がついていると1,ついていないと0を意味します.

 

LEDが接続されているGPIO 4の左をクリックしてOUTに設定し,番号をクリックしてみましょう.画面上では番号に色がつくと思います.そしてLEDが光ったら成功です.

 

次に入力です.センサが接続されているGPIO 25の右をクリックしてINに設定し,センサを反応させてみましょう.画面上でセンサを接続しているPINの番号に色がついたら成功です.

 

ここまでは単に用意された専用の画面でGPIOの制御ができるというだけのお話でした.これでも使い道は若干増えるのですが,イマイチ汎用性に欠けます.そこで、WebIOPiには汎用的に使用できるAPIが用意されています.

 

APIとは,アプリケーションを他のアプリケーションと連携させるための機能のようなものです.例えば以前の記事でラズパイからTwitterへつぶやくというのをやりましたが,あれはTwitterAPIを利用してつぶやいています.あの時はTwitterとラズパイ(のシェルスクリプト)を連携させたわけですね.

 

さて,以下にWebIOPiで用意されているAPIの代表的な機能を羅列します[3].使い方はその後でご説明します.

 

 

 

GPIOのモード(入力 or 出力)を取得

HTTP GET /GPIO/(gpioNumber)/function

Returns "in" or "out"

 

GPIOのモード(入力 or 出力)を設定

HTTP POST /GPIO/(gpioNumber)/function/("in" or "out" or "pwm")

Returns new setup : "in" or "out" or "pwm"

 

GPIOの値を取得

HTTP GET /GPIO/(gpioNumber)/value

Returns 0 or 1

 

GPIOの値を設定

HTTP POST /GPIO/(gpioNumber)/value/(0 or 1)

Returns new value : 0 or 1

 

 

 

上記の他にもいくつか機能がありますが,これまでこのブログで触れたものは以上の4通りくらいです.もし詳細に知りたい場合は参考文献の[3]をご参照ください.

 

WebIOPiのAPIREST APIといって,HTTP通信によって特定のURI(URLみたいなもの)にアクセスすることで使用するものです.

 

このURIにあたるのが上記の各機能の下に書かれているHTTP GETやHTTP POSTに続く文字列です.

 

GETやPOSTというのはそのURIへの接続方法を表しています.他にPUTとDELETEという方法がありますが,ここでは使用しません.

 

そもそもHTTP通信って?というのはちょっと長くなるので別で記事を書こうと思います.

 

 

 

さて,では具体的にどのように使うかという話に移ります.指定されたURIに指定された方法(GETやPOST)でアクセスすることでWebIOPiのREST APIを使用します.ではどうやってGETやPOSTリクエストをするの?と言うと,ためしに以下のURIMacのブラウザのURLを入れる欄に入力してEnterを押してみてください.なお,そのMacがラズパイと同じルータに接続されていることが必要です.

 

http://raspberrypi.local:8000/GPIO/25/function

Bonjourを使用しているのでIPを使わずraspberrypi.localを使用しています

 

IPでアクセスする場合は私の使っているIPが192.168.11.21なので,以下のようになります.

 

http://192.168.11.21:8000/GPIO/25/function

 

ブラウザに以下のように表示されたら成功です.

 

IN

 

つまり,ブラウザのURL入力欄からアクセスするというのは,指定したURIにGETリクエストを送信しているのと同義ということです.上記にもある通り返ってくる値がinかoutかpwmで,今回は入力モードだったのでinと返ってきました.ブラウザはその返ってきた値を表示してくれるわけです.

 

では次にPOSTリクエストを送ってみたいのですが,これには少しだけ準備が必要です.Cheromeブラウザの場合のやり方を以下に示します.Firefoxsafariの場合もGoogleで検索すると色々と出てきました.

 

1. 以下のURLからChromeにPostmanという拡張をインストールします.

 

Postman - REST Client - Chrome Web Store

 

 

2. Postmanを起動します.

 

f:id:daisukekmr:20150204234115p:plain

 

 

3. 画面上部のEnter request URL hereという箇所に下記のURL(URI)を入力し,今回はPOSTを選択し,sendをクリックします.

 

http://raspberrypi.local:8000/GPIO/4/value/1

 

4. 以下の画面のように「1」と値が返ってきたら成功です.

 

f:id:daisukekmr:20150204234528p:plain

 

 

 

これを使って色々と遊んでみましょう.このリクエストはプログラムからも送ることが出来るので,例えばスマホアプリや,WEBアプリから制御したり値を取得したりといったことが可能になります.

 

 

 

参考文献

[1]Raspberry Piで遊ぼう! 改訂第3版 〜 モデルB+完全対応

[2]ITトレンド「APIとは」(http://it-trend.jp/words/api)

[3]webiopi「REST API」(https://code.google.com/p/webiopi/wiki/RESTAPI)