Raspberry Pi Hardware erweitern



Inhalt:

  1. 1. Hard-Reset
    1. 1.1 Platzierung der Raspberry Pi Hard-Reset-Kontakte
    2. 1.2 Start/Reset-Taster einbauen
  2. 2. Soft-Reset
    1. 2.1 Halt-Taster einbauen
      1. 2.1.1 Die Schaltung
      2. 2.1.2 Die Software



Anzeige

1. Hard-Reset

Hard-Reset eignet sich für das Hochfahren und den absturzbedingten Neustart des Betriebssystems. Dabei wird die Spannungsversorgung des RPis kurz unterbrochen.

Seit der Einführung von Raspberry Pi B mit PCB Revision 2.0 im 3. Quartal 2012 unterstützen alle RPis einen Hard-Reset. Dementsprechend besitzen sie die P6 bzw. RUN Kontakte auf der Platine die nicht bestückt sind. Werden diese Kontakte bei einem heruntergefahrenen RPi überbrückt, wird er hochgefahren. Im laufendem Betrieb dagegen neugestartet.

Die Kontakte liegen bei den verschieden Modellen an unterschiedlichen Stellen. Wo man sie findet ist in der folgenden Tabelle aufgelistet.

Platzierung der Raspberry Pi Hard-Reset-Kontakte

ModellPCB RevisionKontaktnameOrt
ZeroV1.2RUNunter den GPIO-Steckplätzen
V1.3
Raspberry Pi Modell BV2.0P6zwischen dem HDMI-Anschluss und 3,3 V Spannungsregler
Raspberry Pi Modell A+V1.1RUNzwischen dem Display-Anschluss und Status LED's
Raspberry Pi Modell B+V1.2
Raspberry Pi 2 Modell BV1.1
Raspberry Pi 3 Modell BV1.2zwischen USB- und GPIO-Anschlüssen

1.2 Start/Reset-Taster einbauen

An die Hard-Reset-Kontakte kann man einen Taster anschliessen um leichter einen Neustart auslösen zu können. Ob der Taster direkt auf der Platine verlötet, an dem Gehäuse platziert oder über eine externe Schaltsteuerung realisiert wird ist der Kreativität und den Anwendungsansprüchen überlassen.


Anzeige

2. Soft-Reset

Bei Soft-Reset wird das Betriebssystem nicht abrupt durch die Spannungsversorgungsunterbrechung beendet, sondern ordnungsgemäß heruntergefahren. Dabei wird durch das Betriebssystem ein shutdown-Befehl ausgeführt. Hochgefahren wird das Betriebsystem durch das Überbrücken der P6 bzw. RUN Kontakte (Drücken des P6/RUN-Tasters wenn eingebaut wie im Abschnitt 1.2 Start/Reset Taster einbauen beschrieben).

2.1 Halt-Taster einbauen

Der Halt-Taster soll das Herunterfahren des Betriebssystems einleiten. Bei gedrücktem Taster sinkt die Spannung am GPIO4 auf 0 Volt. Die RPi-Software erkennt es als fallende Flanke und führt den shutdown-Befehl aus.

2.1.1 Die Schaltung

Raspberry-Pi-Soft-Reset-Taster-Schaltung
Schaltung Halt-Taster

Erklärung der Schaltung

Im Ausgangszustand (Taster nicht betätigt) liegen 3,3 V (300 μA) am PIN 7 (GPIO4). Wird der Taster S1 betätigt fließt der gesamte Strom (330 μA) über den R1-Widerstand und S1-Taster zur Masse. Duch den R2 Widerstand und somit PIN 7 fließt also kein Strom. Nach dem ohm’schen Gesetz U = R • I heisst es, wo kein Stom auch keine Spannung. Also beträgt sie am PIN 7 jetzt 0 Volt. Die GPIO-Software des RPis erkennt es als Low-Zustand und leitet das Herunterfahren des Betriebssystems ein.



Anzeige

2.1.2 Die Software

Für das einfache Programm eignet sich am besten die GPIO Interface Bibliothek für die Kommandozeile WiringPi die auf dem Raspbian Jessie schon installiert ist. Man kann es auch mit dem folgenden Befehl überprüfen:

