clase Pin – control de pines de E/S

Un objeto pin se usa para controlar pines de E/S (también conocidos como GPIO - entrada/salida de propósito general). Los objetos pin suelen estar asociados con un pin físico que puede generar una tensión de salida y leer tensiones de entrada. La clase pin dispone de métodos para establecer el modo del pin (IN, OUT, etc.) y métodos para obtener y establecer el nivel lógico digital. Para el control analógico de un pin, consulte la clase ADC.

Un objeto pin se construye usando un identificador que especifica de forma inequívoca un determinado pin de E/S. Las formas permitidas del identificador y el pin físico al que se asigna dicho identificador son específicas de cada puerto. Las posibilidades para el identificador son un entero, una cadena o una tupla con el puerto y el número de pin.

Modelo de uso:

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))

Constructores

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

Accede al periférico del pin (pin GPIO) asociado con el id dado. Si se proporcionan argumentos adicionales en el constructor, se usan para inicializar el pin. Cualquier ajuste que no se especifique permanecerá en su estado anterior.

Los argumentos son:

  • id es obligatorio y puede ser un objeto arbitrario. Entre los posibles tipos de valor están: int (un identificador interno de Pin), str (un nombre de Pin) y tuple (par de [puerto, pin]).

  • mode especifica el modo del pin, que puede ser uno de:

    • Pin.IN - El pin está configurado como entrada. Visto como salida, el pin está en estado de alta impedancia.

    • Pin.OUT - El pin está configurado como salida (normal).

    • Pin.OPEN_DRAIN - El pin está configurado como salida de drenador abierto. La salida de drenador abierto funciona de la siguiente manera: si el valor de salida se establece en 0, el pin está activo a nivel bajo; si el valor de salida es 1, el pin está en estado de alta impedancia. No todos los puertos implementan este modo, o algunos podrían hacerlo solo en ciertos pines.

    • Pin.ALT - El pin está configurado para realizar una función alternativa, que es específica del puerto. Para un pin configurado de esta manera, cualquier otro método de Pin (excepto Pin.init()) no es aplicable (llamarlos producirá un resultado indefinido o específico del hardware). No todos los puertos implementan este modo.

    • Pin.ALT_OPEN_DRAIN - Igual que Pin.ALT, pero el pin se configura como drenador abierto. No todos los puertos implementan este modo.

    • Pin.ANALOG - El pin está configurado como entrada analógica, consulte la clase ADC.

  • pull especifica si el pin tiene una resistencia de pull (débil) conectada, y puede ser uno de:

    • None - Sin resistencia de pull-up o pull-down.

    • Pin.PULL_UP - Resistencia de pull-up habilitada.

    • Pin.PULL_DOWN - Resistencia de pull-down habilitada.

  • value solo es válido para los modos Pin.OUT y Pin.OPEN_DRAIN y especifica el valor inicial de salida del pin si se proporciona; de lo contrario, el estado del periférico del pin permanece sin cambios.

  • drive especifica la potencia de salida del pin y puede ser uno de: Pin.DRIVE_0, Pin.DRIVE_1, etc., aumentando en intensidad de excitación. Las capacidades reales de excitación de corriente dependen del puerto. No todos los puertos implementan este argumento.

  • alt especifica una función alternativa para el pin y los valores que puede tomar dependen del puerto. Este argumento solo es válido para los modos Pin.ALT y Pin.ALT_OPEN_DRAIN. Puede usarse cuando un pin admite más de una función alternativa. Si solo se admite una función alternativa de pin, este argumento no es necesario. No todos los puertos implementan este argumento.

Como se especificó anteriormente, la clase Pin permite establecer una función alternativa para un pin determinado, pero no especifica ninguna otra operación sobre dicho pin. Los pines configurados en modo de función alternativa normalmente no se usan como GPIO, sino que son controlados por otros periféricos de hardware. La única operación admitida sobre dicho pin es reinicializarlo, llamando al constructor o al método Pin.init(). Si un pin configurado en modo de función alternativa se reinicializa con Pin.IN, Pin.OUT o Pin.OPEN_DRAIN, la función alternativa se eliminará del pin.

