このドキュメンテーションは、MicroPython の最新開発ブランチのためのものです。 リリースバージョンでは利用できない機能に言及することがあります。

特定のリリースのドキュメントをお探しの場合は、左側のドロップダウンメニューを使って、 望みのバージョンを選択します。

クラス Pin -- I/O ピンの制御

ピンオブジェクトは、I/O ピン (GPIO - 汎用入出力)を制御するために使われます。ピンオブジェクトは、一般に物理ピンに関連付けられていて、出力電圧を駆動したり、入力電圧を読み取ることができます。ピンクラスには、ピンのモード(IN, OUT など)を設定するメソッドと、デジタル論理レベルを取得および設定するメソッドがあります。ピンのアナログ制御については ADC クラスを参照してください。

ピンオブジェクトは、特定の I/O ピンを明示する識別子を使って構築されます。識別子の形式とその識別子が示す物理ピンはポートに固有です。識別子の形式としては、整数、文字列、ポートとピン番号のタプルなどがあります。

よくある使用例:

from machine import Pin

# ピン #0 を出力ピンとして作成
p0 = Pin(0, Pin.OUT)

# 値をロー、ハイと順に設定
p0.value(0)
p0.value(1)

# ピン #2 をプルアップ抵抗付きの入力ピンとして作成
p2 = Pin(2, Pin.IN, Pin.PULL_UP)

# ピンの値を読み込んで表示
print(p2.value())

# ピン #0 を入力モード&プルダウン抵抗指定で再設定
p0.init(p0.IN, p0.PULL_DOWN)

# irq コールバックを設定
p0.irq(lambda p:print(p))

コンストラクタ

class machine.Pin(id, mode=-1, pull=-1, *, value=None, drive=0, alt=-1)

指定した id に関連づけられたピンペリフェラル(GPIO ピン)にアクセスします。追加の引数がコンストラクタに指定された場合は、それらを使ってピンを初期化します。指定していない場合の設定は、以前の状態のままとなります。

引数は次のとおりです:

  • id は必須であり、任意のオブジェクトを指定できます。可能な値の型には int (内部ピン識別子)、str (ピン名)、およびタプル([ポート, ピン] のペア)があります。

  • mode はピンモードを指定します。次のいずれかになります:

    • Pin.IN - ピンは入力用に設定されます。出力として参照すると、ピンはハイインピーダンス状態です。

    • Pin.OUT - ピンは(通常の)出力用に構成されます。

    • Pin.OPEN_DRAIN - ピンはオープンドレイン出力用に設定されます。オープンドレイン出力は次のように動作します: 出力値が 0 に設定される場合、ピンはローレベルでアクティブになります。出力値が 1 の場合、ピンはハイインピーダンス状態になります。すべてのポートがこのモードを実装しているわけではありません。

    • Pin.ALT - ピンは、ポート固有の代替機能を実行するように設定されています。このように設定されたピンの場合、他のどの Pin メソッドは(Pin.init() を除いて)適用されません(呼び出した結果は未定義またはハードウェア依存となります)。すべてのポートがこのモードを実装しているわけではありません。

    • Pin.ALT_OPEN_DRAIN - Pin.ALT と同じですが、ピンはオープンドレインとして設定されます。すべてのポートがこのモードを実装しているわけではありません。

    • Pin.ANALOG - ピンはアナログ入力用に設定されます。 ADC クラスを参照してください。

  • pull は、ピンに(弱い)プル抵抗を接続するかを指定します。次のいずれかになります:

    • None - プルアップ抵抗もプルダウン抵抗もなし。

    • Pin.PULL_UP - プルアップ抵抗を有効にします。

    • Pin.PULL_DOWN - プルダウン抵抗を有効にします。

  • value は Pin.OUT および Pin.OPEN_DRAIN モードでのみ有効で、指定されている場合は初期出力ピン値になります。指定のない場合、ピンのペリフェラルの状態は変更されません。

  • drive はピンの出力電流を指定します。この引数には Pin.DRIVE_0, Pin.DRIVE_1 などの定数のいずれかを指定し、数が大きいほどドライブ電流値(drive strength)が強くなります。実際のドライブ電流能力はポートに依存します。すべてのポートがこの引数を実装しているわけではありません。

  • alt はピンの代替機能を指定し、ポートに依存する値を取ります。この引数は Pin.ALTPin.ALT_OPEN_DRAIN モードでのみ有効です。これは、ピンが複数の代替機能をサポートしている場合に使われます。ピン代替機能が1つしかない場合、この引数は必須ではありません。すべてのポートがこの引数を実装しているわけではありません。

上記で指定されたように、Pin クラスは特定のピンに対して代替機能を設定することを可能にしていますが、そのようなピンに対するさらなる操作は指定しません。代替機能モードに設定されたピンは、通常 GPIO として使われず、代わりに他のハードウェアペリフェラルによって駆動されます。このようなピンでサポートされている唯一の操作は、コンストラクタまたは Pin.init() メソッドを呼び出すことによる再初期化です。代替機能モードに設定されたピンが Pin.IN, Pin.OUT, Pin.OPEN_DRAIN で再初期化されると、代替機能がピンから外されます。

メソッド

Pin.init(mode=-1, pull=-1, *, value=None, drive=0, alt=-1)

指定したパラメータを使ってピンを再初期化します。指定された引数だけが設定されます。残りのピンペリフェラルは変更されません。引数の詳細については、コンストラクタの説明を参照してください。

None を返します。

Pin.value([x])

このメソッドは、引数 x を指定したかによって、ピンの値を設定したり取得するのに使えます。

