ESP32のMicroPythonで割り込みする方法(1)
この記事では、ESP32とMicroPythonを使って割り込みを利用する方法を解説します。
この記事で学べること
- ブレッドボードについて
- 割り込みについて
- M5StampS3のGPIOピン
- 人感センサーとM5StampS3との接続
- MicroPythonのコード例
ステップごとの解説
- 必要な部品を準備する
今回も前回、MicroPythonをインストールしたM5STACK社のM5StampS3を使います。
M5StampS3は、Amazon、スイッチサイエンス社、マルツエレック社などで購入することができます。 - M5StampS3にMicroPythonをインストールする
前回の記事を参考にMicroPythonをインストールします。 - 割り込み(IRQ)とは
通常、プログラムは順番に命令を実行します。
しかし「外部のイベント(ボタンが押された、センサーが信号を出したなど)」が起きたときに、すぐに反応したい場合があります。このとき使うのが「割り込み(Interrupt)」です。
→ 通常の処理を“割り込んで”別の関数(割り込みハンドラ)を呼び出します。 - ブレッドボードとは
ブレッドボードとは、下図のような部品やジャンパーワイヤーを差すだけ(はんだ不要)で、簡単に回路を組んで実験することができる便利なボードです。

- ブレッドボードの基礎
ブレッドボードは、裏をみるとわかりますが、下図の紫の線の方向が電流が流れる方向になっています。1から30までの箇所は、AからFまでが接続されていて、それとは別にGからLまで接続されています。下の箇所は、基本的には電源のマイナスとプラスを接続するところとして使われます。また、一番下の赤いジャンパーワイヤを取り外すと、5Vの電源、3.3Vの電源として分けて使うこともできます。


- 人感センサーとは
人感センサーとは、赤外線や超音波などを用いて人の動きや体温を感知して、信号を出力するセンサーのことです。
今回は、SB412Aというレンズ付きの焦電型赤外線(人感)センサーモジュールを使います。
赤外線センサー:人や動物の体温から放出される赤外線の変化を感知します。
SB412Aのデータシートはこちらです。
データシートをみると、SB412Aの電源電圧は、3.5Vから12V。センサー検知時は、3Vが出力されると書いてあります。

- M5StampS3 GPIOピンマップ(MicroPython向け)
GPIO 3152_a6ddee-64> |
主な用途(内部) 3152_86fb60-16> |
入力 3152_7b91ac-40> |
出力 3152_1c59aa-28> |
IRQ割り込み 3152_6bc9c0-ec> |
備考・注意点 3152_e99e04-35> |
0 3152_eb1e18-3c> |
ブートモード選択 3152_933c3d-7e> |
⚠️可 3152_54c187-75> |
⚠️可 3152_d680e5-c6> |
⚠️ 3152_4e3e44-d2> |
起動時にLOWだと書き込みモードに入る。常時入力は非推奨 3152_d552bb-48> |
1 3152_a34f48-b2> |
UART0 TX 3152_0485a2-b2> |
❌ 3152_24e4ed-d1> |
✅ 3152_056e00-da> |
❌ 3152_15f28c-46> |
通常はUSBシリアル出力専用。入力不可 3152_c3a0d7-cb> |
2 3152_373117-83> |
内蔵LED(M5StampS3上の赤LED) 3152_ab8ff4-ba> |
✅ 3152_588f70-d2> |
✅ 3152_cacb4f-cc> |
✅ 3152_a18755-7d> |
LED制御やテストに便利 3152_66511b-8d> |
3 3152_a72869-7b> |
UART0 RX 3152_cb8633-d5> |
✅ 3152_7e93bc-57> |
✅ 3152_2980d3-e6> |
✅ 3152_0fcfa6-c7> |
実質空き。人感センサー入力などに最適 3152_c9c484-8a> |
4 3152_e01c52-36> |
PSRAM接続 3152_ed2bfd-9b> |
❌ 3152_04aaee-56> |
❌ 3152_06ef28-7e> |
❌ 3152_3e8d4d-90> |
内部使用中 3152_f39b76-3d> |
5 3152_869487-04> |
PSRAM接続 3152_8a3f99-d5> |
❌ 3152_378e3a-67> |
❌ 3152_e60e11-b1> |
❌ 3152_f22fd1-a0> |
内部使用中 3152_257854-83> |
6〜8 3152_dcf596-4d> |
Flash/PSRAM接続 3152_ad3196-8a> |
❌ 3152_dd8bd8-8b> |
❌ 3152_f4a1cf-6c> |
❌ 3152_b27cf1-2f> |
内部使用中(絶対に使用不可) 3152_97a178-f6> |
9〜15 3152_df2037-1a> |
内部バス接続 3152_2e635d-05> |
❌ 3152_62624b-9a> |
❌ 3152_336fef-71> |
❌ 3152_6ebe66-41> |
ファームウェアが使用 3152_be0e71-c7> |
- 人感センサー(SB412A)とM5StampS3との接続
今回は人感センサーの出力を割り込みとして使いたいので、人感センサーの出力ピンをM5StampS3のGPIO3と接続します。こうすることによって、人を検知すると、割り込みが入るようになります。

