コントローラ製作
前回に引き続き、コントローラを作成します。
html等を作成して、こんな感じのUIを用意。
左側が履帯を制御して、前進後退右左折旋回を行うUI。
右側が砲塔と砲身を制御するUI。
下中央が、おまけの発射ボタンです。
それぞれのボタンが押されたときのイベントを作成し、
戦車をコントロールします。
ソース
https://github.com/emetriath/raspi/tree/master/webiopi/tank
webiopiでは、GPIOの操作に、RPi.GPIO モジュールではなく、webiopi.GPIOモジュールを利用します。
import するものを置き換える他、
- setmode のピンモード指定が不要となる。
- setup でのピン設定が、setFunction に変更となる。(引数は一緒)
- output での電圧操作が、digitalWrite に変更となる。(引数は一緒)
- sleep について、timeパッケージではなく、webiopiパッケージのsleepが必要になる。
等の違いがあります。サンプルを見ていると、pwmやi2c等の制御も行えるようです。
サーボを制御した際に使った、wiringpi パッケージは利用可能でした。
具体的な実装です。
tank.js
htmlのボタン等にjsでイベントを設定し、jsから、webiopiの関数である、
webiopi().callMacro("pythonの関数名")
を呼び出します。
第二引数に引数を設定し渡したり、第三引数にコールバックを設定することも出来ます。
tank.py
python側の実装をします。webiopiはpython3で動作します。
jsから呼ばれるのは、/eetc/webiopi/config
で設定した
pythonファイルです。ここに、setup関数と、loop関数を用意します。
setupに初期設定処理を記述します。
loop関数は、webiopi起動中に無限ループする関数です。
jsから呼ばれる関数を用意し、デコレータ(アットマーク)@webiopi.macroを付けます。
ボタンに紐づいた処理はここに記載します。
jsでコールバックが設定してある場合、関数を抜けると、コールバックが呼ばれます。
parts配下の各モジュールは、これまでの制御をwebiopi用に書き換えたものです。
今回は、コールバックを利用せず、一方通行のみで制御しています。
コントローラー画面が寂しく感じるので、カメラを搭載し、
戦車目線の映像を表示できると良いと感じました。
車体の結合テストが難航しているため、新ジャンルである
カメラ制御をしてみようかと思います。
コメント