【Raspberry Pi】 コントローラ製作「WebIOPI編」②
コントローラ製作
前回に引き続き、コントローラを作成します。
html等を作成して、こんな感じのUIを用意。
左側が履帯を制御して、前進後退右左折旋回を行うUI。
右側が砲塔と砲身を制御するUI。 下中央が、おまけの発射ボタンです。
それぞれのボタンが押されたときのイベントを作成し、 戦車をコントロールします。
ソース https://github.com/kyo-kato/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から呼ばれるのは、/etc/webiopi/config
で設定した pythonファイルです。
ここに、setup関数と、loop関数を用意します。
setupに初期設定処理を記述します。
loop関数は、webiopi起動中に無限ループする関数です。
jsから呼ばれる関数を用意し、デコレータ(アットマーク)@webiopi.macroを付けます。
ボタンに紐づいた処理はここに記載します。
jsでコールバックが設定してある場合、関数を抜けると、コールバックが呼ばれます。
parts配下の各モジュールは、これまでの制御をwebiopi用に書き換えたものです。
今回は、コールバックを利用せず、一方通行のみで制御しています。
コントローラー画面が寂しく感じるので、カメラを搭載し戦車目線の映像を表示できると良いと感じました。
車体の結合テストが難航しているため、新ジャンルである カメラ制御をしてみようかと思います。
Discussion