メインコンテンツへスキップ
KatoKyo works

【Raspberry Pi】 コントローラ製作「WebIOPI編」②

| 読了 2 分 | 技術

コントローラ製作

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

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


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

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

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