Criando botão de parada / ativação?

10

Eu montei um botão de ativação por interrupção usando os pinos 5 e 6. Esses dois pinos, quando conectados, reiniciarão a energia e serão reiniciados a partir da interrupção. Desejo usar esse mesmo botão, se puder, para executar um comando que, quando pressionado, desligará o computador usando sudo halt. Isso seria possível? Para o sudo haltbotão, eu precisaria conectar do GPIO 1 ao botão e depois dividir para GPIO 6 (terra) e um pino GPIO geral. Também não sei se é possível / seguro conectar o GPIO 5 a isso.

Ryan McClure
fonte

Respostas:

8

Não há necessidade de adicionar outros pinos GPIO. Você pode simplesmente usar os mesmos pinos para o seu botão de parada.

Aqui está um código python que pesquisará o pino 5. Quando o botão é pressionado, o pino 5 é puxado para o solo (pino 6), e o código exibirá LOW. Nesse caso, será executado o 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)

PS. Eu não sabia sobre a função Wake from Halt. Graças a você eu sei agora! Então obrigado.

Gerben
fonte
11
Brilhante! Não sabia que podia fazer tudo com apenas 5 e 6. Obrigado! :)
Ryan McClure
Então, nós dois aprendemos algo hoje (-:
Gerben
Mais uma nota para mim. Você pode até modificar o código para fazer com que uma impressora faça uma reinicialização e pressione e mantenha pressionada para fazer um desligamento (ou vice-versa).
Gerben 26/01
De que maneira seu script está sendo executado continuamente, ou seja, daemonizado? Você notou alguma diminuição no desempenho ao assistir filmes?
Athanassis
11
De fato, leva muito tempo, mas não quando a CPU atinge 100% por alguns segundos quando, por exemplo, decodifica um filme em HD completo. Vou tentar, testar nunca é demais. Obrigado pelo feedback!
Athanassis 30/10
2

Um botão de redefinição pode ser anexado ao cabeçalho P6, com o qual o Pi pode ser redefinido. Um curto-circuito momentâneo dos dois pinos do P6 causará uma redefinição suave da CPU (que também pode 'acordar' o Pi do estado de parada / desligamento)

cf

hiro345
fonte