Métodos

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

Reinicializa el pin usando los parámetros dados. Solo se establecerán los argumentos que se especifiquen. El resto del estado del periférico del pin permanecerá sin cambios. Consulte la documentación del constructor para conocer los detalles de los argumentos.

Devuelve None.

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

Este método permite establecer y obtener el valor del pin, dependiendo de si se proporciona o no el argumento x.

Si se omite el argumento, este método obtiene el nivel lógico digital del pin, devolviendo 0 o 1 correspondientes a señales de tensión baja y alta respectivamente. El comportamiento de este método depende del modo del pin:

  • Pin.IN - El método devuelve el valor de entrada real presente actualmente en el pin.

  • Pin.OUT - El comportamiento y el valor de retorno del método son indefinidos.

  • Pin.OPEN_DRAIN - Si el pin está en estado “0”, entonces el comportamiento y el valor de retorno del método son indefinidos. De lo contrario, si el pin está en estado “1”, el método devuelve el valor de entrada real presente actualmente en el pin.

Si se proporciona el argumento, entonces este método establece el nivel lógico digital del pin. El argumento x puede ser cualquier cosa que se convierta en un booleano. Si se convierte en True, el pin se establece en estado “1”; de lo contrario, se establece en estado “0”. El comportamiento de este método depende del modo del pin:

  • Pin.IN - El valor se almacena en el búfer de salida del pin. El estado del pin no cambia, permanece en estado de alta impedancia. El valor almacenado se activará en el pin tan pronto como se cambie al modo Pin.OUT o Pin.OPEN_DRAIN.

  • Pin.OUT - El búfer de salida se establece inmediatamente en el valor dado.

  • Pin.OPEN_DRAIN - Si el valor es “0”, el pin se establece en un estado de tensión baja. De lo contrario, el pin se establece en estado de alta impedancia.

Al establecer el valor, este método devuelve None.

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

Los objetos Pin son invocables. El método de llamada proporciona un atajo (rápido) para establecer y obtener el valor del pin. Es equivalente a Pin.value([x]). Consulte Pin.value() para más detalles.

on() None

Establece el pin en nivel de salida «1».

off() None

Establece el pin en nivel de salida «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

Configura un manejador de interrupciones para que se llame cuando la fuente de disparo del pin esté activa. Si el modo del pin es Pin.IN, entonces la fuente de disparo es el valor externo en el pin. Si el modo del pin es Pin.OUT, entonces la fuente de disparo es el búfer de salida del pin. De lo contrario, si el modo del pin es Pin.OPEN_DRAIN, entonces la fuente de disparo es el búfer de salida para el estado “0” y el valor externo del pin para el estado “1”.

Los argumentos son:

  • handler es una función opcional que se llamará cuando se dispare la interrupción. El manejador debe tomar exactamente un argumento, que es la instancia de Pin.

  • trigger configura el evento que puede generar una interrupción. Los valores posibles son:

    • Pin.IRQ_FALLING interrupción en flanco descendente.

    • Pin.IRQ_RISING interrupción en flanco ascendente.

    Estos valores pueden combinarse con OR para disparar en múltiples eventos.

  • priority establece el nivel de prioridad de la interrupción. Los valores que puede tomar son específicos del puerto, pero los valores más altos siempre representan prioridades más altas.

  • wake selecciona el modo de energía en el que esta interrupción puede despertar el sistema. No es compatible con ningún puerto de OpenMV; déjelo en el valor predeterminado.

  • hard si es verdadero, se usa una interrupción de hardware. Esto reduce el retardo entre el cambio del pin y la llamada al manejador. Los manejadores de interrupciones de hardware no pueden asignar memoria; consulte Escritura de gestores de interrupciones. No todos los puertos admiten este argumento.

