Pin类 – 控制I/O引脚

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

引脚对象通过使用明确指定某个I/O引脚的标识符来构建。每一个标识符都对应到一个引脚,标识符可能是整数、字符串或者一个带有端口和引脚号的元组。

例子:

from machine import Pin

# create an output pin on pin #0 在引脚#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 在引脚#2上创建一个带有上拉电阻的输入引脚
p2 = Pin(2, Pin.IN, Pin.PULL_UP)

# read and print the pin value 读取并打印引脚值
print(p2.value())

# reconfigure pin #0 in input mode 在输入模式下重新配置引脚#0

p0.mode(p0.IN)

# configure an irq callback 配置一个irq回调
p0.irq(lambda p:print(p))

构造函数

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

访问与给定 id 相关联的外围引脚(GPIO引脚)。若在构造函数中给出了额外参数,则该参数用于初始化引脚。任何未指定设置都将保留其先前状态。

参数如下:

  • id 是强制性的,可为一个任意对象。可能的值类型为:int(内部引脚标识符)、str(引脚名称)、元组(一对[端口, 引脚])。
  • mode 指定引脚模式,可为下列之一:
    • Pin.IN - 引脚配置为输入。若将之视为输出,则引脚会处于高阻抗状态。
    • Pin.OUT - 引脚配置为(常规)输出。
    • Pin.OPEN_DRAIN - 引脚配置为开漏输出。开漏输出按照以下方式工作:若输出值设置为0,则引脚处于低电平状态;若输出值设置为1,则引脚处于高阻抗状态。并非所有端口都实现这一模式,某些端口仅在特定引脚实现。
    • Pin.ALT - 引脚设置为执行另一特定于端口的函数。由于引脚以此种方式配置,其他引脚方法(除Pin.init()外)都不适用(调用这些方法将导致未定义的、特定于硬件的结果)。并非所有端口都实现这一模式。
    • Pin.ALT_OPEN_DRAIN - 与 Pin.ALT 相同,但是该引脚配置为开漏。并非所有引脚都实现该模式。
  • pull 指定,若引脚与一个(弱)电阻相连,可为下列之一:
    • None - 无上拉或下拉电阻。
    • Pin.PULL_UP - 启用上拉电阻。
    • Pin.PULL_DOWN - 启用下拉电阻。
  • value 只对Pin.OUT和Pin.OPEN_DRAIN模式有效,且在给定情况下指定初始输出引脚值,否则该外围引脚状态仍未改变。
  • drive 指定引脚的输出功率,可为下列之一: Pin.LOW_POWER, Pin.MED_POWERPin.HIGH_POWER. 当前的实际驱动能力是取决于端口。并非所有端口都实现该参数。
  • alt 为引脚指定一个替代函数,其可取的值取决于端口。该参数仅对 Pin.ALTPin.ALT_OPEN_DRAIN 模式有效。该参数可能用于引脚支持多个备用函数时。若引脚仅支持一个备用函数,则不需要该参数。并非所有端口都实现该参数。

如上所述,引脚类允许为特定引脚设置一个备用函数,但并未在引脚上指定任何进一步的操作。在备用函数模式下配置的引脚通常不用作GPIO, 而是由其他外围硬件驱动。这一注脚唯一支持的操作是通过调用构造函数或 Pin.init() 方法重新初始化。 若在备用函数模式下配置的引脚使用 Pin.INPin.OUTPin.OPEN_DRAIN 重新初始化,该备用函数将会从引脚中删除。

方法

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

使用给定参数将引脚重新初始化。只有指定参数将被设置。其余的外围引脚状态将保持不变。更多参数细节,请参见构造函数文件。

返回 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.value([x])。详情请参见 See Pin.value() .

Pin.mode([mode])
获取或设置引脚模式。
mode 参数的更多细节,请参见构造函数。
Pin.pull([pull])

获取或这是引脚的上拉状态。 pull 参数的更多细节,请参见构造函数文件。

Pin.drive([drive])

获取或设置引脚的驱动强度。 drive 参数的更多细节,请参见构造函数文件。

并非所有版本都实现该方法。

可用性:WiPy。

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

配置一个中断处理程序,当引脚的触发器源处于激活状态时,调用该程序。若引脚模式为 Pin.IN , 则触发器源为引脚上的外部值。若引脚模式为 Pin.OUT ,则触发器源为引脚上的输出缓冲区。 否则,若引脚模式为 Pin.OPEN_DRAIN ,状态为“0”时,触发器源为输出缓冲区;状态为“1”时,触发器源为外部引脚值。

参数为:

  • handler 是中断触发时所调用的可选函数。

  • trigger 配置可产生中断的事件。可能值为:

    • Pin.IRQ_FALLING 下降沿上的中断.
    • Pin.IRQ_RISING 上升沿上的中断.
    • Pin.IRQ_LOW_LEVEL 低电平上的中断.
    • Pin.IRQ_HIGH_LEVEL 高电平上的中断.

    这些值可在多个事件中同时进行“或”运算。

  • priority 设置中断的优先级。可取的值时特定于端口的,但是高数值通常代表高优先级。

  • wake 选择电源模式,在该模式下中断可唤醒系统。可为 machine.IDLE, machine.SLEEPmachine.DEEPSLEEP. 这些值可同时进行“或”运算,以使引脚在多种电源模式下生成中断。

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

常量

以下常量用于配置引脚对象。注意:并非所有常量都在所有移植版本上可用。

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

选择引脚模式。

Pin.PULL_UP
Pin.PULL_DOWN

选择是否有上拉/下拉电阻。若无上拉/下拉电阻,则使用 None 值。

Pin.LOW_POWER
Pin.MED_POWER
Pin.HIGH_POWER

选择引脚的驱动强度。

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

选择IRQ的触发类型。