■できたぁ! – WebIOPi によるサーボモータ制御 –
やっと・・・。やっとである・・・。
苦節二ヶ月半。
ようやく、ブラウザからサーボモータを制御する事に成功した。
最初は Node.js にトライするも、情報量不足で断念。
代替策を探し求めて、WebIOPi にたどり着く。
最初は順調にインストールまで実施出来た。
が、raspbian stretch だとうまく動かないという現象に遭遇。
何とか解決策を探し出し、起動する所までは持っていけた。
さぁいよいよサーボモータの制御だ!
と意気込んだはよいものの、ここでも大苦戦。
サーボモータに信号は送れても、意図どおりに動かない。
WiringPi なら解決できるかと思いきや、別要因で動かない。
それならば、と python コードの理解に取り組み出した。
で、ここ最近、いろんなサイトのコードをみながら勉強。
完全に理解できないまでも、凡その挙動は理解できた。
それを元に、実際に python コードを修正してみた。
結果、多少動くものの、意図どおりには動かない。
GPIO.pulseAngle()
と
GPIO.pulseRatio()
での操作がどうしてもうまく行かない。
操作してないのに一定時間で勝手に動く。
操作したら、一応それっぽく動くが、カメラ位置が元に戻る。
これだと思った通りに動かせていることにはならない。
で、再度色々調べてみたものの、
GPIO.pulseRatio()
の情報も少なく、挙動が最後まで良く分からなかった。
実際のサーボモータの動きと仕様上の記載がマッチしないのだ。
さすがにもう限界か?
サーボモータ如きも制御できないのか!?
と、思いつつも、諦めたくなくて、考えを再度整理してみた。
まず、index.html では、
・Javascript を使ってボタン生成
・生成したボタンを押すと、python コードを呼び出す
ということをやっているだけだ。
で、呼び出された python コード側の、
GPIO.pulseRatio()
を適切に使いこなせていないため、意図どおり動かない。
ではその関数の挙動を理解しようと思うも、情報が少ない。
当たれる情報には凡そあたったように思える。
やっぱり限界かなぁ、コンソールから直操作なら動くのになぁ、
と思った際に、ふと気がついた。
ん?
コンソールからなら直動かせてるよね???
コンソールからって、python で動かしてるよね?
index.html から呼び出してるのも、python だよね?
だったら、コンソールで動かしてた時のやり方使えるんじゃね???
ということで、ちょっと考えてみた。
でも書いたように、コンソールから動かす際は、
root@raspi-03# python3
で python を起動した後、
>>> import pigpio >>> pi = pigpio.pi()
としている。
ということは、WebIOPi から読み込む python コードにも、
import pigpio pi = pigpio.pi()
を書いておけば、コンソールから動かした際と同じ関数が使えるはず。
ということで、python コードにまずこれを挿入。
続いて、初期化処理等を記載した後、
index.html 中の javascript から呼び出す関数
を定義している所に、
pi.set_servo_pulsewidth(18, 1500)
等の関数を書いてやれば、意図どおり動かせるはずである。
ということで、祈るような気持ちでやってみた。
・・・。
動くじゃねーか!
意図どおり動くじゃないか!
ざまぁみろ!俺!
ということで、現在、変な動きもなく、順調に動いている。
長かった・・・。本当に長かった・・・。
でも、諦めずにやってきてよかった。
これらに関しては、
・こうすれば動く
・こういうトラブルと解決策がある
ということを、
WebIOPi で遠隔操作(サーボモータ制御編)!
として、後日記事にまとめておこうと思う。
次のステップは、ブラウザ上にカメラ画像を表示させることだ。
が、怪我の功名とはよくいったもので、
こちらに関しては、色々調べていた過程で既に目処がついた。
もちろん、ハマればまた長期化するが、今の所道は開けている。
なんとか実現させて、記事にまとめた上で、
・Raspberry Pi から音を取得してスマホ側で再生する
・スマホから声を取得して Raspberry Pi 側で再生する
という所まで持っていきたいと思う。
そこまで出来れば、再度記事をまとめ直して、
・ラズパイで遠隔操作監視カメラを作る!
的な感じで書いておきたいと思う。
いやぁ、ようやく停滞から脱出出来そうだ!
[2017/12/10 追記]
かなり時間はかかったが、どうにかこうにか、
・ブラウザから操作できるライブ(監視)カメラ化
に成功。
ブラウザからの GPIO 及びサーボモータの制御は WebIOPi で、
専用カメラモジュールの映像表示は RPi_Web_Cam_Interface で、
各々実現。
それぞれ、以下のページにまとめたので、よければ見ていただければと思う。
・『WebIOPi で遠隔操作(インストール編)!』
・『WebIOPi で遠隔操作(サーボモータ制御編)!』
・『ブラウザから操作可能なライブ(監視)カメラを作る!』
Copyright (c) 2017 Webmaster of this site All Rights Reserved.