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
idfornecido. 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]).modeespecifica 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 (excetoPin.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 quePin.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 classeADC.
pullespecifica 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.driveespecifica 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.altespecifica uma função alternativa para o pino, e os valores que ele pode assumir dependem da porta. Esse argumento é válido apenas para os modosPin.ALTePin.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 comPin.IN,Pin.OUTouPin.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
xser 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
xpode ser qualquer coisa que seja convertida em um booleano. Se for convertido emTrue, 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 modoPin.OUTouPin.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.
- 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 forPin.OUT, a fonte de gatilho é o buffer de saída do pino. Caso contrário, se o modo do pino forPin.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 dePin.triggerconfigura o evento que pode gerar uma interrupção. Os valores possíveis são:Pin.IRQ_FALLINGinterrupção na borda de descida.Pin.IRQ_RISINGinterrupção na borda de subida.
Esses valores podem ser combinados com OR para disparar em múltiplos eventos.
prioritydefine 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.wakeseleciona 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.hardse 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¶
apenas mimxrt + alif¶
apenas STM32¶
Constantes¶
As constantes abaixo são usadas para configurar objetos
Pinpor meio do construtor, deinit()e deirq(). Elas estão agrupadas por disponibilidade nas portas.Constantes disponíveis em todas as portas OpenMV¶
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 deAF_PP.
- 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_OD: int¶
Modo de função alternativa em dreno aberto (mesmo valor que
ALT_OPEN_DRAIN).
- OUT_OD: int¶
Modo de saída em dreno aberto (mesmo valor que
OPEN_DRAIN).
apenas mimxrt¶
- 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.