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

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

この記事で学べること

  • ブレッドボードについて
  • 割り込みについて
  • M5StampS3のGPIOピン
  • 人感センサーとM5StampS3との接続
  • MicroPythonのコード例

ステップごとの解説

  1. 必要な部品を準備する
    今回も前回、MicroPythonをインストールしたM5STACK社のM5StampS3を使います。
    M5StampS3は、Amazonスイッチサイエンス社マルツエレック社などで購入することができます。
  2. M5StampS3にMicroPythonをインストールする
    前回の記事を参考にMicroPythonをインストールします。
  3. 割り込み(IRQ)とは
    通常、プログラムは順番に命令を実行します。
    しかし「外部のイベント(ボタンが押された、センサーが信号を出したなど)」が起きたときに、すぐに反応したい場合があります。このとき使うのが「割り込み(Interrupt)」です。
    → 通常の処理を“割り込んで”別の関数(割り込みハンドラ)を呼び出します。
  4. ブレッドボードとは
    ブレッドボードとは、下図のような部品やジャンパーワイヤーを差すだけ(はんだ不要)で、簡単に回路を組んで実験することができる便利なボードです。
  1. ブレッドボードの基礎
    ブレッドボードは、裏をみるとわかりますが、下図の紫の線の方向が電流が流れる方向になっています。1から30までの箇所は、AからFまでが接続されていて、それとは別にGからLまで接続されています。下の箇所は、基本的には電源のマイナスとプラスを接続するところとして使われます。また、一番下の赤いジャンパーワイヤを取り外すと、5Vの電源、3.3Vの電源として分けて使うこともできます。
ブレッドボード(裏)
  1. 人感センサーとは
    人感センサーとは、赤外線や超音波などを用いて人の動きや体温を感知して、信号を出力するセンサーのことです。
    今回は、SB412Aというレンズ付きの焦電型赤外線(人感)センサーモジュールを使います。
    赤外線センサー:人や動物の体温から放出される赤外線の変化を感知します。
    SB412Aのデータシートはこちらです。
    データシートをみると、SB412Aの電源電圧は、3.5Vから12V。センサー検知時は、3Vが出力されると書いてあります。
SB412A
  1. M5StampS3 GPIOピンマップ(MicroPython向け)

GPIO

主な用途(内部)

入力

出力

IRQ割り込み

備考・注意点

0

ブートモード選択

⚠️可

⚠️可

⚠️

起動時にLOWだと書き込みモードに入る。常時入力は非推奨

1

UART0 TX

通常はUSBシリアル出力専用。入力不可

2

内蔵LED(M5StampS3上の赤LED)

LED制御やテストに便利

3

UART0 RX

実質空き。人感センサー入力などに最適

4

PSRAM接続

内部使用中

5

PSRAM接続

内部使用中

6〜8

Flash/PSRAM接続

内部使用中(絶対に使用不可)

9〜15

内部バス接続

ファームウェアが使用

  1. 人感センサー(SB412A)とM5StampS3との接続
    今回は人感センサーの出力を割り込みとして使いたいので、人感センサーの出力ピンをM5StampS3のGPIO3と接続します。こうすることによって、人を検知すると、割り込みが入るようになります。
  1. SB412AとM5StampS3をブレッドボード上で接続する
    下表と写真を参考に接続します。
    ジャンパーワイヤは、秋月電子やAmazonで入手できます。

部品

ピン

ブレッドボードマトリックス番号

M5StampS3

G1

22 – I

G3

23 – I

G5

24 – I

G7

25 – I

G9

26 – I

GND

27 – I

5V

28 – I

G13

29 – I

G15

30 – I

3V3

25 – E

G43

26 – E

G44

27 – E

EN

28 – E

G0

29 – E

GND

30 – E

SB412A

VIN

10 – I

OUT

11 – I

GND

12 – I

ジャンパーワイヤ

ブレッドボードマトリックス番号

ジャンパーワイヤー1

10 – L === GND

ジャンパーワイヤー2

11 – K === 23 – K

ジャンパーワイヤー3

12 – L === 5V

ジャンパーワイヤー4

27 – L === GND

ジャンパーワイヤー5

28 – L === 5V

  1. 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_msg.py」としました。
  1. 下記コードをエディターで記入する
    「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)
  1. 「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デバイスに簡単に組み込めます。

類似投稿