$ gpio -v

Es sollten die Versionsnummer und einige Raspberry Pi Informationen, sowie die Unterstützung der Bibliothek ausgegeben werden:

Ausgabe der Wiring Pi Version
Ausgabe der Wiring Pi Version

Ist es nicht der Fall, muss Wiring Pi anhand dieser Anleitung nachinstalliert werden.

Das Programm, das im Hintergrund das Herunterfahren des Betriebsystems verwaltet sieht dann mit Benutzung von Wiring Pi folgendermaßen aus:

#!/bin/bash
pin=7
gpio mode $pin in
gpio wfi $pin falling
logger Shutdown button pressed
shutdown -h now

Programmablauf

In Zeile 2 wird der WiringPi Pin 7 (BCM GPIO Pin 4, P1/J8 Stiftsteckleiste Pin 7) in einer Variable festgelegt. Wiring Pi Bibliothek benutzt eine eigene Pin-Nummerierung, die von der Hardware-Nummerierung abweicht. Laut dem Entwickler der WiringPi Bilbiothek soll man diese Nummerierung möglichst beibehalten um die Pin Anpassungen auf unterschiedlichen Raspberry Pi Modellen zu vermeiden. Hier die Erklärung des Entwicklers.

In Zeile 3 wird der festgelegte Pin 7 als Eingang konfiguriert.

In Zeile 4 wird veranlasst dass am Pin 7 im Hintergrund auf eine fallende (High=>Low) Flanke gewartet werden soll. In diesem Fall wird das Herunterfahren erst dann eingeleitet, wenn der Taster gedrückt wird und die Spannung am Pin 7 auf 0 Volt sinkt.

In Zeile 5 wird eine Nachricht über gedrückten Taster zum Herunterfahren in die System Logdatei (/var/log/syslog) geschrieben.

In Zeile 6 wird das Herunterfahren eingeleitet.

Skript erstellen

Mit dem Texteditor nano die Datei /etc/userbuttonhalt erstellen.

$ cd /etc
$ sudo nano userbuttonhalt

Das obrige Bash-Skript kopieren und in das nano-Fenster einfügen. Achten darauf dass die letzte Zeile leer bleibt. shutdown -h now muss also mit ENTER (CR\LF) abgeschlossen worden sein, sonst wird shutdown nicht ausgeführt!

nano - userbuttonhalt bash-Skript
nanouserbuttonhalt bash-Skript

Mit Strg+O die Skriptdatei speichern. Nach einer Bestätigung mit ENTER, nano mit Strg+X schliessen.

 

Mit dem Befehl:

$ sudo chmod a+x userbuttonhalt

das Skript ausführbar machen.


Anzeige

Funktionstest

Für den Test wird das Skript einmalig als Hintergrundprozess ausgeführt mit

$ sudo /etc/userbuttonhalt &

Wenn jetzt der Halt-Taster gedrückt wird, soll das Betriebsystem herunterfahren.

Skript als Hintergrundprozess immer ausführen

Der userbuttonhalt Skript-Dateipfad muss noch in die /etc/rc.local eingetragen werden damit das Skript nach dem Abschluss aller Bootprozesse im Hintergrund gestartet wird.

$ sudo nano /etc/rc.local

Am Ende vor dem exit 0 – Befehl

/etc/userbuttonhalt &

eintragen.

nano-userbuttonhalt-after-boot
nano – userbuttonhalt nach dem Bootprozess starten

WICHTIG: Das & – Zeichen hinter dem Pfad ist wichtig damit das Skript als Hintergrundprozess ausgeführt wird.

 

Mit Strg+O speichern, mit ENTER bestätigen und mit Strg+X nano schliessen. Raspberry Pi neustarten.

 

Wenn jetzt auf den Taster gedrückt wird, soll das Betriebsystem herunterfahren. Nach einem Neustart mit dem P6 bzw. RUN – Hard-Reset-Taster soll das Skript, wie unten in dem htop Task Manager angezeigt, im Hintergrund als daemon (Prozess) ausgeführt werden.

htop userbuttonhalt Skript deamon
htop – userbuttonhalt Skript deamon


