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:
pin.value(1)/pin.value(0)– la forma esplicita.
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.