- SB412AとM5StampS3をブレッドボード上で接続する
下表と写真を参考に接続します。
ジャンパーワイヤは、秋月電子やAmazonで入手できます。
部品 3152_622bd2-ae> |
ピン 3152_1c0429-5a> |
ブレッドボードマトリックス番号 3152_8301ed-a5> |
M5StampS3 3152_86ea6f-96> |
G1 3152_717e47-92> |
22 – I 3152_17d14f-5d> |
3152_dc196b-c2> |
G3 3152_30cd71-e4> |
23 – I 3152_222afc-da> |
3152_abefbb-be> |
G5 3152_b21056-f6> |
24 – I 3152_d8dcd3-3f> |
3152_578ccc-82> |
G7 3152_50aa00-00> |
25 – I 3152_513412-a1> |
3152_44eb8e-e1> |
G9 3152_14d8b6-20> |
26 – I 3152_a5593c-38> |
3152_e21988-c6> |
GND 3152_f37d0e-67> |
27 – I 3152_504526-90> |
3152_22373e-2c> |
5V 3152_721854-94> |
28 – I 3152_6a0d53-df> |
3152_b1b2e6-a1> |
G13 3152_a6944f-ca> |
29 – I 3152_7ced99-ca> |
3152_e8c4f8-0a> |
G15 3152_927db3-5e> |
30 – I 3152_858a9b-9a> |
3152_5f3544-0e> |
3V3 3152_2b89d5-05> |
25 – E 3152_26b616-76> |
3152_3ffea0-07> |
G43 3152_8ad961-ee> |
26 – E 3152_112562-d4> |
3152_4a791b-fc> |
G44 3152_b51a9a-a8> |
27 – E 3152_c6d54d-68> |
3152_7f8d4a-38> |
EN 3152_5a789d-be> |
28 – E 3152_0511a0-20> |
3152_6b24eb-ee> |
G0 3152_75e9c9-92> |
29 – E 3152_9d6b1a-2b> |
3152_50c799-f8> |
GND 3152_a1f9da-78> |
30 – E 3152_c89153-0d> |
SB412A 3152_943edd-ee> |
VIN 3152_98950b-76> |
10 – I 3152_19bc5e-7d> |
3152_2c0781-54> |
OUT 3152_11a2f6-bf> |
11 – I 3152_3786bc-2e> |
3152_49bb52-a7> |
GND 3152_38089a-4f> |
12 – I 3152_bf7194-51> |
ジャンパーワイヤ 3152_ce8226-aa> |
ブレッドボードマトリックス番号 3152_3cc472-9c> |
ジャンパーワイヤー1 3152_54cb09-7c> |
10 – L === GND 3152_5b10f8-83> |
ジャンパーワイヤー2 3152_0cd03d-c6> |
11 – K === 23 – K 3152_8d57ee-db> |
ジャンパーワイヤー3 3152_094dcf-75> |
12 – L === 5V 3152_d8f8ce-ed> |
ジャンパーワイヤー4 3152_35260f-e6> |
27 – L === GND 3152_db81d4-04> |
ジャンパーワイヤー5 3152_7c00db-3f> |
28 – L === 5V 3152_ca7872-31> |

- 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_msg.py」としました。

- 下記コードをエディターで記入する
「irq_msg.py」を選択すると、エディター画面が開くので、下記コードを記入して保存します。
from machine import Pin
import time
# 割り込みが発生したときに呼び出される関数
def irq_callback(p):
print("IRQ detected!", p)
# ピン設定(例:GPIO3を使用)
sens = Pin(3, Pin.IN, Pin.PULL_DOWN)
# 割り込み設定:立ち上がりエッジで発火
sens.irq(trigger=Pin.IRQ_RISING, handler=irq_callback)
while True:
time.sleep(10)
- 「irq_msg.py」を実行する
左のエクスプローラにて、「irq_msg.py」を選択して、右クリックから、「Run current file on Pico」をクリックすると、人感センサーに人が近づくと、REPL画面に下記のように表示され続け、離れると止まります。
IRQ detected! Pin(3)
IRQ detected! Pin(3)
IRQ detected! Pin(3)
IRQ detected! Pin(3)
まとめ
ESP32とMicroPythonを使えば、シンプルなコードで人感センサーを動かせます。応用すればIoTデバイスに簡単に組み込めます。