classe Pin – controlar pinos I/O¶
Um objeto pin é utilizado para controlar pinos I/O (também conhecidos como GPIO - entrada/saída de uso geral). Os objetos pin estão normalmente associados a um pino físico que pode conduzir uma tensão de saída e ler tensões de entrada. A classe pin tem métodos para definir o modo do pino (IN, OUT, etc.) e métodos para obter e definir o nível de lógica digital. Para controlo analógico de um pino, consulte a classe ADC.
Um objeto pin é construído utilizando um identificador que especifica inequivocamente um determinado pino I/O. As formas permitidas do identificador e o pino físico ao qual o identificador corresponde são específicos do porto. As possibilidades para o identificador são um inteiro, uma string ou um tuplo com o porto e o número do pino.
Modelo de utilização:
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)¶
Acede ao periférico pin (pino GPIO) associado ao
idfornecido. Se forem fornecidos argumentos adicionais no construtor, estes são utilizados para inicializar o pino. Quaisquer definições não especificadas permanecerão no 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 tuple (par de [porto, 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 encontra-se 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 open-drain. A saída open-drain funciona da seguinte forma: se o valor de saída for definido como 0, o pino fica ativo a nível baixo; se o valor de saída for 1, o pino fica em estado de alta impedância. Nem todos os portos implementam este modo, ou alguns podem fazê-lo apenas em certos pinos.Pin.ALT- O pino está configurado para executar uma função alternativa, específica do porto. Para um pino configurado desta forma, quaisquer outros métodos Pin (excetoPin.init()) não são aplicáveis (chamá-los levará a um resultado indefinido ou específico do hardware). Nem todos os portos implementam este modo.Pin.ALT_OPEN_DRAIN- O mesmo quePin.ALT, mas o pino está configurado como open-drain. Nem todos os portos implementam este modo.Pin.ANALOG- O pino está configurado para entrada analógica; consulte a classeADC.
pullespecifica se o pino tem um resistor de pull (fraco) ligado, e pode ser um dos seguintes:None- Sem resistor de pull-up ou pull-down.Pin.PULL_UP- Resistor de pull-up ativado.Pin.PULL_DOWN- Resistor de pull-down ativado.
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 pin permanece inalterado.driveespecifica a potência de saída do pino e pode ser um dos seguintes:Pin.DRIVE_0,Pin.DRIVE_1, etc., com resistência de condução crescente. As capacidades de corrente reais dependem do porto. Nem todos os portos implementam este argumento.altespecifica uma função alternativa para o pino e os valores que pode assumir dependem do porto. Este argumento é válido apenas para os modosPin.ALTePin.ALT_OPEN_DRAIN. Pode ser utilizado quando um pino suporta mais do que uma função alternativa. Se apenas uma função alternativa do pino for suportada, este argumento não é necessário. Nem todos os portos implementam este argumento.
Conforme especificado acima, a classe Pin permite definir uma função alternativa para um determinado pino, mas não especifica quaisquer outras operações nesse pino. Os pinos configurados em modo de função alternativa normalmente não são utilizados como GPIO, sendo em vez disso controlados por outros periféricos de hardware. A única operação suportada em tal pino é a reinicialização, através do construtor ou do método
Pin.init(). Se um pino configurado em 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 com os parâmetros fornecidos. Apenas os argumentos especificados serão definidos. O restante estado do periférico pin permanecerá inalterado. Consulte a documentação do construtor para detalhes dos argumentos.
Devolve
None.
- value(x: Any = None, /) int | None¶
Este método permite definir e obter o valor do pino, dependendo de o argumento
xser ou não fornecido.Se o argumento for omitido, este método obtém o nível de lógica digital do pino, devolvendo 0 ou 1 correspondendo a sinais de tensão baixa e alta, respetivamente. O comportamento deste método depende do modo do pino:
Pin.IN- O método devolve o valor de entrada real atualmente presente 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 devolve o valor de entrada real atualmente presente no pino.
Se o argumento for fornecido, este método define o nível de lógica digital do pino. O argumento
xpode ser qualquer coisa que converta para booleano. Se converter paraTrue, 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, permanece em estado de alta impedância. O valor armazenado ficará ativo no pino assim que este for alterado para o modoPin.OUTouPin.OPEN_DRAIN.Pin.OUT- O buffer de saída é definido imediatamente com o valor fornecido.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 estado de alta impedância.
Ao definir o valor, este método devolve
None.
- __call__(x: Any = None, /) int | None¶
Os objetos Pin são chamáveis. O método de chamada fornece um atalho (rápido) para definir e obter o valor do pino. É 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 handler de interrupção a ser chamado quando a fonte de disparo do pino estiver ativa. Se o modo do pino for
Pin.IN, a fonte de disparo é o valor externo no pino. Se o modo do pino forPin.OUT, a fonte de disparo é o buffer de saída do pino. Caso contrário, se o modo do pino forPin.OPEN_DRAIN, a fonte de disparo é 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 é acionada. O handler deve aceitar exatamente um argumento, que é a instânciaPin.triggerconfigura o evento que pode gerar uma interrupção. Os valores possíveis são:Pin.IRQ_FALLINGinterrupção na transição descendente.Pin.IRQ_RISINGinterrupção na transição ascendente.
Estes valores podem ser combinados com OR para disparar em múltiplos eventos.
prioritydefine o nível de prioridade da interrupção. Os valores que pode assumir são específicos do porto, mas valores mais altos representam sempre prioridades mais elevadas.wakeseleciona o modo de energia em que esta interrupção pode acordar o sistema. Não suportado em nenhum porto OpenMV; deixar com o valor predefinido.hardse verdadeiro, é utilizada uma interrupção de hardware. Isto reduz o atraso entre a mudança de pino e a chamada do handler. Os handlers de interrupção de hardware não podem alocar memória; consulte Escrita de tratadores de interrupções. Nem todos os portos suportam este argumento.
Este método devolve um objeto callback.
Os métodos seguintes são extensões à API Pin principal. Estão agrupados por disponibilidade de porto.
Métodos disponíveis em todos os portos OpenMV¶
mimxrt + alif apenas¶
STM32 apenas¶
Constantes¶
As constantes abaixo são utilizadas para configurar objetos
Pinatravés do construtor,init()eirq(). Estão agrupadas por disponibilidade de porto.Constantes disponíveis em todos os portos OpenMV¶
STM32 apenas¶
- ALT: int¶
Modo do pino: função alternativa (push-pull). Utilizar com
alt=para selecionar qual a função periférica para a qual o pino é encaminhado. Alias deAF_PP.
- ANALOG: int¶
Modo do pino: entrada analógica – o buffer digital de entrada/saída está desligado para que o pino possa ser conduzido por um canal
ADC.
- AF_OD: int¶
Modo open-drain de função alternativa (mesmo valor que
ALT_OPEN_DRAIN).
- OUT_OD: int¶
Modo de saída open-drain (mesmo valor que
OPEN_DRAIN).
mimxrt apenas¶
- PULL_HOLD: int¶
Ativa a função bus-keeper / hold do pad – o pino retém o seu nível lógico atual em vez de flutuar.
- DRIVE_0: int¶
Definição de resistência de condução mais baixa (maior impedância em série) – a referência
R0(~150 Ω a 3,3 V / 260 Ω a 1,8 V).