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
iddado. 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:
ides 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]).modeespecifica 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 (exceptoPin.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 quePin.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 claseADC.
pullespecifica 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.
valuesolo 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.driveespecifica 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.altespecifica una función alternativa para el pin y los valores que puede tomar dependen del puerto. Este argumento solo es válido para los modosPin.ALTyPin.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 conPin.IN,Pin.OUToPin.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
xpuede ser cualquier cosa que se convierta en un booleano. Si se convierte enTrue, 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 modoPin.OUToPin.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.
- 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 esPin.OUT, entonces la fuente de disparo es el búfer de salida del pin. De lo contrario, si el modo del pin esPin.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:
handleres una función opcional que se llamará cuando se dispare la interrupción. El manejador debe tomar exactamente un argumento, que es la instancia dePin.triggerconfigura el evento que puede generar una interrupción. Los valores posibles son:Pin.IRQ_FALLINGinterrupción en flanco descendente.Pin.IRQ_RISINGinterrupción en flanco ascendente.
Estos valores pueden combinarse con OR para disparar en múltiples eventos.
priorityestablece 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.wakeselecciona 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.hardsi 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¶
solo mimxrt + alif¶
solo STM32¶
Constantes¶
Las constantes siguientes se usan para configurar objetos
Pinmediante el constructor,init()eirq(). Están agrupadas por disponibilidad de puerto.Constantes disponibles en todos los puertos de OpenMV¶
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 deAF_PP.
- 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_OD: int¶
Modo de función alternativa de drenador abierto (mismo valor que
ALT_OPEN_DRAIN).
- OUT_OD: int¶
Modo de salida de drenador abierto (mismo valor que
OPEN_DRAIN).
solo mimxrt¶
- 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_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).