Anzeige



 

War diese Seite für dich informativ? Hat sie dir gefallen und geholfen?

Dann unterstütze die Weiterentwicklung mit einer kleinen Spende!

Die Spenden werden für die Lizenzen sowie neue Hard- und Software verwendet, die für weitere Projekte auf dieser Webseite eingesetzt werden.



14 Kommentare zu “Raspberry Pi Hardware erweitern

  1. Hallo Miguel,
    es freut mich dass diese Anleitung hilfsreich für dich war.
    Zu deiner geänderten Konfiguration:
    1. Du hast den GPIO3 als Eingang benutzt. Dieser ist ein Funktionspin und zwar ein I2C-Datenbus-Taktanschluss (SCL).
    http://raspberrypi.ws/pin5
    Diesen und GPIO2 (SDA) habe ich bewusst nicht gewählt um sie frei für den I2C-Bus zu halten.
    2. Der Widerstand R2 hat die Pullup-Funktion und verhindert einen undefinierten oder falschen Zustand am Eingangspin,
    so wie begrenzt den Strom (GPIO-Eingang mit Taster/Schalter und Querwiderstand auf Seite: https://www.elektronik-kompendium.de/sites/raspberry-pi/2110081.htm).
    Du hast ihn zwar entfernt, hast aber am GPIO3 intern dauerhaft einen nicht abschaltbaren 1,8 kOhm Pullup-Widerstand.
    Abschnitt 9 auf der Seite: https://www.elektronik-kompendium.de/sites/raspberry-pi/2006051.htm

    Gruß
    Alexander

  2. Hallo
    Danke für dein Script, habe nach sowas gesucht und hier gefunden 🙂
    Habe Allerdings den Taster nicht an GPIO4(Pin7) sondern an GPIO3 (Pin5 = WiringPi9),
    Script natürlich angepaßt.

    Hintergrund ist, das der RasPi Automatisch aus den ‘standby’ erwacht sobald Pin5 kurz gegen Masse gezogen wird.
    so erfüllt ein Taster die Boot Funktionen und wen der RasPi Oben ist, Lauscht dein Script am gleichen GPIO3 auf Low.

    Brauche somit den ‘RUN’ Taster nicht,
    habe auch R2 weggelassen (Taster Brückt so direkt gegen Masse und zieht GPIO3 auf Low)…

  3. Hallo Klaus,
    der Pfad sollte /usr/bin/gpio lauten wenn man Wiring Pi über die Paketverwaltung instaliert (wie ich).
    Installiert man an der Paketverwaltung vorbei, wird der Pfad zu /usr/local/bin/gpio.
    Wenn dieses Verzeichnis nicht zu der Umgebungsvariable PATH gehört, kannst du es nachträglich und dauerhaft
    in der Datei /etc/profile festlegen, damit es von der Shell in der Kommandozeile gefunden wird.
    Öffne diese Datei mit sudo nano /etc/profile und ergänze die PATH Variable mit dem Verzeichnis.
    PATH in der /etc/profile Datei
    Danach müsstest du gpio direkt ohne Verzeichnisangabe davor aufrufen können.
    VORSICHT: denk daran, die einzelnen Verzeichnisse mit “:” getrennt einzutragen!

    Gruß
    Alexander

  4. Hallo Alexander,
    Nachtrag: es geht immer noch, aber:
    Bei händischem Start des Skriptes funktionierte alles nun gut, doch ich hatte das Skript noch nicht in die rc.local eingefügt (vielleicht kannst Du die entsprechende Zeile noch mit /etc/rc.local versehen, obwohl man in der Abfolge schon in /etc sein sollte.).
    Als ich dies tat, war gpio wieder unbekannt wie zu Beginn meiner Versuche, die Folge sofortiger shutdown. Für erste Versuche sollte man einen anderen Befehl hier einfügen. Die Lösung war dann, im Skript in beiden Zeilen “gpio” durch “/usr/local/bin/gpio” zu ersetzen. Dies ist nötig, da es sich um nachinstallierte Kommandos handelt. Verstehe zwar nicht, wie es bei Dir ohne ging, aber nun ja, jedenfalls ist die Vorgehensweise nun amtlich für den Raspi 2 Model B V1.1.
    Danke noch mal, Klaus

  5. Hallo Klaus,
    Herzlichen Glückwunsch!
    Je mehr man damit spielt um so einfacher wird es sein.
    Aus diesem Grund habe ich erwähnt, der Raspberry Pi ist für Schüler und Studenten zur Lernzwecken entwickelt worden.
    Und zwar sollen sie darauf nicht nur das Programmieren erlernen, sondern auch das Verständnis von Unix/Linux
    Betriebssystemen erwerben.

    Ich muss mich bei dir bedanken. Dank deinen Kommentaren und Problemstellungen weiss ich jetzt an welchen Stellen
    ich diese Seite verbessern und ergänzen muss.

    Gruß
    Alexander

  6. Hallo Alexander,
    nicht erschrecken: es geht!
    Musste anscheinend aufgrund der genannten Fehlermeldung Samba neu installieren (was immer das ist) wie auf dieser Seite: https://forums.linuxmint.com/viewtopic.php?t=225026 zu sehen, allerdings mehrfach in Teilen….
    Trotzdem ging das “./build” am Ende der wiringPi Installation nicht, weil das gcc Kommando nicht gefunden wurde. Habe auf dieser Seite https://askubuntu.com/questions/428220/cant-run-make-gcc-command-not-found dann den trockenen Hinweis gelesen, dass ein einfaches “sudo apt-get install gcc” doch reichen könne. So war es. Danach lief der ./build durch und das Skript tut, was es soll. Sehr schön.
    Bleibt anzumerken, dass ich vorher dachte, das Skript geht, weil es ja immerhin herunterfuhr. Dass die gpio Anweisungen überlesen werden konnten, entspricht nicht meiner EDV-Erfahrung. Darauf wäre ich alleine nicht gekommen. Danke also noch mal für die Hilfe.
    Dennoch: ein einfach zu beherrschendes Spielzeug, wie oft angepriesen, ist auch ein Raspi nicht.
    Gruß Klaus

  7. Hallo Alexander,
    der Tipp mit wiringPi ist bestimmt der Richtige!
    Aber leider bekomme ich eine Meldung “Starting SMB/CIFS daemon: smbd failed!”, so oft ich es auch wiederhole.
    Das scheint zwar im Netz bekannt, kann ich aber nicht lösen, zu viel chinesisch – ist aber auf jeden Fall nicht Dein Problem.
    Man ist eben sofort in Tiefen, die man nicht händeln kann.
    So klingt zwar netter Jazz aus dem Pi, aber näher komme ich dem Teil nicht.
    Danke für Deine Hilfe, Gruß Klaus

  8. Hallo Alexander,
    vielen Dank für diesen neuerlichen Tipp und Strohhalm!
    Werde ich sobald möglich probieren, denke zwar eigentlich, dass ja, aber wer weiß…?
    Ich berichte auf jeden Fall, nett dass Du noch einen auf Lager ha(tte)st!
    Gruß Klaus

  9. Hallo Alexander,
    tut mir Leid, dass ich noch einmal erfolglos schreibe. Habe sofort Deinen Rat befolgt, aber das Skript tut eben nicht “scheinbar gar nichts”, wie es erst einmal soll, sondern fährt nach wie vor sofort herunter, wenn ich es händisch starte und wartet nicht auf die Betätigung des Tasters.
    Deswegen habe ich es vorsichtshalber nicht in die rc.local eingefügt, da sonst wieder aufwändiges “Herausfischen” über den PC nötig wird…
    Sicherheitshalber: Du meinst mit “ENTER” doch einfach die Eingabetaste, so dass der Cursor in die nächste Zeile springt?
    Konnte mir aber auch nicht vorstellen, dass dies die Lösung ist, weil ja (wenigstens) der shutdown so zu sagen ordnungsgemäß durchgeführt wird, bloß eben sofort und ohne Taster.
    Ich nehme an, dass Du nun auch nicht mehr weiter weißt und experimentiere noch ein wenig daran herum, muss mir aber wohl eine andere Lösung suchen. Übrigens: Dass ein Gerät ausgeschaltet werden kann (also headless ohne Monitor etc.) gehört für mich zur selbstverständlichen technischen Ästhetik und hat nichts mit Stromverbrauch zu tun!

    Gruß Klaus

  10. Hallo Klaus,
    achte darauf dass in dem userbuttonhalt-Skript die letzte Anweisung shutdown -h now mit ENTER (CR\LF) abgeschlossen ist.
    Ohne ENTER wird diese Anweisung sonst nicht ausgeführt. Die letzte Zeile sollte daher leer sein.
    Die Anweisung sudo /etc/userbuttonhalt & macht scheibar gar nichts (den Punkt davor kannst du weglassen. War mein Fehler. Sorry!).
    Sie erstellt aber einmalig einen Hintergrundprozess (deswegen das &-Zeichen dahinter) der auf den Tasterdruck wartet.
    Deswegen soll diese Anweisung in die rc.local-Datei eigetragen werde, damit dieser Hintergrundprozess bei jedem Neustart erstellt wird.

    Dass dieser Taster und viele andere Sachen nicht standardmässig verbaut sind hat seinen Grund. Raspberry Pi ist ursprunglich (und immer noch) als
    preiswerter Rechner zu Übungszwecken für Schüler und Studenten gedacht. Also lass uns ihre Kreativität erweitern! Und unsere auch, haha!

    Ich hoffe, ich konnte dir erstmal soweit helfen, dass du damit Erfolg hast. Sonst stehe ich für weitere Fragen oder Problemlösungen gerne zu Verfügung.

    Gruß
    Alexander

  11. Hallo Alexander,
    danke erstmal für Deine Antwort!
    Habe Hardware zusammen und der Spannungswert stimmt am Pin 7 ohne und bei Drücken des Tasters. Doch das Skript fährt, sobald händisch gestartet mit “sudo /etc/userbuttonhalt”, ohne Tastendruck sofort herunter (was macht der “.” in “sudo ./etc/userbuttonhalt”? DAS geht bei mir nicht.)
    Habe das Skript vorsichtigerweise noch nicht in rc.local eingefügt.
    Es ist in meinen Augen ein Unding, dass diese Taster nicht standardmäßig am Raspi vorgesehen sind und umso toller, dass sich Jemand wie Du darum kümmert! Aber es ist schade, dass offensichtlich jede Lösung im Netz bei diesem oder jenem Nachbauer nicht klappt. Das mag, wie bei mir auch, individuelle Dummheit sein, aber so wird das Ziel, unerfahrene Leute an die Sache heranzuführen, etwas verfehlt.
    Mein Raspi ist ein 2er Model B V1.1. Der Start/Reset Taster an den “run” Anschlüssen tut´s und eine Status-LED an Pin 6 und 8 auch.
    Weißt Du mir einen Rat?
    Gruß Klaus

  12. Hallo Klaus,

    das userbuttonhalt-Skript soll zuvor im /etc Verzeichnis wie oben beschrieben, erstellt werden.
    Der Befehl sudo chmod a+x userbuttonhalt soll von diesem Verzeichnis /etc aus ausgeführt werden.
    Andersfalls mit sudo chmod a+x /etc/userbuttonhalt.
    Falls du diesen Befehl von dieser Webseite kopiert hast, dann gehört das “code“-Tag natürlich nicht hin.
    Es hat sich beim Erstellen der Seite unbemerkt eingeschlichen und ich habe es in der Zwischenzeit korrigiert.

    Mfg
    Alexander

  13. Hallo,
    der Befehl “sudo chmod a+x userbuttonhalt” bringt leider die Meldung, dass die Datei nicht existiert. Trotz mehrmaligem Nachprüfen mittels nano und der Berechtigungen immer das gleiche Resultat.
    Habe dummerweise dann weitergemacht und nun ist das komplette Volumio unbrauchbar, da beim Hochfahren die userbuttonhalt nicht gefunden wird. Gut, neu erstellen….
    Gibt es hier Abhilfe? Denn ich würde diese Lösung sehr gerne benutzen!!

    Grüße Klaus

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert