🤖

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

2022/11/06に公開

コントローラ製作

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

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


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

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

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

GitHubで編集を提案

Discussion