classe Pin – controla pinos de E/S

Um objeto pin é usado para controlar pinos de E/S (também conhecidos como GPIO - entrada/saída de uso geral). Objetos pin geralmente estão associados a um pino físico que pode fornecer uma tensão de saída e ler tensões de entrada. A classe pin possui métodos para definir o modo do pino (IN, OUT, etc.) e métodos para obter e definir o nível lógico digital. Para o controle analógico de um pino, consulte a classe ADC.

Um objeto pin é construído usando um identificador que especifica de forma inequívoca um determinado pino de E/S. As formas permitidas do identificador e o pino físico ao qual o identificador é mapeado são específicas de cada porta. As possibilidades para o identificador são um inteiro, uma string ou uma tupla com a porta e o número do pino.

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

Construtores

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

Acessa o periférico do pino (pino GPIO) associado ao id fornecido. Se argumentos adicionais forem passados ao construtor, eles serão usados para inicializar o pino. Quaisquer configurações que não forem especificadas permanecerão em seu estado anterior.

Os argumentos são:

  • id é obrigatório e pode ser um objeto arbitrário. Entre os tipos de valor possíveis estão: int (um identificador interno de Pin), str (um nome de Pin) e tupla (par de [porta, pino]).

  • mode especifica o modo do pino, que pode ser um dos seguintes:

    • Pin.IN - O pino está configurado para entrada. Se visto como uma saída, o pino fica em estado de alta impedância.

    • Pin.OUT - O pino está configurado para saída (normal).

    • Pin.OPEN_DRAIN - O pino está configurado para saída em dreno aberto (open-drain). A saída em dreno aberto funciona da seguinte maneira: se o valor de saída for definido como 0, o pino fica ativo em nível baixo; se o valor de saída for 1, o pino fica em estado de alta impedância. Nem todas as portas implementam esse modo, ou algumas podem implementá-lo apenas em certos pinos.

    • Pin.ALT - O pino está configurado para executar uma função alternativa, que é específica de cada porta. Para um pino configurado dessa forma, quaisquer outros métodos de Pin (exceto Pin.init()) não são aplicáveis (chamá-los levará a um resultado indefinido ou específico do hardware). Nem todas as portas implementam esse modo.

    • Pin.ALT_OPEN_DRAIN - O mesmo que Pin.ALT, mas o pino é configurado como dreno aberto. Nem todas as portas implementam esse modo.

    • Pin.ANALOG - O pino está configurado para entrada analógica, consulte a classe ADC.

  • pull especifica se o pino tem um resistor de pull (fraco) conectado, e pode ser um dos seguintes:

    • None - Sem resistor de pull up ou pull down.

    • Pin.PULL_UP - Resistor de pull up habilitado.

    • Pin.PULL_DOWN - Resistor de pull down habilitado.

  • value é válido apenas para os modos Pin.OUT e Pin.OPEN_DRAIN e especifica o valor inicial de saída do pino, se fornecido; caso contrário, o estado do periférico do pino permanece inalterado.

  • drive especifica a potência de saída do pino e pode ser um dos seguintes: Pin.DRIVE_0, Pin.DRIVE_1, etc., aumentando a intensidade de acionamento. As capacidades reais de fornecimento de corrente dependem da porta. Nem todas as portas implementam esse argumento.

  • alt especifica uma função alternativa para o pino, e os valores que ele pode assumir dependem da porta. Esse argumento é válido apenas para os modos Pin.ALT e Pin.ALT_OPEN_DRAIN. Ele pode ser usado quando um pino oferece suporte a mais de uma função alternativa. Se apenas uma função alternativa de pino for suportada, esse argumento não é necessário. Nem todas as portas implementam esse argumento.

