3.7. Salida GPIO

machine.LED abstrae el cableado de los indicadores integrados de la cámara. Controlar cualquier pieza de hardware externa empieza con machine.Pin en modo de salida – el periférico en bruto que subyace a cualquier otra interacción GPIO.

3.7.1. Controlar un pin

Construye un pin con Pin.OUT para convertirlo en una salida y luego fija su 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)

Tres formas equivalentes de fijar el estado, todas en machine.Pin:

Llamar a value() sin argumentos lee el estado actual del pin – lo cual funciona tanto para entradas como para salidas.

3.7.2. Controlar un LED externo

Un LED rojo a 10 mA desde 3,3 V necesita unos 130 Ω en serie (la página de electrónica desarrolla los cálculos). Conecta el pin P0 a través de esa resistencia al ánodo del LED, y el cátodo del LED a tierra. Un parpadeador:

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)

El LED se enciende y se apaga una vez por segundo. La corriente que atraviesa el LED (y por tanto su brillo) la fija la resistencia; el ciclo de encendido/apagado solo controla con qué frecuencia se ilumina, no lo brillante que se ve mientras está encendido.

Truco

El constructor acepta un valor inicial como argumento de palabra clave: Pin("P0", Pin.OUT, value=0) configura el pin como una salida que arranca a nivel bajo. Sin él, el pin adopta brevemente el estado por defecto que tuviera antes de la primera llamada a value().

3.7.3. Modo de drenador abierto

El modo Pin.OUT por defecto es push-pull: el pin excita activamente tanto a nivel alto (hacia la alimentación) como a nivel bajo (hacia tierra). A veces eso no es lo deseado. Recurre a Pin.OPEN_DRAIN cuando el pin deba o bien llevar la línea a nivel bajo o bien liberarla (dejarla flotante):

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

El uso principal es compartir un cable. Varias salidas de drenador abierto pueden compartir una sola línea porque ninguna de ellas la excita activamente a nivel alto. Cualquiera de ellas puede llevar la línea a nivel bajo; si todas la liberan, una resistencia de pull-up externa lleva la línea a nivel alto. Esta es la convención de cableado que hay detrás de los buses de comunicación compartidos.

Advertencia

El drenador abierto no es una solución general para controlar un dispositivo de mayor tensión. Conectar un pin de drenador abierto a un pull-up a 5 V es seguro en un pin tolerante a 5 V, pero daña uno no tolerante a través de sus diodos de protección internos en cuanto el pin se libera y la línea sube hasta 5 V. La señalización entre tensiones distintas necesita un conversor de niveles adecuado; consulta Adaptación de niveles para ver el circuito.