¿Creando el botón detener / despertar?

10

He armado un botón de activación desde el alto usando los pines 5 y 6. Estos dos pines, cuando están conectados, restablecerán la alimentación y se reiniciarán desde el alto. Quiero usar este mismo botón, si puedo, para ejecutar un comando que, cuando se presiona, apagará la computadora usando sudo halt. ¿Sería esto posible? Para el sudo haltbotón, necesitaría conectarme desde GPIO 1 al botón, luego dividirlo a GPIO 6 (tierra) y un pin GPIO general. No sé si es posible / seguro conectar GPIO 5 a esto tampoco.

Ryan McClure
fuente

Respuestas:

8

No es necesario agregar otros pines GPIO. Podrías usar los mismos pines para tu botón de detención.

Aquí hay un código de Python que sondeará el pin 5. Cuando se presiona el botón, el pin 5 se pone a tierra (pin 6), y el código leerá un LOW. En ese caso se ejecutará el haltcomando

#!/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)

PD. No sabía sobre la función Wake from Halt. Gracias a ti lo sé ahora! Así que gracias.

Gerben
fuente
1
¡Brillante! No me di cuenta de que podía hacerlo todo con solo 5 y 6. ¡Gracias! :)
Ryan McClure
Entonces, ambos aprendimos algo hoy (-:
Gerben
Más de una nota para mí. Incluso podría modificar el código para que una prensa haga un reinicio y una presión y mantenga presionada para hacer un apagado (o viceversa).
Gerben
¿De qué manera su script se ejecuta continuamente, es decir, daemonized? ¿Has notado alguna disminución en el rendimiento al mirar películas?
athanassis
1
De hecho, es mucho tiempo, pero no cuando la CPU alcanza el 100% durante unos segundos cuando, por ejemplo, decodifica una película Full HD. Lo intentaré, las pruebas nunca están de más. ¡Gracias por la respuesta!
athanassis
2

Se puede adjuntar un botón de reinicio al encabezado P6, con el cual se puede reiniciar el Pi. Cortar momentáneamente los dos pines de P6 juntos provocará un reinicio suave de la CPU (que también puede 'despertar' al Pi del estado de parada / apagado)

cf

hiro345
fuente