Aus Raspberry Pi Geek 09/2024

Den Raspberry Pi 5 zeitgesteuert oder aus der Ferne starten (Seite 2)

Das Signal mit dem Pegel von 3V3 liegt auf dem Pin direkt neben der USB-C-Buchse. Daneben, bei der HDMI-Buchse, liegt Masse. Die entscheidende Rolle spielt die Konfiguration des angeschlossenen Pico-Pins: Sie müssen ihn als Output-Pin im sogenannten Open-Drain-Modus verwenden. Der Kasten “Push-Pull und Open Drain” erklärt den Unterschied.

Das Arbeitsprinzip ist einfach: Ein interner (Input-)GPIO des RasPi 5 überwacht den Pegel am Pin. Ein ebenfalls interner Pullup sorgt für die bereits erwähnten 3,3 Volt (3V3). Zieht ein Taster, oder in unserem Fall ein Pico W, den Pin auf Masse, dann schaltet der Raspberry Pi den Strom ein respektive aus – Letzteres aber erst, nachdem das System sauber heruntergefahren ist. Das funktioniert, da das System einen KEY_POWER-Event erhält, den es entsprechend umsetzt. Das ist Linux-Standard und sollte distributionsübergreifend funktionieren. Laptops nutzen übrigens denselben Mechanismus.

Ein weiterer GPIO-Pin des Pico W, diesmal als Input-Pin konfiguriert, hängt über einen 10K-Schutzwiderstand am 3V3-Pin (Pin 1 oder 17) des RasPi 5. Damit prüft der Pico W, ob der RasPi 5 läuft oder nicht. Die gesamte Logik ist in einer Webapplikation verpackt, die auf dem Pico W läuft.

Push-Pull und Open Drain

GPIO-Output-Pins beherrschen in aller Regel (der Raspberry Pi ist eine Ausnahme) zwei Modi: Push-Pull und Open Drain. Im ersten Fall steuert der Pin aktiv die beiden möglichen Werte High (True, 1, positiv) und Low (False, 0, negativ). Im zweiten Fall steuert er nur Low.

Die Schaltung links oben in Abbildung 4 verdeutlicht Push-Pull. Der Schalter G1 hat zwei Zustände und ist entweder mit High oder Low verbunden. Auf der rechten Seite befindet sich ein Input-GPIO samt Pullup. Der Widerstand sichert einen festen Zustand beim Einschalten, solange der Output-Pin noch nicht konfiguriert ist.

Darunter sehen Sie eine Open-Drain-Konfiguration. Hier verbindet der Pin G2 nur nach Low, ansonsten hängt er in der Luft. Ohne Pullup geht es hier nicht, denn sonst wäre der Pegel am Input-Pin im letzteren Fall unbestimmt.

Bei einem einzelnen Output-Pin nehmen sich Push-Pull und Open Drain nicht viel. In der Abbildung ganz rechts hängt aber zusätzlich zum Output-Pin noch ein Taster in der Schaltung. Das ist die Situation beim RasPi 5. Ein Push-Pull-Output-Pin, der auf High steht, und ein gedrückter Taster schließen dann die Schaltung kurz. Mit Open Drain können entweder der Taster oder der Output-Pin den Pegel auf Low setzen. Die Schaltung ließe sich mit beliebig vielen Open-Drain-GPIOs und Tastern erweitern.

Abbildung 4: Die Schaltschemata für Push-Pull (links) und Open Drain (rechts).

Abbildung 4: Die Schaltschemata für Push-Pull (links) und Open Drain (rechts).

Mini-Server

Die Implementation eines kleinen Webservers auf einem Pico W ist kein Hexenwerk. Dazu finden Sie im Netz diverse fertige Implementierungen sowie Beispiele für Ihre bevorzugte Programmiersprache. Unabhängig von der Server-Funktion kann sich der Pico W dabei je nach Bedarf als Station in ein vorhandenes WLAN einbuchen oder selbst als Access Point ein eigenes drahtloses Netz aufspannen. Letzteres ist für abgeschottete oder isolierte Umgebungen interessant.

Die Benutzerschnittstelle besteht in unserem Anwendungsfall nur aus einer Seite mit einem Schieber, typischerweise der index.html (Abbildung 5). Der Server liefert die Datei über die Zeilen 61 bis 65 von Listing 2 aus. Des Weiteren stellt er zwei Datenschnittstellen bereit. Das erste Interface sendet den aktuellen Status des RasPi 5 (Listing 2, Zeilen 83 bis 90). Dabei handelt es sich um den Wert des Input-Pins, der an der 3V3-Leitung horcht. Die andere Schnittstelle führt dann den virtuellen Tastendruck aus (Zeilen 94 bis 103). Dazu zieht das Programm den Output-Pin kurzzeitig auf Masse (Zeilen 99 bis 101).

