Création d'un bouton d'arrêt / réveil?

10

J'ai configuré un bouton de réveil à l'arrêt à l'aide des broches 5 et 6. Ces deux broches, une fois connectées, réinitialiseront l'alimentation et redémarreront à l'arrêt. Je veux utiliser ce même bouton, si je le peux, pour exécuter une commande qui, lorsqu'elle est enfoncée, arrêtera l'ordinateur à l'aide sudo halt. Serait-ce possible? Pour le sudo haltbouton, je devrais me connecter de GPIO 1 au bouton, puis diviser en GPIO 6 (masse) et une broche GPIO générale. Je ne sais pas s'il est possible / sûr de connecter GPIO 5 à cela non plus.

Ryan McClure
la source

Réponses:

8

Pas besoin d'ajouter d'autres broches GPIO. Vous pouvez simplement utiliser les mêmes broches pour votre bouton d'arrêt.

Voici un code python qui interrogera la broche 5. Lorsque le bouton est enfoncé, la broche 5 est tirée à la masse (broche 6), et le code lira un LOW. Dans ce cas, il exécutera la haltcommande

#!/usr/bin/python
import RPi.GPIO as GPIO
import time
import subprocess

GPIO.setmode(GPIO.BOARD)
# set pin 5 to input, and enable the internal pull-up resistor
GPIO.setup(5, GPIO.IN, pull_up_down=GPIO.PUD_UP)

oldButtonState1 = True
while True:
    buttonState1 = GPIO.input(5)

    if buttonState1 != oldButtonState1 and buttonState1 == False :
        # print "Button 1 pressed"
        subprocess.call("halt", shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE)

    oldButtonState1 = buttonState1

    time.sleep(.1)

PS. Je ne connaissais pas la fonction Wake from Halt. Merci à toi je sais maintenant! Donc merci.

Gerben
la source
1
Brillant! Je ne savais pas que je pouvais tout faire sur seulement 5 et 6. Merci! :)
Ryan McClure
Donc, nous avons tous les deux appris quelque chose aujourd'hui (-:
Gerben
Plus une note pour moi. Vous pouvez même modifier le code pour qu'une presse fasse un redémarrage et une pression prolongée pour faire un arrêt (ou vice versa).
Gerben
De quelle manière votre script s'exécute-t-il en continu, c'est-à-dire démonisé? Avez-vous remarqué une baisse des performances lors du visionnage de films?
athanassis
1
En effet, c'est très long, mais pas lorsque le CPU atteint 100% pendant quelques secondes lorsque, par exemple, le décodage d'un film Full HD. Je vais essayer, les tests ne font jamais de mal. Merci pour les commentaires!
athanassis
2

Un bouton de réinitialisation peut être attaché à l'en-tête P6, avec lequel le Pi peut être réinitialisé. Court-circuiter momentanément les deux broches du P6 entraînera une réinitialisation logicielle du processeur (ce qui peut également «réveiller» le Pi de l'état d'arrêt / d'arrêt)

cf

hiro345
la source