Como especificado acima, a classe Pin permite definir uma função alternativa para um pino específico, mas não especifica nenhuma outra operação sobre tal pino. Pinos configurados no modo de função alternativa geralmente não são usados como GPIO, sendo, em vez disso, acionados por outros periféricos de hardware. A única operação suportada em tal pino é a reinicialização, chamando o construtor ou o método Pin.init(). Se um pino configurado no modo de função alternativa for reinicializado com Pin.IN, Pin.OUT ou Pin.OPEN_DRAIN, a função alternativa será removida do pino.

Métodos

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

Reinicializa o pino usando os parâmetros fornecidos. Apenas os argumentos que forem especificados serão definidos. O restante do estado do periférico do pino permanecerá inalterado. Consulte a documentação do construtor para detalhes sobre os argumentos.

Retorna None.

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

Este método permite definir e obter o valor do pino, dependendo de o argumento x ser fornecido ou não.

Se o argumento for omitido, este método obtém o nível lógico digital do pino, retornando 0 ou 1 correspondentes aos sinais de tensão baixa e alta, respectivamente. O comportamento deste método depende do modo do pino:

  • Pin.IN - O método retorna o valor de entrada real presente no momento no pino.

  • Pin.OUT - O comportamento e o valor de retorno do método são indefinidos.

  • Pin.OPEN_DRAIN - Se o pino estiver no estado ‘0’, o comportamento e o valor de retorno do método são indefinidos. Caso contrário, se o pino estiver no estado ‘1’, o método retorna o valor de entrada real presente no momento no pino.

Se o argumento for fornecido, este método define o nível lógico digital do pino. O argumento x pode ser qualquer coisa que seja convertida em um booleano. Se for convertido em True, o pino é definido para o estado ‘1’; caso contrário, é definido para o estado ‘0’. O comportamento deste método depende do modo do pino:

  • Pin.IN - O valor é armazenado no buffer de saída do pino. O estado do pino não muda, permanecendo no estado de alta impedância. O valor armazenado se tornará ativo no pino assim que ele for alterado para o modo Pin.OUT ou Pin.OPEN_DRAIN.

  • Pin.OUT - O buffer de saída é definido para o valor fornecido imediatamente.

  • Pin.OPEN_DRAIN - Se o valor for ‘0’, o pino é definido para um estado de tensão baixa. Caso contrário, o pino é definido para o estado de alta impedância.

Ao definir o valor, este método retorna None.

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

Objetos pin são chamáveis. O método de chamada fornece um atalho (rápido) para definir e obter o valor do pino. Ele é equivalente a Pin.value([x]). Consulte Pin.value() para mais detalhes.

on() None

Define o pino para o nível de saída “1”.

off() None

Define o pino para o nível de saída “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 um manipulador de interrupção a ser chamado quando a fonte de gatilho do pino estiver ativa. Se o modo do pino for Pin.IN, a fonte de gatilho é o valor externo no pino. Se o modo do pino for Pin.OUT, a fonte de gatilho é o buffer de saída do pino. Caso contrário, se o modo do pino for Pin.OPEN_DRAIN, a fonte de gatilho é o buffer de saída para o estado ‘0’ e o valor externo do pino para o estado ‘1’.

Os argumentos são:

  • handler é uma função opcional a ser chamada quando a interrupção for disparada. O manipulador deve receber exatamente um argumento, que é a instância de Pin.

  • trigger configura o evento que pode gerar uma interrupção. Os valores possíveis são:

    • Pin.IRQ_FALLING interrupção na borda de descida.

    • Pin.IRQ_RISING interrupção na borda de subida.

    Esses valores podem ser combinados com OR para disparar em múltiplos eventos.

  • priority define o nível de prioridade da interrupção. Os valores que ele pode assumir são específicos de cada porta, mas valores mais altos sempre representam prioridades mais altas.

  • wake seleciona o modo de energia no qual esta interrupção pode acordar o sistema. Não é suportado em nenhuma porta OpenMV; deixe no valor padrão.

  • hard se for verdadeiro, uma interrupção de hardware é usada. Isso reduz o atraso entre a mudança no pino e a chamada do manipulador. Manipuladores de interrupção de hardware não podem alocar memória; consulte Escrevendo manipuladores de interrupção. Nem todas as portas suportam esse argumento.

