gpiozeroライブラリ入門⑰import Button
使用環境
|
gpiozeroパッケージの基底クラスInput Devicesは、入力デバイスやセンサ用です。
●Button
class gpiozero.Button(pin, *, pull_up=True, active_state=None, bounce_time=None, hold_time=1, hold_repeat=False, pin_factory=None)ボタンの一方の側をアース・ピンに接続し、もう一方の側を任意のGPIOピンに接続する。または、ボタンの一方の側を3V3ピンに接続し、もう一方の側を任意のGPIOピンに接続しButtonコンストラクタでpull_upをFalseに設定する。 pin(intまたはstr)ボタンが接続されているGPIOピン。 pull_up(boolまたはNone)True(デフォルト)の場合、GPIOピンはデフォルトでHighにプルアップされる。この場合、ボタンの反対側をアースに接続する。Falseの場合、GPIOピンはデフォルトでLowにプルダウンされる。この場合、ボタンの反対側を3V3に接続する。Noneの場合、ピンはフローティングになるため、外部でプルアップまたはプルダウンし、active_stateに応じてパラメータを設定する。 active_state(boolまたはNone)Trueの場合、ハードウェア・ピンの状態がHigh場合、ソフトウェア・ピンはHigh。Falseの場合、入力極性が逆になる。ハードウェア・ピンの状態がHighの場合、ソフトウェア・ピンの状態はLow。このパラメータを使用して、プルアップされていないものとして構成する場合(pull_upがNoneの場合)に、基になるピンのアクティブ状態を設定する。 pull_upがTrueまたはFalseのとき、アクティブ状態を自動的に適切な値に設定される。 bounce_time(floatまたはNone)None(デフォルト)の場合、ソフトウェア・バウンス補正は実行されない。それ以外の場合、これは、コンポーネントが最初の変更後の状態の変更を無視する時間の長さ(秒単位)。 hold_time(float)ボタンが押されてからwhen_heldハンドラが実行されるまで待機する時間の長さ(秒単位)。デフォルトは1。 hold_repeat(bool)Trueの場合、when_heldデバイスがアクティブである限り、hold_time 秒ごとにハンドラが繰り返し実行される。False(デフォルト)の場合、when_heldハンドラはホールドごとに1回だけ実行される。 pin_factory(factoryまたはNone)詳細については、API –ピンを参照(これは、ほとんどのユーザが無視できる高度な機能)
|
●配線
GPIO4と隣のGND間にスイッチをつなぎました。1.8kΩを直列に入れてあります。
●プログラム
wait_for_press()は、ずっとボタンが押されるのを待っています。ほかに何もしません。
from gpiozero import Button
button = Button(4)
while 1:
print('.')
button.wait_for_press()
print("The button was pressed!")
実行例です。
ボタンが押されたらメッセージを出すように変更しました。
from gpiozero import Button
import time
button = Button(4)
while 1:
print('.')
if button.value:
print("The button was pressed!")
time.sleep(0.1)
実行例です。valueはis_pressedでも同様に動作しました。
●when_pressed
ボタンが押されたイベントにコールバック関数hello()を割り当てます。
from gpiozero import Button
from signal import pause
def hello():
print("Hello")
button = Button(4, bounce_time=0.05)
button.when_pressed = hello
pause()
ボタンを押すと、Helloと表示します。pause()がないと終了してしまいます。
●短く押したときと長く押したときを判別
ボタンを軽く押したときは、「button was pressed just a bit」、3秒以上長押ししたときは、「button was over 3 seconds held」を表示します。
from gpiozero import Button
from signal import pause
Button.was_held = False
def held(btn):
btn.was_held = True
print("button was over 3 seconds held")
def released(btn):
if not btn.was_held:
pressed()
btn.was_held = False
def pressed():
print("button was pressed just a bit")
btn = Button(4, hold_time=3, bounce_time=0.05)
btn.when_held = held
btn.when_released = released
pause()