コントローラ製作「WebIOPI編」②

コントローラ製作

前回に引き続き、コントローラを作成します。

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用に書き換えたものです。


今回は、コールバックを利用せず、一方通行のみで制御しています。

コントローラー画面が寂しく感じるので、カメラを搭載し、
戦車目線の映像を表示できると良いと感じました。

車体の結合テストが難航しているため、新ジャンルである
カメラ制御をしてみようかと思います。

コメント

タイトルとURLをコピーしました