3.7. GPIO-uitgang¶
machine.LED abstraheert de bedrading van de ingebouwde indicatoren van de camera weg. Het aansturen van enig extern stukje hardware begint met machine.Pin in uitgangsmodus – het ruwe randapparaat onder elke andere GPIO-interactie.
3.7.1. Een pin aansturen¶
Maak een pin aan met Pin.OUT om er een uitgang van te maken en stel vervolgens de waarde in:
from machine import Pin
led = Pin("P0", Pin.OUT)
led.on() # drive high (about 3.3 V)
led.off() # drive low (about 0 V)
Drie gelijkwaardige manieren om de toestand in te stellen, allemaal op machine.Pin:
pin.value(1)/pin.value(0)– de expliciete vorm.
value() aanroepen zonder argumenten leest de huidige toestand van de pin terug – wat werkt voor zowel ingangen als uitgangen.
3.7.2. Een externe LED aansturen¶
Een rode LED bij 10 mA vanaf 3,3 V heeft ongeveer 130 Ω in serie nodig (de elektronicapagina werkt de berekening uit). Bedraad pin P0 via die weerstand naar de anode van de LED, de kathode van de LED naar massa. Een knipperaar:
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)
De LED gaat één keer per seconde aan en uit. De stroom door de LED (en dus de helderheid) wordt bepaald door de weerstand; de aan/uit-verhouding bepaalt alleen hoe vaak hij oplicht, niet hoe helder hij lijkt terwijl hij aan is.
Tip
De constructor accepteert een beginwaarde als sleutelwoordargument: Pin("P0", Pin.OUT, value=0) configureert de pin als een uitgang die laag begint. Zonder dit neemt de pin kort wat zijn standaardtoestand ook was aan, vóór de eerste aanroep van value().
3.7.3. Open-drain-modus¶
De standaardmodus Pin.OUT is push-pull: de pin stuurt actief zowel hoog (naar de voeding) als laag (naar massa) aan. Soms is dat verkeerd. Grijp naar Pin.OPEN_DRAIN wanneer de pin de lijn ofwel laag moet trekken ofwel moet loslaten (zweven):
pin = Pin("P0", Pin.OPEN_DRAIN)
pin.off() # actively drive low
pin.on() # release; an external pull-up brings the line high
Het belangrijkste gebruik is het delen van een draad. Meerdere open-drain-uitgangen kunnen een enkele lijn delen omdat geen van hen die actief hoog aanstuurt. Elk van hen kan de lijn laag trekken; als ze allemaal loslaten, brengt een externe pull-up de lijn hoog. Dit is de bedradingsconventie achter gedeelde communicatiebussen.
Waarschuwing
Open-drain is geen algemene oplossing voor het aansturen van een apparaat met een hogere spanning. Een open-drain-pin aansluiten op een pull-up bij 5 V is veilig op een 5 V-tolerante pin, maar beschadigt een niet-tolerante pin via zijn ingebouwde beschermdiodes zodra de pin loslaat en de lijn omhoog zweeft naar 5 V. Signalering tussen verschillende spanningen vereist een goede level shifter; zie Niveau-omzetting voor de schakeling.