3.7. Uscita GPIO

machine.LED astrae il cablaggio degli indicatori integrati della camera. Per pilotare qualsiasi componente hardware esterno si parte da machine.Pin in modalità di uscita – la periferica grezza sottostante a ogni altra interazione GPIO.

3.7.1. Pilotare un pin

Costruisci un pin con Pin.OUT per renderlo un’uscita, quindi imposta il suo valore:

from machine import Pin

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

Tre modi equivalenti per impostare lo stato, tutti su machine.Pin:

Chiamare value() senza argomenti rilegge lo stato corrente del pin – cosa che funziona sia per gli ingressi sia per le uscite.

3.7.2. Pilotare un LED esterno

Un LED rosso a 10 mA da 3,3 V necessita di circa 130 Ω in serie (la pagina sull’elettronica sviluppa i calcoli). Collega il pin P0 attraverso quella resistenza all’anodo del LED e il catodo del LED a massa. Un lampeggiatore:

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)

Il LED si accende e si spegne una volta al secondo. La corrente che attraversa il LED (e quindi la sua luminosità) è impostata dalla resistenza; il duty di accensione/spegnimento controlla solo la frequenza con cui si accende, non quanto appare luminoso mentre è acceso.

Suggerimento

Il costruttore accetta un valore iniziale come argomento keyword: Pin("P0", Pin.OUT, value=0) configura il pin come un’uscita che parte a livello basso. Senza di esso, il pin assume brevemente qualunque fosse il suo stato predefinito prima della prima chiamata a value().

3.7.3. Modalità open-drain

La modalità predefinita Pin.OUT è push-pull: il pin pilota attivamente sia il livello alto (verso l’alimentazione) sia quello basso (verso massa). A volte questo non va bene. Ricorri a Pin.OPEN_DRAIN quando il pin deve o portare la linea a livello basso oppure rilasciarla (lasciarla flottante):

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

L’uso principale è la condivisione di un filo. Più uscite open-drain possono condividere una singola linea perché nessuna di esse la pilota attivamente a livello alto. Una qualsiasi di esse può portare la linea a livello basso; se tutte la rilasciano, una resistenza di pull-up esterna porta la linea a livello alto. Questa è la convenzione di cablaggio alla base dei bus di comunicazione condivisi.

Avvertimento

L’open-drain non è una soluzione generale per pilotare un dispositivo a tensione più alta. Collegare un pin open-drain a un pull-up a 5 V è sicuro su un pin tollerante ai 5 V, ma danneggia un pin non tollerante attraverso i suoi diodi di protezione integrati non appena il pin rilascia e la linea sale fino a 5 V. La segnalazione tra tensioni diverse richiede un vero level shifter; vedi Adattamento di livello per il circuito.