Abbildung 5: Die Webseite für den RasPi-5-Schalter fällt selbsterklärend aus.

Abbildung 5: Die Webseite für den RasPi-5-Schalter fällt selbsterklärend aus.

Etwas CSS-Styling sorgt auf der Webseite für passende Farben des Schiebers: Grün für den aktiven Raspberry Pi, Rot, wenn er ohne Strom ist, und Gelb während des Umschaltens. Die Farben lassen sich für Anwender mit einer Rot-Grün-Sehschwäche leicht anpassen. Den Rest erledigen einige Zeilen Javascript. Den gesamten Code finden Sie im Projekt-Repository [1].

Sie können den ganz bewusst minimal gehaltenen Code als Basis für eigene Entwicklungen nutzen. Beispielsweise könnte der Pico W den RasPi 5 auch anpingen, statt nur die 3V3-Leitung zu überwachen. Auf diese Weise ließe sich besser zwischen “angeschaltet” und “hochgefahren” unterscheiden. Daneben gäbe es die Möglichkeit, den Pico W und den RasPi 5 über UART zu verbinden und so die Möglichkeiten des Managements abseits eines (W)LANs zu erweitern.

Listing 2

Webserver (Ausschnitt)

...
016 import board
...
024 from digitalio import DigitalInOut, Pull, DriveMode
025 from ehttpserver import Server, Response, FileResponse, route
...
041 PIN_TOGGLE = board.GP27
042 PIN_3V3    = board.GP26
043
044 class MyServer(Server):
...
050   def __init__(self):
051     self._pi5_toggle = DigitalInOut(PIN_TOGGLE)
052     self._pi5_toggle.switch_to_output(True,drive_mode=DriveMode.OPEN_DRAIN)
053     self._pi5_3v3    = DigitalInOut(PIN_3V3)
054     self._pi5_3v3.switch_to_input(pull=Pull.DOWN)
...
061   @route("/","GET")
062   def _handle_main(self,path,query_params, headers, body):
...
065     return FileResponse("/www/index.html")
...
083   @route("/get_status","GET")
084   def _handle_get_status(self,path,query_params, headers, body):
...
088     status = {"pi5_state": self._pi5_3v3.value}
089     return Response(json.dumps(status),
090            content_type="application/json")
...
094   @route("/toggle_power","GET")
095   def _handle_toggle_power(self,path,query_params, headers, body):
...
099     self._pi5_toggle.value = False
100     time.sleep(0.1)
101     self._pi5_toggle.value = True
102     return Response(json.dumps({"rc": True}),
103            content_type="application/json")

Fazit

Den Pico W samt Webserver können Sie gegebenenfalls durch jeden anderen Mikrocontroller ersetzen, der sich in der Restekiste findet. Auch in Sachen Kommunikationstechnik sind Sie keineswegs auf Wi-Fi festgelegt. Hängt an der MCU ein Infrarotempfänger, dann funktioniert das Schalten auch mit einer handelsüblichen Fernbedienung. Fungiert der RasPi 5 als Mediaplayer im Wohnzimmer, ist das eine attraktive Lösung.

Aus Sicht des Autors machen gerade die unscheinbaren kleinen Verbesserungen des RasPi 5 wie die RTC samt Schaltanschluss den Mini-Rechner noch universeller einsetzbar. Opulente Rechenpower und PCIe-Anschluss sind zwar schön und gut, bringen aber nur bei daten- und CPU-lastigen Anwendungen etwas. (jlu)

Der Autor

Bernhard Bablok ist im Ruhestand. Wenn er nicht Musik hört oder mit dem Rad respektive zu Fuß unterwegs ist, beschäftigt er sich mit Themen rund um Linux, Programmierung und Kleincomputer. Sie erreichen ihn unter mailto:[email protected].

Infos

  1. Repository zum Artikel: https://github.com/bablokb/cp-pi5-webswitch
DIESEN ARTIKEL ALS PDF KAUFEN
EXPRESS-KAUF ALS PDFUmfang: 5 HeftseitenPreis €0,99
(inkl. 19% MwSt.)
RASPBERRY PI GEEK KAUFEN
EINZELNE AUSGABE Print-Ausgaben Digitale Ausgaben
ABONNEMENTS Print-Abos Digitales Abo
TABLET & SMARTPHONE APPS Raspberry Pi Geek bei Google Play Readly Logo
Nach oben