3.7. GPIO-Ausgang¶
machine.LED abstrahiert die Verdrahtung der eingebauten Anzeigen der Kamera. Das Ansteuern eines externen Hardwareteils beginnt mit machine.Pin im Ausgabemodus – dem rohen Peripheriegerät, das jeder anderen GPIO-Interaktion zugrunde liegt.
3.7.1. Einen Pin ansteuern¶
Erstellen Sie einen Pin mit Pin.OUT, um ihn zu einem Ausgang zu machen, und setzen Sie dann seinen Wert:
from machine import Pin
led = Pin("P0", Pin.OUT)
led.on() # drive high (about 3.3 V)
led.off() # drive low (about 0 V)
Drei gleichwertige Möglichkeiten, den Zustand zu setzen, alle auf machine.Pin:
pin.value(1)/pin.value(0)– die explizite Form.
Ruft man value() ohne Argumente auf, wird der aktuelle Zustand des Pins zurückgelesen – was sowohl für Eingänge als auch für Ausgänge funktioniert.
3.7.2. Eine externe LED ansteuern¶
Eine rote LED bei 10 mA von 3,3 V benötigt etwa 130 Ω in Reihe (die Elektronik-Seite arbeitet die Berechnung aus). Verdrahten Sie den Pin P0 über diesen Widerstand zur Anode der LED, die Kathode der LED zur Masse. Ein Blinker:
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)
Die LED schaltet sich einmal pro Sekunde ein und aus. Der Strom durch die LED (und somit ihre Helligkeit) wird durch den Widerstand bestimmt; das Ein-/Aus-Tastverhältnis steuert nur, wie oft sie aufleuchtet, nicht wie hell sie erscheint, während sie eingeschaltet ist.
Tipp
Der Konstruktor akzeptiert einen Anfangswert als Schlüsselwortargument: Pin("P0", Pin.OUT, value=0) konfiguriert den Pin als Ausgang, der mit Low startet. Ohne ihn nimmt der Pin kurzzeitig den Zustand an, der vor dem ersten Aufruf von value() als Standard galt.
3.7.3. Open-Drain-Modus¶
Der standardmäßige Pin.OUT-Modus ist Push-Pull: Der Pin treibt aktiv sowohl High (zur Versorgung) als auch Low (zur Masse). Manchmal ist das verkehrt. Greifen Sie zu Pin.OPEN_DRAIN, wenn der Pin die Leitung entweder auf Low ziehen oder sie freigeben (floaten lassen) soll:
pin = Pin("P0", Pin.OPEN_DRAIN)
pin.off() # actively drive low
pin.on() # release; an external pull-up brings the line high
Der Hauptzweck ist das gemeinsame Nutzen eines Drahtes. Mehrere Open-Drain-Ausgänge können sich eine einzige Leitung teilen, weil keiner von ihnen sie aktiv auf High treibt. Jeder von ihnen kann die Leitung auf Low ziehen; geben alle frei, bringt ein externer Pull-up die Leitung auf High. Dies ist die Verdrahtungskonvention hinter gemeinsam genutzten Kommunikationsbussen.
Warnung
Open-Drain ist keine allgemeine Lösung für die Ansteuerung eines Geräts mit höherer Spannung. Das Verbinden eines Open-Drain-Pins mit einem Pull-up bei 5 V ist an einem 5-V-toleranten Pin sicher, beschädigt jedoch einen nicht toleranten Pin über seine On-Chip-Schutzdioden, sobald der Pin freigibt und die Leitung auf 5 V hochfloatet. Spannungsübergreifende Signalisierung benötigt einen ordentlichen Pegelwandler; siehe Pegelumsetzung für die Schaltung.