ESP32のMicroPythonで割り込みする方法(2)
この記事では、ESP32とMicroPythonを使って割り込みを利用する方法を解説します。
この記事で学べること
- MicroPythonのコード例
ステップごとの解説
- 必要な部品を準備する
今回も前回、MicroPythonをインストールしたM5STACK社のM5StampS3を使います。
M5StampS3は、Amazon、スイッチサイエンス社、マルツエレック社などで購入することができます。 - M5StampS3にMicroPythonをインストールする
前回の記事を参考にMicroPythonをインストールします。 - M5StampS3をPCに接続する
M5StampS3とPCをUSBケーブルで接続します。接続できているか確認します。
ls -l /dev/tty.usbmodem*
crw-rw-rw- 1 root wheel 0x9000006 8 24 16:37 /dev/tty.usbmodem11401
- VSCodeで以前、作ったプロジェクトを選択する
VSCodeを起動して、以前、作ったプロジェクトを選択します。

- エディタで新しいファイルを作成する
左側のエクスプローラにて右クリックして、「新しいファイル」を選択します。ファイル名を入力する欄が表示されるので、適当に名前を入力します。今回は、「irq_led.py」としました。

- 下記コードをエディターで記入する
「irq_led.py」を選択すると、エディター画面が開くので、下記コードを記入して保存します。
from machine import Pin, Timer
import neopixel
# NeoPixel設定
np_pin = Pin(21, Pin.OUT) # NeoPixel接続ピン
np = neopixel.NeoPixel(np_pin, 8) # 8ピクセル
# 割り込み検知フラグ
irq_flag = False
blink_count = 0
# タイマー(ハードウェアTimer0)で点滅制御
timer = Timer(0)
# PIRセンサー割り込みハンドラ
def pir_callback(p):
global irq_flag
irq_flag = True # 割り込みでフラグだけ立てる
# PIRセンサー設定(GPIO3を使用)
pir = Pin(3, Pin.IN, Pin.PULL_DOWN)
pir.irq(trigger=Pin.IRQ_RISING, handler=pir_callback)
# LED点滅タイマーのコールバック
def blink(timer):
global blink_count
if blink_count >= 6: # ON/OFFで3回点滅 → 6ステップ
np[0] = (0,0,0) # 完全消灯
np.write()
timer.deinit() # タイマー停止
return
# 偶数回でON、奇数回でOFF
np[0] = (255,255,255) if blink_count % 2 == 0 else (0,0,0)
np.write()
blink_count += 1
# メインループ
while True:
if irq_flag:
irq_flag = False
blink_count = 0
timer.init(period=500, mode=Timer.PERIODIC, callback=blink)
- 「irq_led.py」を実行する
左のエクスプローラにて、「irq_led.py」を選択して、右クリックから、「Run current file on Pico」をクリックすると、人感センサーに人が近づくと、M5StampS3上のLEDが白で3回点滅します。
まとめ
ESP32とMicroPythonを使えば、シンプルなコードで人感センサーを動かせます。応用すればIoTデバイスに簡単に組み込めます。