6. GPIO ピン¶
ボードを外部世界に接続し、他のコンポーネントを制御するには、GPIO ピンを使います。すべてのピンを使えるわけではありません。ほとんどの場合、ピン 0, 2, 4, 5, 12, 13, 14, 15, 16 のみを使用できます。
ピンは machine モジュールで使えるので、最初に machine の import を確認してください。machine が使えれば、次のようにピンを作成できます:
>>> pin = machine.Pin(0)
ここで、"0" はアクセスしたいピンの番号です。通常は、ピンを入力または出力に設定する必要があり、ピンを作成するときにこれを行います。入力ピンを使うには次のようにします:
>>> pin = machine.Pin(0, machine.Pin.IN, machine.Pin.PULL_UP)
入力プルモードとして PULL_UP または None を指定できます。指定されていない場合は、デフォルトで None になり、プル抵抗なしになります。GPIO16 にプルアップモードはありません。作成したピンを使って次のようにして値を読めます:
>>> pin.value()
0
ボード上のピンは、接続されているものに応じてここで 0 または 1 を返します。出力ピンを使うには次のようにピンを作成します:
>>> pin = machine.Pin(0, machine.Pin.OUT)
次のようにして値を設定します:
>>> pin.value(0)
>>> pin.value(1)
または次のようにします:
>>> pin.off()
>>> pin.on()
6.1. 外部割り込み¶
16番を除くすべてのピンは、入力が変化するとハード割り込みを発生させるように設定できます。トリガで実行されるコード(コールバック関数)を設定できます。
コールバック関数を定義しましょう。コールバック関数は、関数をトリガしたピンを唯一の引数としてとる必要があります。この関数ではピンを表紙するようにします:
>>> def callback(p):
... print('pin change', p)
次に、2つのピンを作成し、それらを入力として構築します:
>>> from machine import Pin
>>> p0 = Pin(0, Pin.IN)
>>> p2 = Pin(2, Pin.IN)
最後に、ピンをトリガするタイミングと、イベントを検出したときに呼び出す関数を指定する必要があります:
>>> p0.irq(trigger=Pin.IRQ_FALLING, handler=callback)
>>> p2.irq(trigger=Pin.IRQ_RISING | Pin.IRQ_FALLING, handler=callback)
ピン 0 は、入力の立ち下がりエッジでのみ(ハイからローに移行する場合)トリガするように設定され、ピン 2 を立ち上がりエッジと立ち下がりエッジの両方でトリガするように設定します。このコードを入力した後、ピン 0 とピン 2 にハイとローの電圧を与えて、実行中の割り込みを確認することができます。
ハード割り込みは、イベントが発生するとすぐに起動し、実行中のコード(Python コードを含む)を中断します。コールバック関数は、その中ででできることが限られているので(たとえば、メモリを割り当てることはできません)、できるだけ短く簡単にする必要があります。