micropython
M5stack

M5Stack MicroPython API調査記録 ボタン編

M5Cloud README.mdなどからのM5Stack MicroPython 固有のAPI調査記録 ボタン編(2018年3月2日現在)

ボタン

M5Stackには3つのボタンがついている。

ボタンを使うには m5stack モジュールにある以下の Button オブジェクトをインポートします。

ボタン Buttonオブジェクト
A (左) BtnA buttonA
B (中央) BtnB buttonB
C (右) BtnC buttonC

※ ファームウェア 0.3.4 からボタンオブジェクトの名前が変更

ESP32とボタンの配線

ボタンの一端はそれぞれ以下に配線されている(もう一端はGND):

ESP32ピン ボタン
GPIO39 A (左) 
GPIO38 B (中央)
GPIO37 C (右)

Buttonのメソッド

Button.press() Button.isPressed()

※ ファームウェア 0.3.4 からメソッド名が変更

ボタンが押されているかをチェックする。ボタンが押されていれば True を返す。

例:

import m5stack as m5

while True:
    if m5.buttonA.isPressed():  # ボタンAが押されているか
        m5.lcd.println('Button A is Pressed')
    time.sleep_ms(10)

Button.isReleased()

※ ファームウェア 0.3.4 から追加

ボタンが押されていないかをチェックする。ボタンが押されていなければ True を返す。

例:

import m5stack as m5

while True:
    if m5.buttonA.isReleased():  # ボタンAが押されていないか
        m5.lcd.println('Button A is Released')
    time.sleep_ms(10)

Button.pressedFor(timeout)

※ ファームウェア 0.3.4 から追加

ボタンを timeout 秒押し続けて放した場合に True を返す。

例:

import m5stack as m5

while True:
    if m5.buttonA.pressedFor(1.5):  # ボタンAが 1.5 秒以上押された
        m5.lcd.println('Button A pressed for 1.5s')
    time.sleep_ms(10)

Button.set_callback(press_cb) Button.wasPressed(callback=None)

※ ファームウェア 0.3.4 からメソッド名が変更になり、機能も一部変更

コールバック関数 callback を指定していれば、ボタンが押されたときにコールバック関数が呼び出される。コールバック関数を指定していなければ、このメソッドが呼び出される前ににボタンを押すアクションがあったのであれば True を返す。

コールバック関数はパラメータを1つ持たなければならない。コールバック時にはパラメータに押されたボタンに該当する Pin オブジェクトが渡ってくる。

コールバック関数指定の例:

import m5stack as m5

def on_wasPressed():  # コールバック関数
    m5.lcd.println('Button A was Pressed.')

m5.buttonA.wasPressed(on_wasPressed)

コールバック関数指定なしの例:

import m5stack as m5

while True:    
    if m5.buttonA.wasPressed():  # ボタンAが押されたか
        m5.lcd.println('Button A was Pressed')
    time.sleep_ms(10)

Button.wasReleased(callback=None)

※ ファームウェア 0.3.4 から追加

コールバック関数 callback を指定していれば、ボタンを押した状態から放したときにコールバック関数が呼び出される。コールバック関数を指定していなければ、このメソッドが呼び出される前に直前にボタンを放すアクションがあったのであれば True を返す。

コールバック関数指定の例:

import m5stack as m5

def on_wasReleased():  # コールバック関数
    m5.lcd.println('Button A was Released.')

m5.buttonA.wasReleased(on_wasReleased)

コールバック関数指定なしの例:

import m5stack as m5

while True:    
    if m5.buttonA.wasReleased():  # ボタンAが押されたか
        m5.lcd.println('Button A was Released')
    time.sleep_ms(10)

Button.releasedFor(timeout, callback=None)

※ ファームウェア 0.3.4 から追加

コールバック関数 callback を指定していれば、ボタンを timeout 秒押した状態から放したときにコールバック関数が呼び出される。コールバック関数を指定していなければ、このメソッドが呼び出される前にボタンを timeout 秒押した状態から放すアクションがあったのであれば True を返す。

コールバック関数指定の例:

import m5stack as m5

def on_releasedFor():  # コールバック関数
    m5.lcd.println('Button A released for 2s press hold.')

m5.buttonA.releasedFor(2, on_releasedFor)

コールバック関数指定なしの例:

import m5stack as m5

while True:
    if m5.buttonA.releasedFor(2):  # ボタンAを 2 秒以上押して放したか
        m5.lcd.println('Button A released for 2s press hold.')
    time.sleep_ms(10)