class Pin -- 控制 I/O 接腳

接腳物件用於控制 I/O 接腳(也稱為 GPIO,即通用輸入/輸出)。接腳物件通常與一個實體接腳相關聯,該接腳可以驅動輸出電壓並讀取輸入電壓。Pin 類別提供了設定接腳模式(IN、OUT 等)的方法,以及取得和設定數位邏輯位準的方法。若要對接腳進行類比控制,請參閱 ADC 類別。

接腳物件是透過一個明確指定某個 I/O 接腳的識別碼來建構的。識別碼允許的格式以及識別碼所對應的實體接腳是依連接埠而定的。識別碼可以是整數、字串,或是包含連接埠與接腳編號的 tuple。

使用模型:

from machine import Pin

# create an output pin on header pin P0
p0 = Pin("P0", Pin.OUT)

# set the value low then high
p0.value(0)
p0.value(1)

# create an input pin on header pin P2, with a pull-up resistor
p2 = Pin("P2", Pin.IN, Pin.PULL_UP)

# read and print the pin value
print(p2.value())

# reconfigure P0 in input mode with a pull-down resistor
p0.init(p0.IN, p0.PULL_DOWN)

# install an IRQ callback
p0.irq(lambda p: print(p))

建構函式

class machine.Pin(id: int | str, mode: int = -1, pull: int = -1, *, value: Any = None, drive: int = 0, alt: int = -1)

存取與給定 id 相關聯的接腳周邊裝置(GPIO 接腳)。如果建構函式中提供了額外的引數,則會使用這些引數來初始化接腳。任何未指定的設定都會維持其先前的狀態。

引數為:

  • id 為必填,可以是任意物件。可能的值類型包括:int(內部接腳識別碼)、str(接腳名稱)以及 tuple([port, pin] 的配對)。

  • 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_0Pin.DRIVE_1 等,驅動強度依序遞增。實際的電流驅動能力依連接埠而定。並非所有連接埠都實作此引數。

  • alt 為接腳指定一個替代功能,其可取的值依連接埠而定。此引數僅對 Pin.ALTPin.ALT_OPEN_DRAIN 模式有效。當某個接腳支援多個替代功能時可使用此引數。若僅支援一個接腳替代功能,則不需要此引數。並非所有連接埠都實作此引數。

如上所述,Pin 類別允許為特定接腳設定替代功能,但並未指定對此類接腳的任何後續操作。設定為替代功能模式的接腳通常不會用作 GPIO,而是由其他硬體周邊裝置驅動。對此類接腳唯一支援的操作是重新初始化,方法是呼叫建構函式或 Pin.init() 方法。若一個設定為替代功能模式的接腳以 Pin.INPin.OUTPin.OPEN_DRAIN 重新初始化,則該替代功能將從接腳上移除。

方法

init(mode: int = -1, pull: int = -1, *, value: Any = None, drive: int = 0, alt: int = -1) None

使用給定的參數重新初始化接腳。只會設定那些有指定的引數,其餘的接腳周邊裝置狀態將維持不變。引數的詳細資訊請參閱建構函式文件。

回傳 None

value(x: Any = None, /) int | None

此方法可設定及取得接腳的值,取決於是否提供引數 x

若省略引數,則此方法取得接腳的數位邏輯位準,回傳 0 或 1,分別對應低電壓與高電壓訊號。此方法的行為取決於接腳的模式:

  • Pin.IN - 此方法回傳接腳上目前實際存在的輸入值。

  • Pin.OUT - 此方法的行為與回傳值是未定義的。

  • Pin.OPEN_DRAIN - 若接腳處於狀態「0」,則此方法的行為與回傳值是未定義的。否則,若接腳處於狀態「1」,則此方法回傳接腳上目前實際存在的輸入值。

若提供引數,則此方法設定接腳的數位邏輯位準。引數 x 可以是任何能轉換為布林值的東西。若轉換為 True,接腳設為狀態「1」,否則設為狀態「0」。此方法的行為取決於接腳的模式:

  • Pin.IN - 該值儲存在接腳的輸出緩衝區中。接腳狀態不會改變,仍維持在高阻抗狀態。一旦接腳變更為 Pin.OUTPin.OPEN_DRAIN 模式,儲存的值便會在接腳上生效。

  • Pin.OUT - 輸出緩衝區立即設為給定的值。

  • Pin.OPEN_DRAIN - 若值為「0」,接腳設為低電壓狀態。否則接腳設為高阻抗狀態。

設定值時,此方法回傳 None

__call__(x: Any = None, /) int | None

接腳物件是可呼叫的。呼叫方法提供了一個(快速的)捷徑來設定及取得接腳的值。它等同於 Pin.value([x])。詳細資訊請參閱 Pin.value()

on() None

將接腳設為「1」輸出位準。

off() None

將接腳設為「0」輸出位準。

irq(handler: Callable[[Pin], None] | None = None, trigger: int = Pin.IRQ_FALLING | Pin.IRQ_RISING, *, priority: int = 1, wake: int | None = None, hard: bool = False) None

