WebIOPi で遠隔操作(インストール編)




前回のライブカメラ(監視カメラ)化では、首振り出来る所まで実現できた。

ただ、これを手元でやらないといけない、となると監視カメラの意味はない。

やはり、遠隔から操作できるようにする必要がある。

これを実現しようと、これまでは Node.js での実現を考えていた。

が、なかなか情報が少なく、結構苦戦。

他の実現方法は無いものか、と調べた所、WebIOPi が良さげだと気づく。

ということで、WebIOPi を利用した遠隔操作の実現にトライしていく。

参考にさせていただいたのは、以下の二つの記事。

IT女子のラズベリーパイ入門奮闘記
第30回「WebIOPiでIoT!(1)導入&Lチカ編〜ブラウザからGPIOを操作しよう」
http://deviceplus.jp/hobby/raspberrypi_entry_030/

たぷん日記
Raspberry Pi |【失敗→できた!】スマホからGPIOを制御してみたい!(WebIOPi)
http://www.tapun.net/raspi/raspberry-pi-webiopi-guide-failed

結論からいうと、raspberry pi 2 以上の Model B で実現する場合、

たぷん日記さんの方に記載内容そのままでできる。

IT女子さんの方のやり方では、26 pin のままになってしまう。

ただ、WebIOPi ってなに?とか言う所は非常に分かり安いため、参考としてあげておく。

[2017/11/19 追記]
が、たぷん日記さんの方でやって見たところ、

・Raspbian Jessie のままにしてある二号機では、一旦動いた
・Raspbian Stretch に Update した三号機では、諸々トラブル発生
・二号機を Raspbian Stretch にあげると、やっぱり動かない

という状態になった。

よって、起こったトラブルとその解決法を追記する。



  1. WebIOPi とは?
  2. インストール方法
  3. 利用方法
  4. Raspbian Stretch で起こった問題
  5. 別のインストール方法
  6. まとめ

■WebIOPi とは?

WebIOPi は、ブラウザから raspberry pi の GPIO を操作できるようにするもの。

The Raspberry Pi Internet of Things Toolkit – Now in two flavors
http://webiopi.trouch.com/

ブラウザ経由で raspberry pi にアクセスし、各 GPIO の ON/OFF を操作できる。

使い方によっては、Internet からのアクセスも可能にできる模様。

ラズパイを監視カメラにする場合、やはり遠隔からの操作ができないと意味が無い。

また、今後ラジコン戦車にしていくに当たっても、やはりスマホ等からの操作が必要。

そうすると、別途 Android アプリや iOS アプリを作らないといけなくなる。

なので、Web ブラウザから簡単に操作できないものか、と考えていた。

当初は前述の通り、Node.js での実現を考えていたが、情報量が少なく苦戦。

で、他の実現方法を探っていた所、WebIOPi に行き着いた。

実はまだ、何をどう使えるのか、をちゃんと理解出来ていない。

が、まずはインストールしてちょっと動かせてみたので、備忘録的に記録しておく。



■インストール方法

まずは WebIOPi をダウンロードしてくる。

WebIOPi のダウンロードサイト
http://webiopi.trouch.com/DOWNLOADS.html

にアクセスし、

WebIOPi-0.7.1.tar.gz

をダウンロードする。

以下の通り、wget で取得してもよい。

root@raspi-03# wget http://sourceforge.net/projects/webiopi/files/WebIOPi-0.7.1.tar.gz/download

続いて、取得した file を展開する。

ブラウザから tar.gz ファイルを取得した場合は、

root@raspi-03# tar zxvf WebIOPi-0.7.1.tar.gz

で tar.gz ファイルを展開する。

wget で download というファイルを取得した場合は、

root@raspi-03# tar zxvf download

で展開できる。

展開すると、WebIOPi-0.7.1 というディレクトリが作成されるため、そこに移動。

root@raspi-03# cd ./WebIOPi-0.7.1/

