こんにちは。武田です。

やりたい事

前回の作業でRaspberry pi 2のサーバ化までには持ってこれました。
今度はロボピッチャに連携させないとですね。
ウェブサイトでボタンを押すとロボピッチャが動作する形にしたい!

今回の機材
20160125_135149

Raspberry pi 2とロボピッチャの連携

参考: DCモータを動かす(モータドライバ使用)(WebIOPi利用)
こちらのページを元にやってみましょう。
部品や接続表、例など細かーく書いてあるので大変にありがたいです。

Raspberry Pi 2側

20160121_160734 - コピー - コピー - コピー

参考元はRaspberry pi 1、こちらは2とバージョンが違うためピンの数が全然違いますね。。。
とりあえずググってみます。
Raspberry Pi 2 Model B GPIO 40 Pin Block Pinout
接続表を見てみましたがよくわからない。。。
ただ、基本的には後ろの方が追加されただけのようなので若番から同じように接続してみます。

ブレッドボード側

接続表にしたがって。。。
20160125_172526
とりあえずは電源、モーター含めて全体を繋いだぞ!

接続後の起動

すげー不安だけども同僚に見守られつつ起動!
とりあえずは焦げ臭い匂いとか異音とかはない模様。
これでRaspberry pi が壊れたらこの企画、終了ですよ。

WebIOPiのインストール

WebIOPiはリモートでRaspberry pi を操作するためのフレームワークです。
これを利用してウェブからのロボピッチャをキックします!
参考:ブラウザから、ラズベリーパイのGPIOを操作できる「WebIOPi」を試してみた!

# DL
wget http://sourceforge.net/projects/webiopi/files/WebIOPi-0.7.1.tar.gz/download
# 展開
tar xvzf download
# インストール
cd WebIOPi-0.7.1/
sudo ./setup.sh

ブラウザから「GPIO」を操作してみよう!

webiopiを起動
sudo webiopi
2016-01-25 18:01:18 - WebIOPi - INFO - Starting WebIOPi/0.7.1/Python3.4
2016-01-25 18:01:18 - WebIOPi - INFO - GPIO - Native mapped to REST API /GPIO
2016-01-25 18:01:18 - WebIOPi - WARNING - Access unprotected
2016-01-25 18:01:18 - WebIOPi - INFO - HTTP Server binded on http://192.168.0.147:8000/
2016-01-25 18:01:18 - WebIOPi - INFO - CoAP Server binded on coap://192.168.0.147:5683/
2016-01-25 18:01:18 - WebIOPi - INFO - CoAP Server binded on coap://224.0.1.123:5683/ (MULTICAST)

特にエラー表示とかは出ないですね。。。
webapiの管理画面的なものがあるのでそこへアクセスしてみます。

http://IPアドレス:8000
id: webiopi
pw: raspberry

おっなんとなくWebIOPiの画面まではできてきましたね。
web_opi_menu_2
[GPIO 24]をonにしてみましょう。
あら。ここまできたらコンソールの方にエラーが。。。

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/usr/lib/python3.4/socketserver.py", line 305, in _handle_request_noblock
    self.process_request(request, client_address)
  File "/usr/lib/python3.4/socketserver.py", line 331, in process_request
    self.finish_request(request, client_address)
  File "/usr/lib/python3.4/socketserver.py", line 344, in finish_request
    self.RequestHandlerClass(request, client_address, self)
  File "/usr/lib/python3.4/socketserver.py", line 669, in __init__
    self.handle()
  File "/usr/lib/python3.4/http/server.py", line 398, in handle
    self.handle_one_request()
  File "/usr/lib/python3.4/http/server.py", line 386, in handle_one_request
    method()
  File "/usr/local/lib/python3.4/dist-packages/WebIOPi-0.7.1-py3.4-linux-armv7l.egg/webiopi/protocols/http.py", line 267, in do_GET
    self.processRequest()
  File "/usr/local/lib/python3.4/dist-packages/WebIOPi-0.7.1-py3.4-linux-armv7l.egg/webiopi/protocols/http.py", line 258, in processRequest
    except (GPIO.InvalidDirectionException, GPIO.InvalidChannelException, GPIO.SetupException) as e:
NameError: name 'GPIO' is not defined

調べて見た所、このRaspberry piのバージョンには対応していないみたいですね。
パッチがあるようなので一旦先ほどのやつは削除して、上書きインストールを実施
参考:Global name GPIO is not defined errors on WebIOPi

# パッチ適応+インストール
 cd /home/pi
 sudo wget http://sourceforge.net/projects/webiopi/files/WebIOPi-0.7.1.tar.gz
 sudo tar xvzf WebIOPi-0.7.1.tar.gz
 cd WebIOPi-0.7.1
 sudo wget https://raw.githubusercontent.com/doublebind/raspi/master/webiopi-pi2bplus.patch
 patch -p1 -i webiopi-pi2bplus.patch
 sudo ./setup.sh
 Then go on with these codes:
 cd /home/pi
 sudo wget https://github.com/weaved/installer/raw/master/binaries/weaved-nixinstaller_1.2.13.bin
 sudo chmod +x weaved-nixinstaller_1.2.13.bin
 sudo ./weaved-nixinstaller_1.2.13.bin

webiopi管理画面より[GPIO 24]を起動したらモーターが動く!

ウェブサイトとの連携

ブラウザでボタンが押されたらWebIOPiへ命令を送りたいですね。
以下の様な形でコマンドでも操作が可能みたいです。

起動
curl -u webiopi:raspberry -X POST localhost:8000/GPIO/23/value/1
停止
curl -u webiopi:raspberry -X POST localhost:8000/GPIO/23/value/0

その他

ブート時に自動起動するようにセットする。
$ sudo update-rc.d webiopi defaults

ID/PWは初期値だと怖いので変更
$ sudo webiopi-passwd

これでなんとか材料が揃ったみたいですね。
起動させるページも作ったので動かしましょう!
ロボピッチャ起動

ボタンを押すとロボピッチャが動いていますね!
ここまでほんとうに長かった。。。

次回

ちょっとこれだと見ている閲覧者の方が動いてる様を見させられないのでそこら辺を解決したいですね。
ロボピッチャを移したウェブカメラおいてリアルタイム配信でもしようかしら。
Raspberry pi のサーバーで完結できればスマートなのだけど。