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:

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.