このまま setup.sh を実行してもよい。

が、その場合、raspberry pi 2 以降の Model B には対応できない。

よって、これに対応出来るようにするための修正を加える。

まずは WebIOPi-0.7.1/python/native/cpuinfo.c を変更する。

元のままだと、CPU が BCM2708 なので、これを BCM2709 に変更する。

具体的には、vi やその他エディタなどで、

WebIOPi-0.7.1/python/native/cpuinfo.c

を開き、40 行目にある

if (strcmp(hardware, "BCM2708") == 0)

if (strcmp(hardware, "BCM2709") == 0)

へと変更する。

次に、GPIO のベースアドレス部分を修正する。

こちらもエディタ等で

./WebIOPi-0.7.1/python/native/gpio.c

を開き、32 行目にある

#define BCM2708_PERI_BASE   0x20000000

#define BCM2708_PERI_BASE   0x3F000000

へと変更する。

さらに、GPIO Header も 26 pin 対応から 40 pin 対応とすべく、

./WebIOPi-0.7.1/python/webiopi/utils/version.py

を開き、11 行目にある

_MAPPING[2] = ["V33", "V50", 2, "V50", 3, "GND", 4, 14, "GND", 15, 17, 18, 27, "GND", 22, 23, "V33", 24, 10, "GND", 9, 25, 11, 8, "GND", 7]

_MAPPING[2] = ["V33", "V50", 2, "V50", 3, "GND", 4, 14, "GND", 15, 17, 18, 27, "GND", 22, 23, "V33", 24, 10, "GND", 9, 25, 11, 8, "GND", 7, 0, 1, 5, "GND", 6, 12, 13, "GND", 19, 16, 26, 20, "GND", 21]

へと変更する。

みてもらえれば分かるが、変更前の “GND”, 7 以降に、

, 0, 1, 5, "GND", 6, 12, 13, "GND", 19, 16, 26, 20, "GND", 21]

を追加すればよい。

次は ./WebIOPi-0.7.1/htdocs/webiopi.js。

76 行目を

this.PINS = Array(26);

から

this.PINS = Array(41);

に、580 行目を