設定一個中斷處理常式,在接腳的觸發來源為作用狀態時被呼叫。若接腳模式為 Pin.IN,則觸發來源為接腳上的外部值。若接腳模式為 Pin.OUT,則觸發來源為接腳的輸出緩衝區。否則,若接腳模式為 Pin.OPEN_DRAIN,則狀態「0」的觸發來源為輸出緩衝區,狀態「1」的觸發來源為外部接腳值。

引數為:

  • handler 為選用函式,當中斷觸發時會被呼叫。處理常式必須恰好接受一個引數,即 Pin 實例。

  • trigger 設定可產生中斷的事件。可能的值為:

    • Pin.IRQ_FALLING 在下降緣時中斷。

    • Pin.IRQ_RISING 在上升緣時中斷。

    這些值可以用 OR 運算組合在一起,以在多個事件時觸發。

  • priority 設定中斷的優先順序層級。其可取的值依連接埠而定,但較高的值總是代表較高的優先順序。

  • wake 選擇此中斷能喚醒系統的電源模式。任何 OpenMV 連接埠均不支援;請保留為預設值。

  • hard 若為 true 則使用硬體中斷。這會縮短接腳變更與處理常式被呼叫之間的延遲。硬體中斷處理常式不可配置記憶體;請參閱 撰寫中斷處理常式。並非所有連接埠都支援此引數。

此方法回傳一個回呼物件。

下列方法是核心 Pin API 的擴充。它們依連接埠的可用性分組。

所有 OpenMV 連接埠皆可用的方法

low() None

將接腳設為「0」輸出位準。為 off() 的別名。

high() None

將接腳設為「1」輸出位準。為 on() 的別名。

僅限 mimxrt + alif

toggle() None

切換輸出接腳——將「0」翻轉為「1」或反之。在 STM32 上未公開(若您在 STM32 上需要此功能,請使用 value(not value()))。

僅限 STM32

mode(mode: int | None = None, /) int
mode(mode: int, /) None

取得或設定接腳模式。mode 引數的詳細資訊請參閱建構函式文件。

pull(pull: int | None = None, /) int
pull(pull: int, /) None

取得或設定接腳的上拉/下拉狀態。pull 引數的詳細資訊請參閱建構函式文件。

常數

下列常數用於透過建構函式、init()irq() 來設定 Pin 物件。它們依連接埠的可用性分組。

所有 OpenMV 連接埠皆可用的常數

IN: int

接腳模式:高阻抗數位輸入。

OUT: int

接腳模式:推挽式數位輸出。在 STM32 上為 OUT_PP 的別名。

OPEN_DRAIN: int

接腳模式:開汲極輸出。驅動 0 會將線路拉低;驅動 1 則將其釋放至高阻抗。

PULL_UP: int

啟用接腳上的內部上拉電阻。

PULL_DOWN: int

啟用接腳上的內部下拉電阻。

IRQ_FALLING: int

傳遞給 irq() 以在下降緣時觸發。

IRQ_RISING: int

傳遞給 irq() 以在上升緣時觸發。

僅限 STM32

ALT: int

接腳模式:替代功能(推挽式)。與 alt= 搭配使用以選擇接腳被路由到哪個周邊功能。為 AF_PP 的別名。

ALT_OPEN_DRAIN: int

接腳模式:替代功能(開汲極)。為 AF_OD 的別名。

ANALOG: int

接腳模式:類比輸入——數位輸入/輸出緩衝區被斷開,使接腳可由 ADC 通道驅動。

AF_PP: int

替代功能推挽式模式(與 ALT 值相同)。

AF_OD: int

替代功能開汲極模式(與 ALT_OPEN_DRAIN 值相同)。

OUT_PP: int

推挽式輸出模式(與 OUT 值相同)。

OUT_OD: int

開汲極輸出模式(與 OPEN_DRAIN 值相同)。

PULL_NONE: int

停用接腳上的內部上拉/下拉電阻。

僅限 mimxrt

PULL_UP_47K: int

啟用約 47 kΩ 的內部上拉電阻。

PULL_UP_22K: int

啟用約 22 kΩ 的內部上拉電阻。

PULL_HOLD: int

啟用接腳焊墊的匯流排保持器/保持功能——接腳會閂鎖其目前的邏輯位準,而非浮動。

DRIVE_OFF: int

停用接腳輸出驅動器。

DRIVE_0: int

最低驅動強度設定(最高串聯阻抗)——R0 參考值(在 3.3 V 時約 150 Ω / 在 1.8 V 時約 260 Ω)。

DRIVE_1: int

DRIVE_0 高一級的驅動強度。

DRIVE_2: int

DRIVE_0 高兩級的驅動強度。

DRIVE_3: int

DRIVE_0 高三級的驅動強度(輸出接腳的預設值)。

DRIVE_4: int

DRIVE_0 高四級的驅動強度。

DRIVE_5: int

DRIVE_0 高五級的驅動強度。

DRIVE_6: int

最強驅動強度設定。