Python Code
AoTでは、Pythonコード入力、Pythonコード出力、条件付き機能など、いくつかの場所でPython 3のコードを使用できます。
以下は、Python 3のコードを使ってAoTを操作するいくつかの便利な方法を示す例です。
コードが実行されるすべてのAoT環境では、aot/aot_client.pyにDaemonControl()クラスが定義されており、「control」オブジェクトを使ってデーモンと通信できます。
出力~
最小デューティサイクルで回転するPWMファン~
PWMで制御されるファンの中には、最小デューティサイクルを設定するまで回転が始まらないものがあります。いったんファンが回転を始めると、デューティサイクルをそれよりかなり低く設定しても回転し続けます。そのため、デューティサイクル0からファンをオンにする場合には「チャージ」フェーズが必要です。このコードは、要求されたデューティサイクルを設定する前にチャージフェーズを実行する必要があるかどうかを判定します。これを行うには、GPIO PWM出力とPythonコードPWM出力が必要です。GPIO PWM出力はファン用に設定し、PythonコードPWM出力には次のコードを設定します:
import time
# Set variables the first time the code runs.
if not hasattr(self, "output_id_gpio_pwm"):
self.logger.debug("初期化中")
self.output_id_gpio_pwm = "a3dade60-091a-49d7-9c79-cd2adf41bc23" # GPIO PWM出力のUUID
self.fan_spinning = False # ファンが回転しているかを保持します
self.fan_min_duty_cycle = 2 # ファンが回り続けられる最小デューティサイクル
self.fan_spin_duty_cycle = 25 # 停止状態からファンを回し始める最小デューティサイクル
self.fan_charge_duty_cycle = 45 # ファンを回し始めるために必要なチャージ用デューティサイクル
self.fan_spin_duration_sec = 1.5 # チャージ用デューティサイクルで回す時間(秒)
# ファンが止まっていて要求されたデューティサイクルが低すぎる場合にチャージします。
if duty_cycle and not self.fan_spinning and duty_cycle < self.fan_spin_duty_cycle:
self.logger.debug("デューティサイクルが低すぎ、ファンは停止中です。チャージします。")
self.logger.debug("デューティサイクルを {} % に設定".format(self.fan_charge_duty_cycle))
control.output_on(self.output_id_gpio_pwm,
output_type='pwm',
amount=self.fan_charge_duty_cycle,
output_channel=0)
time.sleep(self.fan_spin_duration_sec)
self.fan_spinning = True
if duty_cycle == 0:
self.logger.debug("ファンを停止しました")
self.fan_spinning = False
elif duty_cycle > self.fan_spin_duty_cycle:
self.fan_spinning = True
self.logger.debug("デューティサイクルを {} % に設定".format(duty_cycle))
control.output_on(self.output_id_gpio_pwm,
output_type='pwm',
amount=duty_cycle,
output_channel=0)