Micro Python の書き方(ボタン割り込み)
Rasberry Pi Picoでの割り込み操作について記載しました。
IRQ(Interrupt Request)を用いて、ボタンを押したときに関数を呼ぶようにしています。
機能
ボタンを押したときだけLEDが光る。
接続
・PicoのGPIO21 --- LED(アノード)---LED(カソード)---680Ω---GND
・PicoのGPIO8 --- ボタン---GND
from machine import Pin
import time
# ピンの入出力設定
BUTTON_PIN = 8
button = Pin(BUTTON_PIN, Pin.IN, Pin.PULL_UP)
LED_PIN = 21
led = Pin(LED_PIN, Pin.OUT)
# 関数定義
def callback(p):
led.value(1)
time.sleep(1)
def ledoff():
led.value(0)
time.sleep(1)
# IRQの設定
button.irq(trigger=Pin.IRQ_FALLING, handler=callback)
while True:
ledoff()
解説
ボタンを押した時のGPIO8の立下りをトリガーにしたいので、
GPIO8をプルアップして3.3Vに釣り上げて待機させます。
BUTTON_PIN = 8
button = Pin(BUTTON_PIN, Pin.IN, Pin.PULL_UP)
トリガーに掛かった時にcallback関数を読むようにしています。
ちなみに、callbackという名前でなくても、ledonなど別名でも動きました。
callback()はピン情報を引数として必ず持つため、pという引数を渡しています。
triggerのタイプはいくつかあり
Pin.IRQ_FALLING
Pin.IRQ_RISING
Pin.IRQ_LOW_LEVEL
Pin.IRQ_HIGH_LEVEL
があるようです。
以下の公式ドキュメントも参考になると思います。
割り込みができれば、マイコンの操作の幅が広がりそうですね。
micropython-docs-ja.readthedocs.io