Was hinter einem GPIO steckt
GPIO heisst general purpose input/output — ein Anschluss, den du per Software entweder zum Ausgang oder zum Eingang machst. Elektrisch sind das zwei völlig verschiedene Dinge, und der Unterschied erklärt die meisten Anfängerprobleme.
Als Ausgang: der Pin treibt
In der linken Hälfte siehst du im Chip einen Umschalter. Er verbindet den Pin entweder mit der 3.3-V-Versorgung oder mit Masse. Etwas dazwischen gibt es nicht — der Pin ist immer an einen der beiden Pole geklemmt.
- High → Pin ist mit 3.3 V verbunden. Er kann Strom liefern (source).
- Low → Pin ist mit 0 V verbunden. Er kann Strom aufnehmen (sink).
Entscheidend: Ein Ausgang ist eine niederohmige Verbindung. Er will die Spannung am Pin durchsetzen, und dabei fliesst so viel Strom, wie die angeschlossene Schaltung zulässt. Deshalb gilt hier die Grenze aus Modul 5 — die 40 mA absolutes Maximum, sinnvoll 10 bis 20 mA — und deshalb gehört zu jeder LED ein Vorwiderstand.
Zwei Ausgänge nie direkt verbinden
Wenn ein Pin High treibt und ein anderer gleichzeitig Low, dann verbindet dein Draht 3.3 V direkt mit Masse — durch zwei winzige Treibertransistoren hindurch. Das ist ein Kurzschluss, und zwar einer, der im Chip stattfindet.
Dasselbe gilt für einen Ausgang, den du versehentlich an 3.3 V oder an GND klemmst, während er den anderen Pegel treibt. Bevor du zwei Pins verbindest, frage: Kann einer davon jemals Ausgang sein?
Als Eingang: der Pin liest nur
Die rechte Hälfte zeigt den umgekehrten Fall. Vom Pin führt die Leitung im Chip auf einen Vergleicher, der nur eine einzige Frage beantwortet: Liegt die Spannung über oder unter der Schwelle?
Ein Eingang ist hochohmig — sein Eingangswiderstand liegt über einem Megaohm. Er zieht praktisch keinen Strom. Genau deshalb darf er an einem Spannungsteiler hängen, ohne ihn nennenswert zu belasten (Modul 6).
Daraus folgt aber auch die Kehrseite, um die es in der nächsten Lektion geht: Ein Eingang bestimmt die Spannung an seinem Pin nicht. Er misst sie nur. Wenn niemand anders sie festlegt, ist sie undefiniert.
Die beiden Betriebsarten
| Ausgang | Eingang | |
|---|---|---|
| Verhalten | niederohmig, setzt die Spannung durch | hochohmig (> 1 MΩ), misst nur |
| Strom | liefert oder nimmt auf | zieht praktisch keinen |
| Grenze | ca. 40 mA absolut, 10–20 mA sinnvoll | 0 … 3.3 V, nicht 5-V-tolerant |
| typische Gefahr | zu viel Strom — LED ohne Vorwiderstand, Kurzschluss | falsche Spannung — oder gar keine, wenn der Eingang offen bleibt |
Die Gefahren sind spiegelbildlich: Beim Ausgang passt du auf den Strom auf, beim Eingang auf die Spannung.
// Ausgang: der Pin treibt aktiv einen Pegel
let mut led = Output::new(pin, Level::Low);
led.set_high(); // Pin an 3.3 V -> Strom fliesst
// Eingang: der Pin liest nur, und bekommt einen Pull-Widerstand mit
let button = Input::new(pin, Pull::Up);
if button.is_low() {
// Taster gedrueckt (siehe Modul 9)
}Zum Code
Die genauen Typnamen und Konstruktoren hängen von der esp-hal-Version ab und ändern sich zwischen Releases. Stabil ist das Muster: Ein Output treibt, ein Input liest, und die Pull-Konfiguration wird beim Anlegen des Eingangs mitgegeben.
Was dieser Kurs beiträgt, ist die Frage davor: Warum braucht der Eingang überhaupt ein Pull::Up? Das ist Modul 9.
Kurze Selbstkontrolle
Zählt nicht — nur zum Prüfen, ob es angekommen ist.
1.Warum darf ein GPIO-Eingang an einem hochohmigen Spannungsteiler hängen, ein Ausgang aber nicht als Spannungsquelle für einen Verbraucher dienen?
2.Was passiert, wenn ein Pin High treibt und ein direkt damit verbundener zweiter Pin Low treibt?