Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
10
Help us understand the problem. What is going on with this article?
@inachi

M5Stack MicroPython API調査記録 ボタン編

More than 3 years have passed since last update.

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)
10
Help us understand the problem. What is going on with this article?
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
inachi

Comments

No comments
Sign up for free and join this conversation.
Sign Up
If you already have a Qiita account Login
10
Help us understand the problem. What is going on with this article?