class Pin -- I/O ピンの制御

Pin オブジェクトは STM32 上の単一の GPIO を表します。ピンのモード(入力、出力、代替機能、アナログ)やプル抵抗を設定し、デジタルレベルを読み取ったり駆動したりするためのメソッドを提供します。アナログサンプリングについては pyb.ADC を、代替機能の列挙については PinAF を参照してください。

すべてのヘッダーピンは pyb.Pin.board.<name> として事前定義されています。ほとんどの STM32 OpenMV Cam は I/O ヘッダーピン P0 ... P9 を公開しており、OpenMV Cam N6 は P18 までの追加ピンを公開しています:

p0 = pyb.Pin.board.P0
g = pyb.Pin(pyb.Pin.board.P0, pyb.Pin.IN)

基盤となる STM32 のポート/ピンは、pyb.Pin.cpu.<name> を通じて直接アドレス指定することもできます。名前はポートを表す文字に続けてピン番号を付けたものです(例: pyb.Pin.cpu.A0)。各 OpenMV ヘッダーピンと CPU ピンの対応関係はボードによって固定されています。

ピンは文字列名で選択することもできます:

g = pyb.Pin("P0", pyb.Pin.OUT_PP)

ユーザー定義の名前は Pin.dict() で追加できます:

MyMapperDict = {"LeftMotorDir": pyb.Pin.cpu.A0}
pyb.Pin.dict(MyMapperDict)
g = pyb.Pin("LeftMotorDir", pyb.Pin.OUT_OD)

そして取得して問い合わせることができます:

pin = pyb.Pin("LeftMotorDir")

あるいは、Pin.mapper() でカスタムマッピング関数をインストールすることもできます:

def MyMapper(pin_name):
    if pin_name == "LeftMotorDir":
        return pyb.Pin.cpu.A0

pyb.Pin.mapper(MyMapper)

そのため、pyb.Pin("LeftMotorDir", pyb.Pin.OUT_PP) の呼び出しは "LeftMotorDir" を直接マッパーに渡します。

名前が物理ピンにマッピングされる方法は、次の順序で決定されます:

  1. Pin オブジェクトが直接渡される。

  2. ユーザー指定のマッパー関数がピンを返す。

  3. ユーザー指定の辞書に一致するキーが含まれている。

  4. 文字列がボードのピン名(P0P1、...)に一致する。

  5. 文字列が CPU のポート/ピン名(A0B7、...)に一致する。

pyb.Pin.debug(True) を呼び出すと、各オブジェクトがどのようにピンにマッピングされるかについての診断情報を表示します。

コンストラクタ

class pyb.Pin(id: str | Pin, *args, **kwargs)

指定された id に関連付けられた新しい Pin オブジェクトを作成します。追加の引数が指定された場合は、ピンを設定するために Pin.init() に転送されます。

クラスメソッド

classmethod debug(state: bool | None = None) bool | None

デバッグ状態を取得または設定します(オンまたはオフを表す True または False)。

classmethod dict(dict: dict | None = None) dict | None

ピンマッパー辞書を取得または設定します。

classmethod mapper(fun: Callable[[str], Pin] | None = None) Callable[[str], Pin] | None

ピンマッパー関数を取得または設定します。

メソッド

init(mode: int, pull: int = Pin.PULL_NONE, *, value: int | None = None, alt: int | str = -1) None

ピンを初期化します:

  • mode には次のいずれかを指定できます:

    • Pin.IN - ピンを入力用に設定します;

    • Pin.OUT_PP - ピンをプッシュプル制御の出力用に設定します;

    • Pin.OUT_OD - ピンをオープンドレイン制御の出力用に設定します;

    • Pin.ALT - ピンを代替機能(入力または出力)用に設定します;

    • Pin.AF_PP - ピンをプッシュプルの代替機能用に設定します;

    • Pin.AF_OD - ピンをオープンドレインの代替機能用に設定します;

    • Pin.ANALOG - ピンをアナログ用に設定します。

  • pull には次のいずれかを指定できます:

    • Pin.PULL_NONE - プルアップまたはプルダウン抵抗なし;

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

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

    ピンに Pin.PULL_UP または Pin.PULL_DOWN のプルモードが有効になっている場合、そのピンは内部抵抗(通常は数十 kOhm -- 使用している OpenMV Cam の STM32 データシートの電気的特性を参照)を通じてそれぞれ 3V3 または GND にプルされます。

  • value が None でない場合、ピンを有効にする前にポートの出力値を設定します。

  • alt は、モードが Pin.ALTPin.AF_PP または Pin.AF_OD のときに、ピンに関連付けられた代替機能の 1 つのインデックスまたは名前を設定するために使用できます。この引数は以前は af と呼ばれており、必要であれば引き続き使用できます。

value(value: Any | None = None) int | None

ピンのデジタル論理レベルを取得または設定します:

  • 引数なしの場合、ピンの論理レベルに応じて 0 または 1 を返します。

  • value が指定された場合、ピンの論理レベルを設定します。value にはブール値に変換できる任意の値を指定できます。True に変換される場合はピンが High に設定され、それ以外の場合は Low に設定されます。

__str__() str

ピンオブジェクトを説明する文字列を返します。

af() int

ピンに現在設定されている代替機能を返します。返される整数は、init 関数の af 引数に許可された定数のいずれかと一致します。

af_list() List[PinAF]

このピンで利用可能な代替機能の配列を返します。

gpio() int

このピンに関連付けられた GPIO ブロックのベースアドレスを返します。

mode() int

ピンに現在設定されているモードを返します。返される整数は、init 関数の mode 引数に許可された定数のいずれかと一致します。

name() str

ピン名を取得します。

names() List[str]

このピンの cpu 名とボード名を返します。

pin() int

ピン番号を取得します。

port() int

ピンのポートを取得します。

pull() int

ピンに現在設定されているプルを返します。返される整数は、init 関数の pull 引数に許可された定数のいずれかと一致します。

定数

IN: int

ピンをデジタル入力(ハイインピーダンス)として設定します。

OUT_PP: int

ピンをプッシュプルドライバを備えたデジタル出力として設定します。

OUT_OD: int

ピンをオープンドレインドライバを備えたデジタル出力として設定します。

ANALOG: int

ピンをアナログ入力として設定します(例: ADC で使用する場合)。

ALT: int

ピンを代替機能(入力または出力)として設定します。

AF_PP: int

ピンをプッシュプルドライバを備えた代替機能として設定します。

AF_OD: int

ピンをオープンドレインドライバを備えた代替機能として設定します。

PULL_NONE: int

ピンのプルアップ抵抗とプルダウン抵抗の両方を無効にします。

PULL_UP: int

ピンの内部プルアップ抵抗を有効にします。

PULL_DOWN: int

ピンの内部プルダウン抵抗を有効にします。