ESP32のMicroPythonで割り込みする方法(2)

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

この記事で学べること

  • MicroPythonのコード例

ステップごとの解説

  1. 必要な部品を準備する
    今回も前回、MicroPythonをインストールしたM5STACK社のM5StampS3を使います。
    M5StampS3は、Amazonスイッチサイエンス社マルツエレック社などで購入することができます。
  2. M5StampS3にMicroPythonをインストールする
    前回の記事を参考にMicroPythonをインストールします。
  3. M5StampS3をPCに接続する
    M5StampS3とPCをUSBケーブルで接続します。接続できているか確認します。
ls -l /dev/tty.usbmodem*
crw-rw-rw-  1 root  wheel  0x9000006  8 24 16:37 /dev/tty.usbmodem11401
  1. VSCodeで以前、作ったプロジェクトを選択する
    VSCodeを起動して、以前、作ったプロジェクトを選択します。
  1. エディタで新しいファイルを作成する
    左側のエクスプローラにて右クリックして、「新しいファイル」を選択します。ファイル名を入力する欄が表示されるので、適当に名前を入力します。今回は、「irq_led.py」としました。
  1. 下記コードをエディターで記入する
    「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)
  1. 「irq_led.py」を実行する
    左のエクスプローラにて、「irq_led.py」を選択して、右クリックから、「Run current file on Pico」をクリックすると、人感センサーに人が近づくと、M5StampS3上のLEDが白で3回点滅します。

まとめ

ESP32とMicroPythonを使えば、シンプルなコードで人感センサーを動かせます。応用すればIoTデバイスに簡単に組み込めます。

類似投稿