Este método devuelve un objeto callback.

Los siguientes métodos son extensiones a la API básica de Pin. Están agrupados por disponibilidad de puerto.

Métodos disponibles en todos los puertos de OpenMV

low() None

Establece el pin en nivel de salida «0». Alias de off().

high() None

Establece el pin en nivel de salida «1». Alias de on().

solo mimxrt + alif

toggle() None

Alterna el pin de salida – cambia «0» a «1» o viceversa. No está expuesto en STM32 (use value(not value()) si necesita esto en STM32).

solo STM32

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

Obtiene o establece el modo del pin. Consulte la documentación del constructor para conocer los detalles del argumento mode.

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

Obtiene o establece el estado de pull del pin. Consulte la documentación del constructor para conocer los detalles del argumento pull.

Constantes

Las constantes siguientes se usan para configurar objetos Pin mediante el constructor, init() e irq(). Están agrupadas por disponibilidad de puerto.

Constantes disponibles en todos los puertos de OpenMV

IN: int

Modo de pin: entrada digital de alta impedancia.

OUT: int

Modo de pin: salida digital push-pull. Alias de OUT_PP en STM32.

OPEN_DRAIN: int

Modo de pin: salida de drenador abierto. Excitar con 0 lleva la línea a nivel bajo; excitar con 1 la libera a alta impedancia.

PULL_UP: int

Habilita la resistencia interna de pull-up en el pin.

PULL_DOWN: int

Habilita la resistencia interna de pull-down en el pin.

IRQ_FALLING: int

Pase a irq() para disparar en un flanco descendente.

IRQ_RISING: int

Pase a irq() para disparar en un flanco ascendente.

solo STM32

ALT: int

Modo de pin: función alternativa (push-pull). Use con alt= para seleccionar a qué función de periférico se enruta el pin. Alias de AF_PP.

ALT_OPEN_DRAIN: int

Modo de pin: función alternativa (drenador abierto). Alias de AF_OD.

ANALOG: int

Modo de pin: entrada analógica – el búfer de entrada/salida digital se desconecta para que el pin pueda ser controlado por un canal ADC.

AF_PP: int

Modo de función alternativa push-pull (mismo valor que ALT).

AF_OD: int

Modo de función alternativa de drenador abierto (mismo valor que ALT_OPEN_DRAIN).

OUT_PP: int

Modo de salida push-pull (mismo valor que OUT).

OUT_OD: int

Modo de salida de drenador abierto (mismo valor que OPEN_DRAIN).

PULL_NONE: int

Deshabilita la resistencia interna de pull-up / pull-down en el pin.

solo mimxrt

PULL_UP_47K: int

Habilita una resistencia interna de pull-up de ~47 kΩ.

PULL_UP_22K: int

Habilita una resistencia interna de pull-up de ~22 kΩ.

PULL_HOLD: int

Habilita la función bus-keeper / hold del pad – el pin retiene su nivel lógico actual en lugar de quedar flotante.

DRIVE_OFF: int

Deshabilita el excitador de salida del pin.

DRIVE_0: int

Ajuste de menor intensidad de excitación (mayor impedancia en serie) – la referencia R0 (~150 Ω a 3,3 V / 260 Ω a 1,8 V).

DRIVE_1: int

Intensidad de excitación un paso por encima de DRIVE_0.

DRIVE_2: int

Intensidad de excitación dos pasos por encima de DRIVE_0.

DRIVE_3: int

Intensidad de excitación tres pasos por encima de DRIVE_0 (predeterminado para pines de salida).

DRIVE_4: int

Intensidad de excitación cuatro pasos por encima de DRIVE_0.

DRIVE_5: int

Intensidad de excitación cinco pasos por encima de DRIVE_0.

DRIVE_6: int

Ajuste de mayor intensidad de excitación.