class Pin – 控制I/O引脚

Pin 对象用于控制 I/O 引脚(也称为 GPIO - 通用输入/输出)。Pin 对象通常与可以驱动输出电压和读取输入电压的物理引脚相关联。Pin 类有方法设置引脚的模式(输入、输出等)以及获取和设置数字逻辑电平的方法。对于引脚的模拟控制,请参见 ADC 类。

通过使用明确指定某个 I/O 引脚的标识符来构造 Pin 对象。标识符的允许形式和标识符映射到的物理引脚是特定于移植版本的。标识符的可能形式包括整数、字符串或带有移植版本和引脚号的元组。

使用模型:

from machine import Pin

# create an output pin on pin #0
p0 = Pin(0, Pin.OUT)

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

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

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

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

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

构造函数

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

使用给定的 id 访问与之关联的引脚外设(GPIO 引脚)。如果在构造函数中给出了其他参数,则使用它们来初始化引脚。任何未指定的设置将保持其之前的状态。

参数包括:

  • id 是必须的,可以是任意对象。可能的值类型包括:int(内部 Pin 标识符)、str(Pin 名称)和 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_UP - 启用下拉电阻。

  • 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,则该引脚将移除替代功能。

方法

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.OUTPin.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 实例。

  • trigger 配置可以生成中断的事件。可能的值包括:

    • Pin.IRQ_FALLING 下降沿中断。

    • Pin.IRQ_RISING 上升沿中断。

    • Pin.IRQ_LOW_LEVEL 低电平中断。

    • Pin.IRQ_HIGH_LEVEL 高电平中断。

    这些值可以通过 OR 运算组合在一起以触发多个事件。

  • priority 设置中断的优先级。它可以取的值是特定于移植版本的,但更高的值总是代表更高的优先级。

  • wake 选择此中断可以唤醒系统的电源模式。它可以是 machine.IDLEmachine.SLEEPmachine.DEEPSLEEP。这些值也可以通过 OR 运算组合在一起,使一个引脚在多个电源模式中生成中断。

  • hard 如果为真,则使用硬件中断。这减少了引脚变化和调用处理程序之间的延迟。硬中断处理程序不得分配内存;参见 编写中断处理程序。并非所有移植版本都支持此参数。

此方法返回一个回调对象。

以下方法不是核心 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对象。请注意,并非所有常量在所有移植版本上都可用。

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

选择引脚的驱动强度。一个移植版本可以定义额外的驱动常量,其编号随驱动强度的增加而增加。

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

选择 IRQ 触发类型。