引数を省略した場合、このメソッドはピンのデジタル論理レベルを取得し、低電圧信号と高電圧信号に対応してそれぞれ 0 または 1 を返します。このメソッドの動作はピンのモードによって異なります。

  • Pin.IN - メソッドはピンの現在の入力値を返します。

  • Pin.OUT - メソッドの動作と戻り値は未定義です。

  • Pin.OPEN_DRAIN - ピンが状態 '0' の場合、メソッドの動作と戻り値は未定義です。それ以外の場合、ピンが状態 '1' の場合、メソッドはピンに現在の入力値を返します。

引数が指定されている場合、このメソッドはピンのデジタル論理レベルを設定します。引数 x はブール型に変換できるものであれば何でも構いません。変換後が True だとピンは状態 '1' に設定され、そうでない場合は状態 '0' に設定されます。このメソッドの動作はピンのモードによって異なります。

  • Pin.IN - 値はピンの出力バッファに格納されます。ピンの状態は変化せず、ハイインピーダンス状態のままです。格納された値は Pin.OUT または Pin.OPEN_DRAIN に変更されるとすぐにピンでアクティブになります。

  • Pin.OUT - 出力バッファは指定した値ですぐに設定されます。

  • Pin.OPEN_DRAIN - 値が '0' の場合ピンは低電圧状態に設定されます。それ以外の場合、ピンはハイインピーダンス状態に設定されます。

このメソッドは、値を設定する場合に None を返します。

Pin.__call__([x])

Pin オブジェクトは呼び出し可能です。呼び出しメソッドは、ピンの値の設定と取得のための(速い)ショートカットを提供します。動作は Pin.value([x]) と等価です。詳細は Pin.value() を参照してください。

Pin.on()

ピンの出力レベルを "1" に設定します。

Pin.off()

ピンの出力レベルを "0" に設定します。

Pin.irq(handler=None, trigger=Pin.IRQ_FALLING | Pin.IRQ_RISING, *, priority=1, wake=None, hard=False)

ピンのトリガーとなるものがアクティブになったときに呼び出されるように割り込みハンドラを設定します。ピンのモードが Pin.IN の場合、トリガーとなるのはピンの外部値です。ピンのモードが Pin.OUT の場合、トリガーとなるのははピンの出力バッファです。ピンのモードが Pin.OPEN_DRAIN の場合、トリガーとなるのは状態 '0' の出力バッファと状態 '1' の外部ピン値です。

引数は次のとおりです:

  • handler は割り込みがトリガーされたときに呼び出されるオプションの関数です。ハンドラは引数として Pin のインスタンス1つを必ず取る必要があります。

  • trigger は割り込みを生成できるイベントを設定します。指定可能な値は次のとおりです:

    • Pin.IRQ_FALLING は立ち下がりエッジで割り込みを生成します。

    • Pin.IRQ_RISING は立ち上がりエッジで割り込みを生成します。

    • Pin.IRQ_LOW_LEVEL はローレベルで割り込みを生成します。

    • Pin.IRQ_HIGH_LEVEL はハイレベルで割り込みを生成します。

    これらの値を OR 演算して、複数のイベントをトリガーすることができます。

  • priority は割り込みの優先度を設定します。必要な値はポート固有ですが、値が大きいほど常に優先順位が高くなります。

  • wake はこの割り込みがシステムを起床させるパワーモードを選択します。指定できる値は machine.IDLE, machine.SLEEP, machine.DEEPSLEEP です。これらの値は、複数の電源モードでピンが割り込みを生成するように OR 結合することもできます。

  • hard が True の場合、ハードウェア割り込みが使用されます。これにより、ピンの変化と呼び出されるハンドラの間の遅延が小さくなります。ハード割り込みハンドラはメモリを割り当てません。 割り込みハンドラの作成 を参照してください。ポートによってはこの引数がサポートされていないこともあります。

このメソッドはコールバックオブジェクトを返します。

次のメソッドは、コアの Pin API には含まれておらず、特定のポートでのみ実装されています。

Pin.low()

ピンの出力レベルを "0" に設定します。

対応ポート: nrf, rp2, stm32 ポート。

Pin.high()

ピンの出力レベルを "1" に設定します。

対応ポート: nrf, rp2, stm32 ポート。

Pin.mode([mode])

ピンのモードを取得または設定します。引数 mode の詳細についてはコンストラクタのドキュメントを参照してください。

対応ポート: cc3200, stm32 ポート。

Pin.pull([pull])

ピンのプル状態を取得または設定します。引数 pull の詳細についてはコンストラクタのドキュメントを参照してください。

対応ポート: cc3200, stm32 ポート。

Pin.drive([drive])

ピンの駆動強度を取得または設定します。引数 drive の詳細についてはコンストラクタのドキュメントを参照してください。

対応ポート: cc3200 ポート。

Pin.toggle()

出力ピンの "0" と "1" を切り替えます。

対応ポート: mimxrt, samd, rp2 ポート。

定数

次の定数は、ピンオブジェクトを設定するために使われます。すべてのポートですべての定数を使えるわけではないことに注意してください。

Pin.IN
Pin.OUT
Pin.OPEN_DRAIN
Pin.ALT
Pin.ALT_OPEN_DRAIN
Pin.ANALOG

ピンのモードを選択します。

Pin.PULL_UP
Pin.PULL_DOWN
Pin.PULL_HOLD

プルアップ/ダウン抵抗があるかどうかを選択します。プルしないときには None を使ってください。

Pin.DRIVE_0
Pin.DRIVE_1
Pin.DRIVE_2

ピンのドライブ電流値(drive strength)を選択します。ポートに依存して、さらにドライブ定数を定義することができ、数が大きいほどドライブ電流値が強くなります。

Pin.IRQ_FALLING
Pin.IRQ_RISING
Pin.IRQ_LOW_LEVEL
Pin.IRQ_HIGH_LEVEL

IRQ トリガタイプを選択します。