一進一退 – WebIOPi によるサーボモータ制御 –


■一進一退 – WebIOPi によるサーボモータ制御 –

WebIOPi でサーボモータを制御する話。

WebIOPi のインストールに関して、

・Raspbian Jessie なら動く
・Raspbian Stretch になると動かない

という問題点に関しては、前回

・パッチを当てることで解決できる

ということが確認できた。

おかげで、Stretch にした三号機でも、無事に動いている。

ということで、いよいよ WebIOPi でサーボモータ制御に取りかかった。

参考にさせていただいたのは、このサイト。

MUDAなことをしよう。
Raspberry Piでサーボモータを制御
http://make-muda.weblike.jp/2015/11/3317/

いくつか推測が必要な部分もあったが、

基本的には記述に沿ってやれば動いた。

感謝・感激である。

とはいえ、ご本人が記載されている通り、動きは不十分。

ちょこ、ちょこ、って感じでは動くが、希望どおりの動きではない。

ということで、続編である、

MUDAなことをしよう。
Raspberry Piでブラウザからサーボモータをちゃんと制御する
http://make-muda.weblike.jp/2015/11/3343/

をトレースしてみることにした。

ここで大はまり。

まず最初のトラブルは、高精度の PWM 信号を生成するための

WiringPi

の起動部分。

インストールや各種 js のダウンロード、html ファイルの設定等を終え、

いざ起動してみると、

ImportError: /usr/local/lib/python3.5/dist-packages/wiringpi2-1.1.1-py3.5-linux-armv7l.egg/_wiringpi2.cpython-35m-arm-linux-gnueabihf.so: undefined symbol: PyString_FromStringAndSize

とでる。

なんじゃこりゃ?ということで諸々調べてみたのだが、どうも、

・Python3 には PyString_FromStringAndSize が存在しない

ということのよう。

存在しない関数を利用しようとしているから、エラーがでる模様。

で、またまた調べてみると、

PythonからWiringPi2を呼ぶには?
https://hombre-nuevo.com/raspberrypi/raspberrypi0015/

というサイトを見つける。

どうも、

WiringPi2-Python/wiringpi_wrap.c

#define PyString_FromStringAndSize(x, len) PyUnicode_FromStringAndSize(x, len)

を追加すればよいらしい。

追加後、

root@raspi-03:~/#python3 setup.py install

の実施で反映される。

その結果、見事

ImportError: /usr/local/lib/python3.5/dist-packages/wiringpi2-1.1.1-py3.5-linux-armv7l.egg/_wiringpi2.cpython-35m-arm-linux-gnueabihf.so: undefined symbol: PyString_FromStringAndSize

のエラーは表示されなくなった。

よしっ!順調にエラー解決もできた!と思い、再度 webiopi を起動。

今度はエラー無く動く!

これでいよいよ!と思いきや、

http://localhost:8000

にアクセスすると、またまた空白のページに。

何が起こった?と思い、エラーメッセージをみると、以下の通り。

2017-11-26 14:45:06 - HTTP - DEBUG - "GET / HTTP/1.1" - 200 OK (Client: ::1 <Mozilla/5.0 (X11; Linux armv7l; rv:52.0) Gecko/20100101 Firefox/52.0>)
2017-11-26 14:45:06 - HTTP - DEBUG - "GET /js/jquery-3.2.1.min.js HTTP/1.1" - 404 Not Found (Client: ::1 <Mozilla/5.0 (X11; Linux armv7l; rv:52.0) Gecko/20100101 Firefox/52.0>)
2017-11-26 14:45:06 - HTTP - DEBUG - "GET /js/jquery-ui.min.js HTTP/1.1" - 404 Not Found (Client: ::1 <Mozilla/5.0 (X11; Linux armv7l; rv:52.0) Gecko/20100101 Firefox/52.0>)
2017-11-26 14:45:06 - HTTP - DEBUG - "GET /js/require.js HTTP/1.1" - 404 Not Found (Client: ::1 <Mozilla/5.0 (X11; Linux armv7l; rv:52.0) Gecko/20100101 Firefox/52.0>)
2017-11-26 14:45:07 - HTTP - DEBUG - "GET /favicon.ico HTTP/1.1" - 404 Not Found (Client: ::1 <Mozilla/5.0 (X11; Linux armv7l; rv:52.0) Gecko/20100101 Firefox/52.0>)
2017-11-26 14:45:07 - HTTP - DEBUG - "GET /favicon.ico HTTP/1.1" - 404 Not Found (Client: ::1 <Mozilla/5.0 (X11; Linux armv7l; rv:52.0) Gecko/20100101 Firefox/52.0>)

index.html の中にある js ファイルの読み込み時に、

404 Not Found

が出ている模様。

うーん、これはどういうことなのか、が分からん。

js ファイルの置き場所も間違えてないし、アクセス権変えても一緒。

なんでこんなことになったのか、が分からん・・・。

ということで、ちょっと進んだらまた停滞だ。

が、webiopi でどうすればよいのか、はちょっと分かってきた。

なので、自分で JavaScript のプログラムを書いて、

index.html からその .js を呼ぶ形にするのがよいかもしれない。

ちょっと真面目に人の書いた js コードを理解してみるか。

しっかし長いことかかるなー。

これが出来たとしても、その後、

・カメラ画像をブラウザに表示させる(画像をみながら操作できるように)

を最低限実現したい。

さらに言えば、

・音声データも取得できるようにしたい
・音声付き画像データをスマホ上で録画できるようにしたい
・音声をスマホから raspberry pi 側に送りたい(遠隔スピーカー)

も実現したいと思っている。

まずは今回の、

・WebIOPi を使ってブラウザからサーボモータを制御する

を実現しないと先に進めないが、まだまだかかりそうだなぁ・・・。

まぁ気長に頑張ろう。

[2017/12/10 追記]
かなり時間はかかったが、どうにかこうにか、

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

に成功。

ブラウザからの GPIO 及びサーボモータの制御は WebIOPi で、

専用カメラモジュールの映像表示は RPi_Web_Cam_Interface で、

各々実現。

それぞれ、以下のページにまとめたので、よければ見ていただければと思う。

・『WebIOPi で遠隔操作(インストール編)!
・『WebIOPi で遠隔操作(サーボモータ制御編)!
・『ブラウザから操作可能なライブ(監視)カメラを作る!




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

コメントを残す

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

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