for (var pin=1; pin<=26; pin++) {

から

for (var pin=1; pin<=40; pin++) {

に変更する。

これらの修正が完了したら、いよいよインストール。

root@raspi-03:~/WebIOPi-0.7.1# ./setup.sh

を実行する。なお、setup.sh の実行は root 権限が必要。

必要に応じて sudo を先頭につけて実行して頂きたい。

これを実行すると、途中で

Do you want to access WebIOPi over Internet? [y/n]

と聞かれる。

インターネット越しのアクセスができるようだが、ひとまず n でスキップする。

すると、無事インストールが完了する。

完了すれば、一旦 raspberry pi を再起動。

再起動後、以下のコマンドで手動起動させる。

root@raspi-03# /etc/init.d/webiopi start

なお、こちらも root 権限が必要なので、root 以外で作業するときには sudo が先頭に必要。

ちなみに手動停止は

root@raspi-03# /etc/init.d/webiopi stop

でよい。

なお、raspberry pi 起動時に自動起動させる場合には、

root@raspi-03# update-rc.d webiopi defaults

を一度実行しておけばよい。

自動起動解除は

root@raspi-03# update-rc.d webiopi remove

で可。

これで一応インストールは完了となる。



■利用方法

実際に利用する際には、自動、または手動で WebIOPi を起動した後、

ブラウザで URL 部分に

http://<IP address>:8000

を入力、実行する。

この際、以下の通りログインが要求される。

ログイン ID とパスワードは各々以下の通り。

ログイン ID : webiopi
パスワード : raspberry

無事ログイン出来れば、以下のような画面が現れる。

ここで、GPIO Header をクリックすると、次のような画面になる。

この画面上で、IN を OUT にし、PIN をクリックすると、該当 PIN に High が出力される模様。

参考サイトなどでは、L チカできた!との記載あり。

ただ、私の環境では、LED もブレッドボードも抵抗もないため、確認できない。

サーボを動かすには、もうちょっと工夫が必要の模様。

これについては以降記載していきたいと思う。

なお、今回、実は三号機においては、

ログインまではできるが、ブラウザ上に何も表示されない

という症状が発生した。

なにが起こっているのか?と思い、

root@raspi-03# webiopi -d

でデバッグ情報を表示させてみた所、色々ログが出た後に、

OSError: [Errno 98] Address already in use

と出ていた。

三号機はセキュリティ検査デバイスとして色々インストール済み。

その中で、apache も入れたし、OpenVAS も導入済み。

ということで、どうも Web サーバー系同士でぶつかってるっぽい。

解決策は今のところまだ分からない。

ただ、二号機にインストールしたら、結構素直に入ってくれた。

やり方自体は間違っていないようなので、とりあえず記録しておく。



■Raspbian Stretch で起こった問題

やり方自体は間違って無かったようなのだが、

・三号機(Raspberry Pi 3 Model B, Raspbian Stretch)

ではうまく起動してくれなかった。

その原因と解消法が一部判明し、三号機でも動かせるようになったため、追記する。

まず、

OSError: [Errno 98] Address already in use

が発生してブラウザの画面が真っ白になる問題について。

これは実は単純ミスで、既に

root@raspi-03# update-rc.d webiopi defaults

の設定を行って自動起動させていたにも関わらず、

root@raspi-03# webiopi -d

として再度起動させていたため、アドレスがぶつかっていた模様。

root@raspi-03# /etc/init.d/webiopi stop

で一旦自動起動したプロセスを止めた後、

root@raspi-03# webiopi -d

でデバッグモードで起動すると、上述のエラーは出なくなった。

が、症状としてはまったく変わらず。

ブラウザ画面は相変わらず白いまま。

ということで今一度エラーをみてみると、今度は

NameError: name 'GPIO' is not defined

とのこと。

どうも python の ver. 違いとか、RPi.GPIO の扱いとかで問題が発生している模様。

色々調べてみると、結局、

・python コード上では import GPIO となっている
・が、GPIO というのは定義されていない
・過去の ver では RPi.GPIO を使っていた
・なので import RPi.GPIO as GPIO としてあげれば動くはず

ということの模様。

とはいえ、どの python コードを直せばよいのか、が分からず停滞していた。

しかしながら、色々調べるのを継続した結果、

カラー図解
最新 Raspberry Pi で学ぶ電子工作
補足情報
http://raspibb1.blogspot.jp/2016/07/blog-post_19.html

のページに記載の方法である、

1. 一旦インストールした WebIOPi を削除する
2. WebIOPi を再度展開する
3. Raspberry Pi 2, 3 向けパッチを入手する
4. パッチを適用する
5. 再度インストールする
6. 起動用ファイルを適切な位置に配置する

という作業をやり直してみた結果、三号機でもうまく動いてくれた。

この作業について、以降記載する。



■別のインストール方法

三号機では既に WebIOPi をインストール済み。

さらに手動で Raspberry Pi 3 対応を実施している。

よってまずは一旦設定したファイル群を消す。

root@raspi-03# rm -rf WebIOPi-0.7.1

次に、既にダウンロード済みの WebIOPi-0.7.1.tar.gz を再展開する。

root@raspi-03# tar zxvf WebIOPi-0.7.1.tar.gz

その後、展開すると出来る、WebIOPi-0.7.1 に移動。

root@raspi-03# cd ./WebIOPi-0.7.1/

ここからが上述の記載とは異なる部分。

上述のインストール部分では、手動でパッチを当てていた。

が、今回は既に公開されているパッチを取得して当てる。

以下のコマンドにより、パッチを取得。

root@raspi-03:~/WebIOPi-0.7.1# wget https://raw.githubusercontent.com/neuralassembly/raspi2/master/webiopi-pi2bplus.patch

続いて以下の通りパッチを当てる。

root@raspi-03:~/WebIOPi-0.7.1# patch -p1 -i webiopi-pi2bplus.patch

実はこのパッチ、以前も当てたことがあった。

が、当てる手順が悪かったのか、色々いじったのが悪かったのか、前回は無意味だった。

一方今回は上述の手順どおりに当てるとちゃんと動いてくれた。

なので一度失敗した人もこの手順どおりに再チャレンジしてみるとよいかもしれない。

パッチが当たれば、再インストール。

root@raspi-03:~/WebIOPi-0.7.1# ./setup.sh

当然 root 権限が必要なので、必要ならば sudo を頭につけて頂きたい。

インストールが進むと、既に述べた通り、

Do you want to access WebIOPi over Internet? [y/n]

と聞かれる。

今後遠隔操作を実現する際に、y にして試してみたいが、今回は n を選択。

そうするとすぐにインストールが終わる。

そして、こっからさらに作業。

起動用ファイルを適切な位置に置く必要があるとのことで、

root@raspi-03:~/# wget https://raw.githubusercontent.com/neuralassembly/raspi/master/webiopi.service
root@raspi-03:~/# mv webiopi.service /etc/systemd/system/

を実行。

これで

root@raspi-03# webiopi -d

で起動すると、見事エラー無く 40pin 状態で画面が表示出来た!

ちなみに、手動実行の方法は変わらないが、自動起動設定は

root@raspi-03# systemctl enable webiopi

に、自動起動解除は

root@raspi-03# systemctl disable webiopi

に、各々変更されている模様。

一応これも追記しておく。

ふぃー。ハマってから長かったー。



■まとめ

前回までで、最低限の監視カメラ(ライブカメラ)化は実現できていた。

が、やっぱり遠隔操作ができないと、その意味が薄れてしまう。

ということで紆余曲折を経て、今回 WebIOPi のインストールを実施。

これをちゃんと使いこなせるようになれば、ラジコン化にも使えるはず。

ただ、まだサーボモータを動かすまでには至っていない。

よって今後は、

・WebIOPi でサーボモータを制御する
・Internet 越しの操作を実現する

と言う所に挑戦していこうと思う。

まだまだ道のりは長いが、着実に進めていこう。

[2017/11/19 追記]
一旦うまく行ったが故に、

・次は WebIOPi でサーボ制御だ!

と考えていたが、まさかまさかの手痛い停滞。

動かなくなる、なんてトラブルが起こるとは。

ということで、かなり長い間苦しんだが、ようやく解決。

以前から買おうかと迷っていた、以下の本の追記情報に助けられた。

改めて素晴らしい本なんだろうな、と思う。

なんせ、書籍に記載の内容に更新があったら、Web 上でちゃんと追記してくれる。

なんと読者思いの本なのか!

この本があれば、きっと記載通りで色々できると思う。

が、まだもうちょっと自力で頑張りたい。

今回みたいな苦労をしながらの方が、自分の身になるとも思うので。

とはいえ、一通りやりたいことを達成した暁には、お礼を兼ねて購入したい。

また、

・本サイトでやりたいといっていることを、
・本サイトより早くやりたい方には、

本書の購入を強くおすすめする。

[2017/12/10 追記]
ようやくサーボモータの制御もブラウザからできるようになった。

具体的方法はこちら。

WebIOPi で遠隔操作(サーボモータ制御編)!

あと、その結果として、最終的にブラウザからのカメラ操作も

ブラウザから操作できるライブカメラ(監視カメラ)を作る!

で実現できたことを追記しておく。





Copyright (c) 2017 Webmaster of this site All Rights Reserved.
カテゴリー: ラズパイで電子工作 タグ: , パーマリンク

コメントを残す

メールアドレスが公開されることはありません。

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください