Hoch- und runterfahren mittels Taster (incl. Status-LED)

Heute ist Stammtischzeit:
Jeden Donnerstag 20:30 Uhr hier im Chat.
Wer Lust hat, kann sich gerne beteiligen. ;)

  • Ich habe auch vor, meinenm PI eine Ein- und zusätzlich eine Aus- Led zu verpassen.
    Ein = grün
    Aus = rot
    An welche Kontakte müsste ich dafür ran und wie müsste ich die Schaltung aufbauen?
    danke

    Das ist aber schon aufwendig wenn ich das so sehe. hm. aber trotzdem danke. denn das habe oder hatte ich vor

  • Hoch- und runterfahren mittels Taster (incl. Status-LED)? Schau mal ob du hier fündig wirst!

  • Hi,
    würde dieser Taster generell funktionieren?: http://www.ebay.de/itm/2513624736…984.m1423.l2649
    Was mich stutzig macht ist dieser Punkt in der Artikelbeschreibung "Latching type, push it-- on, Push it again--Off". Das klingt für mich als wäre es kein echter Taster sondern ehr ein Schalter (glaube sowas nennt man Stromstoßschalter!?). Wenn dem so ist, wäre er für diesen Anwendungszweck sicherlich nicht zu gebrauchen oder?

    Und nochwas...
    Habe jetzt probiert den Softwareseitigen Teil zu machen und bin leider schon ganz am Anfang gescheitert.
    Die Installation von python-dev hat noch problemlos funktioniert, die Installation von python-rpi.gpio allerdings nicht.
    Ich erhalte folgende Ausgabe:

    Code
    pi@raspbmc:~$ sudo apt-get install python-rpi.gpio
    Reading package lists... Done
    Building dependency tree
    Reading state information... Done
    E: Unable to locate package python-rpi.gpio
    E: Couldn't find any package by regex 'python-rpi.gpio'

    Was kann ich tun?

    Einmal editiert, zuletzt von s0nny (6. Januar 2014 um 13:28)

  • sudo apt-get install python-dev
    sudo apt-get install python-pip
    sudo pip install rpi.gpio
    wget -O geekman-python-eeml.tar.gz https://github.com/geekman/python-eeml/tarball/master --no-check-certificate
    tar zxvf geekman-python-eeml.tar.gz
    cd geekman-python-eeml*
    sudo python setup.py install


    WiringPi

    WiringPi ist ein Programm, dass es ermöglicht auf einfache Art und Weise die GPIOs des Raspberry Pi zu steuern.
    Als Programmbiblothek kann es mit den verschiedensten Programmiersprachen wie C, C++, Python, Java und PHP eingebunden werden.
    Zusätzlich kann man mit dem mitgelieferten gpioutility mit kurzen Befehlen die GPIOs aus der Konsole heraus ansteuern,
    was ein Testen erheblich vereinfacht.
    Es gibt grundsätzlich zwei Möglichkeiten wiringPi zu installieren. Zum einen ist das die Installation über das so genannte Versionsverwaltungstool GIT, zum anderen über den Quellcode. Hört sich kompliziert an, ist es aber nicht.

    GIT
    Für die erste Möglichkeit müssen wir mit dem Internet verbunden sein, da wir die Dateien die wir benötigen online verfügbar haben. Um mit GIT zu arbeiten müssen wir es einmalig installieren. Dazu öffnen wir aus der grafischen Oberfläche die Administratorterminal oder bleiben in der Terminalansicht, wenn die grafische Oberfläche nicht gestartet wurde. Wir können auch Programme installieren, wenn wir kein Administrator sind, müssen dann aber vor jeden Befehl noch das Wort "sudo" setzen, das sparen wir uns mit dem Administratorterminal.
    Im Terminal tippen wir nun folgende Befehle ein. Nicht vergessen immer mit "Enter" bestätigen!

    apt-get update
    apt-get upgrade

    Macht man immer, um das System aktuell zu halten. Das eigentliche Programm GIT installiert man mit:

    apt-get install git-core

    Jetzt haben wir die Voraussetzungen geschaffen und können wiringPi über GIT installieren:

    git clone git://http://git.drogon.net/wiringPi

    Nun befindet sich die aktuellste Version von wiringPi auf dem Raspberry Pi, muss aber noch installiert werder.
    Und zwar wechseln wir in das wiringPi-Verzeichnis mit:

    cd wiringPi

    und führen das Installationsscript aus:
    ./build

    Damit wird dann wiringPi automatisch eingerichtet.

    Gruß
    doldi

  • Hm, ich will mal kurz meine Lösung zum Besten geben, die ist eigendlich sehr einfach und zuverlässig:

    2 Taster, einer auf dem Kurzschlusspin (zum Wiederhochfahren/Hard-reset), das ist hier schon ausgiebig diskutiert worden...

    Der andere Taster (zur Zeit noch ohne angeschlossenen LED, ist ein Conrad-Teil) sitzt zwischen Pin 22 (GPIO25) und Masse. Vom Pin 22 geht ein R nach 3,3V mit 10k (unkritisch).

    Meine Lösung funktioniert "out of the box", wenn das GPIO module im RasPi aktiv ist..., kein Python oder C nötig...

    2 Scripte:
    shutdown.sh

    Bash
    #!/bin/bash
    
    
    echo 22 > /sys/class/gpio/export
    echo in > /sys/class/gpio/gpio22/direction
    /etc/init.d/shutdown &

    shutdown

    Bash
    #!/bin/bash
    while true; do
            sleep 1
            i=`cat /sys/class/gpio/gpio22/value`
            if [ $i -eq "0" ]; then
                    echo "Node wird jetzt runterfahren...." | wall
                    /sbin/shutdown -h now
            fi
    done;

    Beide Scripte liegen unter /etc/init.d (ausführbar, root).
    In das File /etc/rc.local wird vor dem "exit 0" die folgende Zeile eingefügt:

    Code
    /etc/init.d/shutdown.sh

    Das wars... !

    Nach dem nächsten Neustart wird der "shutdown-Daemon" nun immer gestartet und wartet darauf, dass der Pegel auf Pin 22 auf "0" geht, dann wird runtergefahren...

    Das Anschliessen einer LED auf einem beliebigen GPIO Port läuft nach dem gleichen Muster, nur eben dann als Ausgang, ist ja hier auch schon beschrieben worden...

    m2c...
    Mfg,
    die Zentris

    Nachtrag:
    Man kann natürlich auch einen anderen Pin (als den von mir verwendeten Pin 22) nutzen, die Nutzung der vordefinierten Pins 5 (GPIO 3/SCLI) scheidet für mich aus, da dort ja der I2C Bus und auch "Geräte" dran hängen, dto. Pin 7 (GPIO 4/ 1-wire)...

  • Hm, in Ermangelung eines Rev.1 Raspi kann ich dir da keine sichere Aussage liefern, aber mein Gefühl sagt mir, dass es überall läuft:

    Die Scripts verwenden keine spezialisierten Ports, ich hab den Pin 22 genommen, weil er bei mir derzeit nicht verwendet wird und kein per default vom OS definierter Bus ist...
    Alles andere ist pures Raspian/Debian..

    Mfg.
    die Zentris

  • Linux muß erst noch meine Welt werden!

    VDR vor einigen Jahren eingerichtet (wird heute noch TÄGLICH genutzt), jetzt das Ambilight mit Hyperion erfolgreich zum laufen gebracht.

    Ich fragte eigendlich nur, weil in der Anleitung explizit GPIO3 für den Taster verwendet werden muß (Spannungsüberwachung auch in StandBy), den es aus einigen Portbeschreibungen bei dem Modell B Rev. 1 nicht geben soll.

    Oder wurden nur die Bezeichnungen der Port´s bei der Rev. 2 geändert, nicht aber deren Funktion???

  • Zwischen Rev. 1 und Rev. 2 gibt es Unterschiede in der Pinbelegung. ==> ask google :)

    GPIO 3 (Pin 5 bei Rev. 2) hat eine "Sondereigenschaft", die der Ursprungsposter (1-Tasten-Lösung bei 'Kernkrank') ausnutzt (==> siehe dort). Ob die bei Rev. 1 Boards funktioniert, kann ich dir nicht sagen, ist eben undokumentiert bzw. nur halboffiziell.

    Bei meiner Lösung (2-Tastenlösung) verzichte ich auf solche undokumentierten Ansätze (traue keinem Entwickler bis er es nicht in einer Doku festgeschrieben hat :) ) und habe eine klare Trennung zw. "Hochfahren eines RasPi, der zuvor runtergefahren wurde aber noch am Strom hängt" ==> P1-Taster-Kurzschluss und dem "Runterfahren eines laufenden RasPi mit Scriptunterstützung mit extra Taste" (das sind die Scripte + das Einhängen der Scripte als Hintergrundprogramme) in meinem Posting.

    Mfg,
    die Zentris


  • Zwischen Rev. 1 und Rev. 2 gibt es Unterschiede in der Pinbelegung. ==> ask google :)

    GPIO 3 (Pin 5 bei Rev. 2) hat eine "Sondereigenschaft", die der Ursprungsposter (1-Tasten-Lösung bei 'Kernkrank') ausnutzt (==> siehe dort). Ob die bei Rev. 1 Boards funktioniert, kann ich dir nicht sagen, ist eben undokumentiert bzw. nur halboffiziell.


    Mfg,
    die Zentris

    50% Erfolgsmeldung:

    Aufwecken aus dem StandBy geht auch bei Rev. 1 (warum auch immer?) :bravo2:

    Da auch ich als Gehäuse einen alten Sat-Receiver nutzen möchte, und der halt nur einen Powerknopf besitzt, gefällt mir die "Kernkrank"-Lösung irgendwie besser.

    Als Anzeige hätte ich aber auch gerne 2 LED´s, Rot für StandBy und Blau für Betrieb, da bei mir auch fast alle anderen Geräte so beleuchtet sind.

    Skript muß ich dafür wohl selber schreiben, oder hat da jemand was parat?

  • Klar - jeder wie er will.
    Die Power off Lösung ist ja in Ordnung, kein Prob - diese habe ich im Prinzip ja auch mit meinem py-Skript.

    Aber Leute - mir ist dieser Hardreset/ On Schaltungsvorschlag definitiv zu gefährlich.
    RaspBMC mag das gar nicht - habe zu oft zerschossene SD Kartren gehabt.

    Saubere Hardware, mit 'ner 5Volt Haltespannung bis das System sauber heruntergefahren ist - XBMC einrichten dauert schon etwas länger als Raspbian :) eben deswegen...

    Unsere Windoof Rechner fahren wir doch auch "sauber" herunter? löl

    Gruß von einem Anfänger

    :@

  • So sieht jetzt "meine" Lösung für "Raspberry PI Modell B Revision 1 (256 MB RAM)" !!! aus:

    Die ursprüngliche LED wurde durch Relaisplatine mit Optokopplern ersetzt, um damit Baugruppen nach dem Herunterfahren Spannungslos zu schalten.
    Die Betriebs-LED wurde durch Relais mit Wechslerkontakten jetzt zur StandBy LED!

    1. Taster an Pin 5 (gegen GND).

    1. Relaiseingang (über Optokoppler) an PIN 7, wobei im Script der PIN LOW-Aktiv ist, da die verwendete Relais-Karte zum aktivem Schalten eine logische 0 benötigt, nach dem Herunterfahren wird aber dieser Ausgang vom RPi hochohmig.

    Jeweils 1 Taster gegen GND an PIN 16 und PIN 18

    2. Relais (über Optokoppler) an PIN 22, welches dann im wechsel mit den Tastern an PIN 16 und 18 hin- und hergeschaltet werden kann.

    0,5 Sekunden Timing um die Prozessorlast nicht unnötig zu strapazieren (Hyperion Ambilight läuft im Vordergrund und ohne Probleme).


    Einmal editiert, zuletzt von Pieper (16. Januar 2014 um 23:41)

  • Nachtrag:

    Die Relaiskarte muß zudem über einen Levelshifter betrieben werden, da der GPIO-Port nicht die Leistung zum Treiben eines Optokopplers zur Verfügung stellt.

    Der RPi fuhr ohne Levelshifter bei mir nach dem Hochfahren sofort wieder herunter, konnte mir das aber nicht erklären. Mit dem Pegelwandler läuft das jetzt stabil.

    Pullup Wiederstände in Höhe von 10k nach +3,3V an den Eingängen vom 74HCT08 sorgen für konstante Verhältnisse im StandBy.

    Einmal editiert, zuletzt von Pieper (19. Januar 2014 um 23:42)

  • Freut mich, dass mein kleines Tut doch noch Anklang gefunden hat :)

    Das mit den Bildern ist natürlich ärgerlich. Habe die Fotos eben neu hoch geladen, den Schaltplan finde ich natürlich nicht mehr. Muss ich nächste Woche im Büro neu zeichnen und dann nachreichen.

    Mh, ich verstehe ehrlich gesagt das Problem nicht :s Der Pi wird sauber herunter gefahren und gut. Die 5V liegen immer an, sonst könnte er nicht mehr hoch fahren. Ist beim PC nicht anders, der wird nach dem runterfahren ja auch nicht vom Netz getrennt. Und der Powertaster brückt dort auch nur zwei Kontakte auf dem Mainboard. SD Karten werden so jedenfalls nicht zerschossen.

    Einmal editiert, zuletzt von Kernkrank (24. Januar 2014 um 23:30)

  • Mal eine Frage, da der Taster ja zum Hochfahren unbedingt an Pin 5 hängen muß, dort aber auch CLK vom I2C sitzt, hat das iwie eine Auswirkung auf die Funktion vom I2C?

    Ich wollte nämlich noch ein Display über I2C ansteuern, bin mir aber aufgrund dieser gegebenheiten nicht sicher, ob das so funzt.

    Display ginge auch über 4 Bit, aber IR kommt auch noch, 4 Relais sind schon dran, dann wirds knapp mit Ports.:helpnew:

  • Da ich jetzt damit Anfang den PI in ein Gehäuse zu bauen brauch ich natürlich auch ne Status LED und irgendwas um ihn auch mal so Runter zufahren.

    Jetzt hab ich mir das Tutorial zu Herzen genommen und auf meine "Bedürfnisse" angepasst. ich hab 2 LEDs (Einmal Strom 5v / Status für den PI). Mein Pi bekommt die 5V per GPIO und ich hab noch einen Kompletten "ausschalter" mit eingebaut. Nun soll alles über diese Platine laufen.

    Eigentlich wollt ich nur nochmal nachfragen ob das alle so in Ordnung ist. Da es ja auf diesem Tutorial Aufbaut hab ich es hier im Thread gepostet.

  • Hallo!

    Zunächst vielen Dank für das TuT - gerade für Rev1-Besitzer ist die GPIO-Variante ja offenbar die einzige Möglichkeit für's 'Anmachen-durch Taster'.
    Leider bin ich bzgl. der Pin-Benennung recht verwirrt.

    Du schreibst, dass (am Rev2-Pi) der Pull-Up-Widerstand an Pin#5 (GPIO-3) angeschlossen wird, in Rev1 aber Pin#5 = GPIO-1 ist. Muss der Widerstand denn nun (Rev-unabhängig) an Pin#5 oder GPIO-3 (wenn letzteres - auf welchem Pin in Rev1 liegt denn GPIO-3) angeschlossen werden?


    Auch schreibst Du: 'Ich benutze aus Gewohnheit bei der GPIO Pin Bezeichnung die Zählweise, wie sie auf dem Board aufgedruckt ist.'.
    Bei mir habe ich mit der Lupe nach einem Aufdruck um P1 rum gesucht (Ober- und Unterseite der Platine) - nichts! Auf Deinem Foto von Rev2 konnte ich auch keine Pin-Bezeichnungen erkennen. Wo genau ist denn (bei Dir) die Bezeichnung aufgedruckt?

    Da man das gute Stück offenbar fix gen Himmel schicken kann, wenn man die Pins falsch beschaltet, hätte ich hier lieber gewissheit, bevor ich mit dem löten loslege...

    Mein Versuch, das ganz mit Hilfe von https://projects.drogon.net/raspberry-pi/wiringpi/pins/ zu verstehen, hat auch nicht wirklich geholfen. Demnach heist Pin#5 SCL0, entspricht in Rev 1 GPIO-1, in Rev2 jedoch GPIO-3 und wird in wiringPi als Pin 9 angesprochen?!?
    In http://www.rn-wissen.de/index.php/Raspberry_PI:_GPIO hießt derselbe pin übrigens SCL1 und nicht SCL0...
    Da fragt man sich ja schon, ob da einer sitzt und versucht, das ganze möglichst zu verkomplizieren...
    Vielleicht ist das ja kätzerisch, aber, warum kann die Pin-# nicht gleich der GPIO-# nicht gleich der wiringPi-Pin# sein?
    Bin ich zu naiv?

    Gruß,
    Kai

  • Hier mal 2 Ausschnitte meiner z.Z. funktionierende Lösung auf dem Rpi REV1. !!!




    Wobei ja auf dem Pin 5 in der RPI Rev.1 GPIO 1 liegt, bei der Rev.2 GPIO 3 liegen soll (habe selber nur Rev1), aber bei beiden Versionen auch noch das Clock-Signal vom I2C-Bus sein könnte, je nachdem, wie die laufende SW diesen Pin anspricht.

    Da aber die 2.Board-Version über 2 I2C-Busse verfügt, liegt bei Rev2 dort der Clock vom 2. Bus (zum besseren durcheinanderbringen "I2C 1" genannt) und bei der Rev1 "I2C 0", logisch oder?

    Ersteinmal eine vorläufige Lösung für mich, da ich auch noch ein Display am Ambilight betreiben möchte.
    Wie man sehen kann, sind die belegbaren IO-Ports doch schon relativ knapp geworden (Taster, Relais, IR.Fernbedienung).
    Display mit 4 Bit-Ansteuerung kann ich somit vergessen und brauche daher den (hab´ ja nur einen [Rev1]) I2C demnächst fürs Display.

    Werde somit noch ein 6. Relais einbauen, der mir den PIN 5 nach dem Hochfahren vom Taster trennt (PIN 5 zwangsweise, weil nur darüber Hochfahren möglich, aber I2C noch inaktiv) und dann den Taster auf PIN11 GPIO7 legt, worauf über das Skript wieder abgefragt werden kann, wann herunter gefahren werden soll (legt daraufhin den Taster wieder auf PIN 5).

    Das Ganze ist verwirrend, weil zudem jeder, der eine Beschreibung des GPIO-Ports mitliefert, meistens nur seine benötigte Funktion angibt, aber die Funktionen der Port´s und Pin´s SW-seitig verschieden genutzt werden können (einer der großen Vorteile des Raspberry´s).

    PS: Der 2. I2C-Bus liegt beim Rev.2-Boards auf einer anderen Buchsenleiste (ist dann aber der I2C 0 genannte).

    Einmal editiert, zuletzt von Pieper (13. Februar 2014 um 23:08)

  • Davor habe ich das Skript, wie du vermutet hattest, mit Notepad geschrieben und per FTP auf den Pi gebracht.

    Moin,

    das liegt einfach daran, dass du vermutlich beim FTP client nicht auf ASCII "Übertragung" gestellt hast sondern standardmäßig auf Binary hast stehen lassen.


    Es gibt eine Linux/Unix Befehl der eine Textdatei mit dem Problem korrigiert: dos2unix bzw. umgekehrt unix2dos Jenach dem welches Zeilenendezeichen man möchte.

    Gruß Lunepi


    Auch schreibst Du: 'Ich benutze aus Gewohnheit bei der GPIO Pin Bezeichnung die Zählweise, wie sie auf dem Board aufgedruckt ist.'.
    Bei mir habe ich mit der Lupe nach einem Aufdruck um P1 rum gesucht (Ober- und Unterseite der Platine) - nichts! Auf Deinem Foto von Rev2 konnte ich auch keine Pin-Bezeichnungen erkennen. Wo genau ist denn (bei Dir) die Bezeichnung aufgedruckt?

    Da man das gute Stück offenbar fix gen Himmel schicken kann, wenn man die Pins falsch beschaltet, hätte ich hier lieber gewissheit, bevor ich mit dem löten loslege...

    Ich bin zwar gerade erst auf diese Anleitung gestossen, aber ich bin sicher er meint nur, dass er die PINs einfach durch gezählt hat beginnend bei PIN 1.
    In der Anlitung hat er die GPIO Nummerierung in Klammern gesetzt.

    Anders ausgedrückt: Er hält sich nicht an die Bezeichnungen sondern zählt einfach durch.

    Gruß Lunepi

    --
    man ist das System-Anzeigeprogramm für die Handbuchseiten von Linux.

    Einmal editiert, zuletzt von Lunepi (21. Februar 2014 um 13:45)


  • Du schreibst, dass (am Rev2-Pi) der Pull-Up-Widerstand an Pin#5 (GPIO-3) angeschlossen wird, in Rev1 aber Pin#5 = GPIO-1 ist. Muss der Widerstand denn nun (Rev-unabhängig) an Pin#5 oder GPIO-3 (wenn letzteres - auf welchem Pin in Rev1 liegt denn GPIO-3) angeschlossen werden?

    Auch schreibst Du: 'Ich benutze aus Gewohnheit bei der GPIO Pin Bezeichnung die Zählweise, wie sie auf dem Board aufgedruckt ist.'.
    Bei mir habe ich mit der Lupe nach einem Aufdruck um P1 rum gesucht (Ober- und Unterseite der Platine) - nichts! Auf Deinem Foto von Rev2 konnte ich auch keine Pin-Bezeichnungen erkennen. Wo genau ist denn (bei Dir) die Bezeichnung aufgedruckt?

    Da man das gute Stück offenbar fix gen Himmel schicken kann, wenn man die Pins falsch beschaltet, hätte ich hier lieber gewissheit, bevor ich mit dem löten loslege...

    Hallo Kai,

    jetzt verstehst du vielleicht, warum ich die einfache Methode mit den Pins bevorzuge ;)

    Bei dem 'aufgedruckt' ist wohl der Fachidiot in mir durchgekommen. Am unteren linken Pin ist ein kleines Kästchen aufgedruckt, was für mich die Pin-Zählung sofort klar gemacht hat:

    Pin links unten = 1
    Pin links oben =2
    Pin 2.links unten = 3
    Pin 2.links oben = 4
    usw.

    Ich hab das mal in 'markiert' geändert.

    Bei der Methode mit GPIO.setmode(GPIO.BOARD) ist die Belegung bei allen Modellen und Revisionen gleich. Wenn du dich also an das Tut hälst, dann kann auch nichts schief gehen :thumbs1:

    Diskussionen dieser Art hatte ich hier schon öfters, bei Zeit&Muße werde ich mal ein erklärendes Bild zeichnen und einbauen.

Jetzt mitmachen!

Du hast noch kein Benutzerkonto auf unserer Seite? Registriere dich kostenlos und nimm an unserer Community teil!