3.7. Saída GPIO

machine.LED abstrai a ligação dos indicadores integrados da câmara. Controlar qualquer componente de hardware externo começa com machine.Pin em modo de saída — o periférico base por detrás de qualquer outra interação GPIO.

3.7.1. Controlar um pino

Construa um pino com Pin.OUT para o tornar uma saída e, em seguida, defina o seu valor:

from machine import Pin

led = Pin("P0", Pin.OUT)
led.on()           # drive high (about 3.3 V)
led.off()          # drive low (about 0 V)

Três formas equivalentes de definir o estado, todas em machine.Pin:

Chamar value() sem argumentos lê o estado atual do pino — o que funciona tanto para entradas como para saídas.

3.7.2. Controlar um LED externo

Um LED vermelho a 10 mA a partir de 3,3 V necessita de cerca de 130 Ω em série (a página de eletrónica apresenta os cálculos). Ligue o pino P0 através dessa resistência ao ânodo do LED e o cátodo do LED à massa. Um piscador:

import time
from machine import Pin

led = Pin("P0", Pin.OUT)

while True:
    led.on()
    time.sleep_ms(500)
    led.off()
    time.sleep_ms(500)

O LED alterna entre ligado e desligado uma vez por segundo. A corrente no LED (e por conseguinte o seu brilho) é definida pela resistência; o ciclo de trabalho ligado/desligado controla apenas a frequência com que acende, não o brilho durante o período em que está aceso.

Dica

O construtor aceita um valor inicial como argumento de palavra-chave: Pin("P0", Pin.OUT, value=0) configura o pino como saída que começa a nível baixo. Sem ele, o pino assume brevemente o estado predefinido antes da primeira chamada a value().

3.7.3. Modo open-drain

O modo predefinido Pin.OUT é push-pull: o pino aciona ativamente tanto o nível alto (para a alimentação) como o nível baixo (para a massa). Por vezes isso não é adequado. Recorra a Pin.OPEN_DRAIN quando o pino deve colocar a linha a nível baixo ou libertá-la (flutuar):

pin = Pin("P0", Pin.OPEN_DRAIN)
pin.off()       # actively drive low
pin.on()        # release; an external pull-up brings the line high

A principal utilização é a partilha de um fio. Múltiplas saídas open-drain podem partilhar uma única linha porque nenhuma delas aciona ativamente o nível alto. Qualquer uma delas pode colocar a linha a nível baixo; se todas a libertarem, uma resistência de pull-up externa coloca a linha a nível alto. Esta é a convenção de ligação por detrás dos barramentos de comunicação partilhados.

Aviso

O open-drain não é uma solução geral para controlar dispositivos de tensão mais elevada. Ligar um pino open-drain a um pull-up de 5 V é seguro num pino tolerante a 5 V, mas danifica um pino não tolerante através dos seus díodos de proteção internos, assim que o pino é libertado e a linha sobe para 5 V. A sinalização entre tensões diferentes requer um conversor de nível adequado; consulte Conversão de nível lógico para o circuito.