ESP32のMicroPythonで割り込み処理を使う方法(基礎)【初心者向け完全解説】

この記事では、ESP32とMicroPythonを使って割り込み処理を使う方法を解説します。

結論

ESP32 の MicroPython では、GPIO の割り込み(IRQ)を使うことで、ボタン入力や外部イベントを即座に検知できます。ポーリング処理よりも効率的で、実用的な IoT アプリケーションには欠かせない仕組みです。

この記事で学べること

  • 割り込み(IRQ)の基本的な考え方が分かる
  • ESP32 の GPIO 割り込みを MicroPython で実装できる
  • よくある失敗と注意点を理解できる

割り込みとは何か?

割り込みとは、通常のプログラム処理とは別に、特定のイベントが発生した瞬間に処理を実行する仕組みです。
例えば、

  • ボタンが押された
  • センサーの信号が変化した

といったイベントが起きた瞬間に、CPUが即座に対応できます。

ポーリングとの違い

方法

特徴

ポーリング

一定間隔で状態を確認する(無駄な処理が増える)

割り込み

必要なときだけ処理される(効率的)

ESP32 では、低消費電力・即応性の点で割り込みが非常に有効です。

GPIO 割り込みの基本

MicroPython では、Pin.irq() を使って GPIO 割り込みを設定します。

from machine import Pin

def callback(pin):
    print("Interrupt detected")

btn = Pin(0, Pin.IN, Pin.PULL_UP)
btn.irq(trigger=Pin.IRQ_FALLING, handler=callback)

コード解説

  • trigger:割り込み条件(立ち上がり/立ち下がり)
  • handler:割り込み発生時に呼ばれる関数

割り込み処理での注意点(重要)

割り込みハンドラ内では、重い処理を行ってはいけません

NG例:

  • 長時間処理
  • time.sleep()
  • ファイルアクセス

理由:

  • システムが不安定になる
  • 他の割り込みを妨げる

基本は フラグを立てるだけ にします。

安全な割り込み処理の例

from machine import Pin
import time

flag = False

def callback(pin):
    global flag
    flag = True

btn = Pin(0, Pin.IN, Pin.PULL_UP)
btn.irq(trigger=Pin.IRQ_FALLING, handler=callback)

while True:
    if flag:
        print("Button pressed")
        flag = False
    time.sleep(0.1)

チャタリング対策について

物理ボタンでは、チャタリングと呼ばれる誤動作が発生します。

簡易的な対策

  • 割り込み後に一定時間無視する
  • フラグ制御で対応

実運用では、ソフトウェア・ハードウェア両面での対策が必要です。

よくあるトラブルと対処法

割り込みが発生しない

  • GPIO 番号の指定ミス
  • プルアップ設定不足

割り込みが多重発生する

  • チャタリング未対策
  • trigger 設定ミス

割り込みはどんな場面で使う?

  • ボタン入力
  • センサーの状態変化検知
  • 省電力モードとの組み合わせ

IoT デバイスでは 必須の技術です。

まとめ

  • 割り込みはイベント駆動型処理の基本
  • MicroPython でも簡単に実装できる
  • ハンドラ内は最小限の処理にする

本記事を参考に、ESP32 の割り込み処理を安全に活用してください。

類似投稿