Instale botões para desligar e reiniciar a Raspberry Pi 11

Está desenvolvendo um novo projeto embarcado? Aprenda a desligar e reiniciar a Raspberry Pi com segurança sem a necessidade do uso de teclado, mouse ou terminal com conexão SSH.

Botões para desligar e reiniciar a Raspberry Pi

Desligar e reiniciar a Raspberry Pi de forma segura mediante o uso de botões é muito importante para projetos embarcados, pois minimiza os problemas causados por dados corrompidos que pode acontecer ao desligar a Raspberry Pi diretamente pela fonte. Ou seja, quando o sistema Raspbian estiver executando algum programa será possível executar paralelamente os comandos “sudo shutdown -h now” e “sudo shutdown -r now” através da GPIO no modo auto RUN de forma rápida e fácil.Gostou da idéia? Então continue lendo o post!

Material necessário

Antes de tudo é necessário configurar a sua Raspberry Pi e deixa-lá operacional. Para isso veja o post Primeiros Passos com Raspberry Pi e Linux.

Para a realização deste projeto você vai precisar de:

Circuito esquemático para desligar e reiniciar a Raspberry Pi

O circuito esquemático do projeto é bem simples, pode ser feito através de cabos jumpers, wire-up com auxilio de uma protoboard, ou seja, basta conectar duas chaves tácteis push-button aos pinos da GPIO de sua Raspberry Pi.

A chave táctil, também conhecida como push button ou chave de toque, fecha o contato quando for pressionada.

Chave tactil

Os contatos normalmente aberto (NA) da primeira chave táctil conectamos no pino 18 e no pino GND da GPIO, esse comando desligará o sistema operacional.

Os contatos normalmente aberto (NA) da segunda chave táctil conectemos no pino 23 e no pino GND da GPIO, esse comando reinicializara o sistema operacional.

Conecte as chaves tácteis no conector GPIO seguindo o esquema de ligação abaixo. Utilizaremos apenas o pino 14 (GND), o pino 12 (GPIO18) e o pino 16 (GPIO23).

Circuito esquemático para desligar e reiniciar a Raspberry Pi

Com o circuito pronto, precisamos apenas programar a Raspberry Pi para desligar e reiniciar.

Código-fonte

O código-fonte do projeto, escrito em Python, pode ser visto abaixo:

Primeiramente importamos as bibliotecas que iremos utilizar, configuramos os pinos da GPIO da Raspberry Pi no modo Broadcom, habilitamos o pull-up interno. Dessa forma, é necessário que a Raspberry Pi receba um sinal de nível lógico baixo para ser acionada.

# Desligar e reiniciar a Raspberry Pi através do uso de chave táctil push button.

import RPi.GPIO as GPIO
import time
import os

# Numero dos pinos da Raspberry Pi configurada no modo Broadcom.
# Pull-up interno habilitado, necessita de um sinal nivel lógico baixo para ser acionado.
GPIO.setmode(GPIO.BCM)
GPIO.setup(18, GPIO.IN, pull_up_down=GPIO.PUD_UP)
GPIO.setup(23, GPIO.IN, pull_up_down=GPIO.PUD_UP)
# Função habilita os comandos quando os botões forem pressionados.
def Desligar(channel):
    os.system("sudo shutdown -h now")
def Reiniciar(channel):
    os.system("sudo shutdown -r now")
# Executa as funções para desligar e reiniciar o sistema raspbian.
GPIO.add_event_detect(18, GPIO.FALLING, callback=Desligar, bouncetime=2000)
GPIO.add_event_detect(23, GPIO.FALLING, callback=Reiniciar, bouncetime=2000)

# Agora espere o comando ser finalizado.
while 1:
    time.sleep(1)

Agora precisamos dar um nome para nosso programa executável. Para isso, abra o terminal e digite o seguinte comando:

sudo nano RPiShutdown.py

Programa para reiniciar e desligar a Raspberry Pi

Copie e cole (você pode usar o botão direito do mouse para isso) o código fonte diretamente no terminal, conforme imagem abaixo:

Colando o programa para reiniciar e desligar a Raspberry Pi

Agora pressione Ctrl+X, depois Y (Inglês) ou S (Português) para sair e salvar o arquivo, conforme imagem abaixo:

Editando o programa para reiniciar e desligar a Raspberry Pi

Para este código fonte ficar sempre rodando durante a inicialização do sistema, abra o arquivo na pasta indicada abaixo:

sudo nano /etc/rc.local

Rodar o programa assim que ligar

Adicione o comando de execução na penúltima linha antes do comando exit 0 como no exemplo abaixo. Não se esqueça do & no final para o shell script não ficar preso esperando uma execução do programa. Veja a seguir:

python3 /home/pi/RPiShutdown.py &

Executa o programa assim que liga a placa

 

Agora pressione Ctrl+X, depois Y (Inglês) ou S (Português) e a tecla ENTER para sair e salvar o arquivo.

Pronto! O arquivo foi gerado, e ele já está em modo auto RUN. Agora pressione um dos botões e veja sua Raspberry Pi desligando ou reiniciando.

Gostou do post sobre Como instalar botões para desligar e reiniciar a Raspberry Pi? Deixe seu comentário logo abaixo.

Faça seu comentário

Acesse sua conta e participe

11 Comentários

  1. Olá! Obrigado pelo artigo, queria um sistema que o meu raspberry sempre reinicie quando for desligado. Isso serve para situações de trabalho em campo para que sempre que tiver energia ele esteja ligado coletando dados para mim. Se ao invés do botão eu colocar um circuito sem o botão com um fiozinho que sempre estará reiniciando.. Nesta configuração vai reiniciar o raspberry a todo momento ou somente quando ele estiver desligado?

    1. Olá Pedro,

      Não entendi direito o que você deseja fazer. Você quer que ele fique reiniciando o te4mpo inteiro?

      Abraço!
      Rosana – Equipe FilipeFlop

  2. Fico em dúvida se não estamos trocando 6 por meia – dúzia. O uso do botão gpio desliga também a energia, ou vai continuar “aceso”

  3. Muito legal a ideia! parabéns!
    estou trabalhando em um projeto em que o rasp será alimentado por bateria. Além de desligar o board, preciso também de um mecanismo para ligar ele (vou usar um board de supply e bateria). o Rasp possui os botões de run que podem ligar o OS a partir de um curto, mas o meu desafio é ter o mesmo botão para ligar e desligar o rasp. Vocês conhecem algum projeto nesta linha?

  4. Olá Lucas!

    Muito interessante e útil essa ideia! Ela funcionaria em outras versões de Raspberry, como o Raspberry PI 0 ?

    1. Olá, sim!

      É possível instalar em qualquer modelo de placa RPio

      PiZeroW, PiB3+, PiA, Pi4

  5. Olá a todos!
    Eu escrevi o programa conforme o tutorial e segui os demais passos, porém, não está funcionando.
    Montei o hardware certinho mas alguma coisa(que ainda não sei o que é) não está funcionando; gostaria da ajuda de quem puder me ajudar, obrigado.

    1. Olá, poderia descrever melhor o seu problema?
      Pode até ser que você conectou os botoes e outras portas e não na que foi passado o esquema a cima. Jogue no google (RPi.GPIO), que é a biblioteca usada no código a cima, e olhe o esquema das portas direitinho.

  6. Excelente tutorial.

  7. sudo nano /etc/rc.local

    Arquivo inexistente.

    Gilson Vieira Castro Júnior
    1. Olá Gilson, boa tarde!

      Você digitou este comando direto do terminal?

      Att;