Este método retorna um objeto callback.

Os métodos a seguir são extensões da API principal de Pin. Eles estão agrupados por disponibilidade nas portas.

Métodos disponíveis em todas as portas OpenMV

low() None

Define o pino para o nível de saída “0”. Alias de off().

high() None

Define o pino para o nível de saída “1”. Alias de on().

apenas mimxrt + alif

toggle() None

Alterna o pino de saída – inverte “0” para “1” ou vice-versa. Não exposto no STM32 (use value(not value()) se você precisar disso no STM32).

apenas STM32

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

Obtém ou define o modo do pino. Consulte a documentação do construtor para detalhes sobre o argumento mode.

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

Obtém ou define o estado de pull do pino. Consulte a documentação do construtor para detalhes sobre o argumento pull.

Constantes

As constantes abaixo são usadas para configurar objetos Pin por meio do construtor, de init() e de irq(). Elas estão agrupadas por disponibilidade nas portas.

Constantes disponíveis em todas as portas OpenMV

IN: int

Modo do pino: entrada digital de alta impedância.

OUT: int

Modo do pino: saída digital push-pull. Alias de OUT_PP no STM32.

OPEN_DRAIN: int

Modo do pino: saída em dreno aberto (open-drain). Acionar 0 puxa a linha para nível baixo; acionar 1 a libera para alta impedância.

PULL_UP: int

Habilita o resistor interno de pull-up no pino.

PULL_DOWN: int

Habilita o resistor interno de pull-down no pino.

IRQ_FALLING: int

Passe para irq() para disparar em uma borda de descida.

IRQ_RISING: int

Passe para irq() para disparar em uma borda de subida.

apenas STM32

ALT: int

Modo do pino: função alternativa (push-pull). Use com alt= para selecionar para qual função de periférico o pino é roteado. Alias de AF_PP.

ALT_OPEN_DRAIN: int

Modo do pino: função alternativa (dreno aberto). Alias de AF_OD.

ANALOG: int

Modo do pino: entrada analógica – o buffer de entrada/saída digital é desconectado para que o pino possa ser acionado por um canal ADC.

AF_PP: int

Modo de função alternativa push-pull (mesmo valor que ALT).

AF_OD: int

Modo de função alternativa em dreno aberto (mesmo valor que ALT_OPEN_DRAIN).

OUT_PP: int

Modo de saída push-pull (mesmo valor que OUT).

OUT_OD: int

Modo de saída em dreno aberto (mesmo valor que OPEN_DRAIN).

PULL_NONE: int

Desabilita o resistor interno de pull-up / pull-down no pino.

apenas mimxrt

PULL_UP_47K: int

Habilita um resistor interno de pull-up de ~47 kΩ.

PULL_UP_22K: int

Habilita um resistor interno de pull-up de ~22 kΩ.

PULL_HOLD: int

Habilita a função de bus-keeper / retenção do pad – o pino trava o seu nível lógico atual em vez de ficar flutuante.

DRIVE_OFF: int

Desabilita o driver de saída do pino.

DRIVE_0: int

Configuração de menor intensidade de acionamento (maior impedância em série) – a referência R0 (~150 Ω a 3,3 V / 260 Ω a 1,8 V).

DRIVE_1: int

Intensidade de acionamento um nível acima de DRIVE_0.

DRIVE_2: int

Intensidade de acionamento dois níveis acima de DRIVE_0.

DRIVE_3: int

Intensidade de acionamento três níveis acima de DRIVE_0 (padrão para pinos de saída).

DRIVE_4: int

Intensidade de acionamento quatro níveis acima de DRIVE_0.

DRIVE_5: int

Intensidade de acionamento cinco níveis acima de DRIVE_0.

DRIVE_6: int

Configuração de maior intensidade de acionamento.