Botão de desligar Raspberry Pi Portugal
Artigos

Botão de desligar RaspberryPi por GPIO

Descrição

Uma das desvantagens do Raspberry Pi é o facto de não ter uma forma clara de desligar a placa sem interferir com o terminal ou com o interface gráfico do sistema operativo que tenhamos instalado. Ele não tem um Botão de desligar como qualquer outro dispositivo eletrónico que se preze.

Como você sabe, desligar o Raspberry Pi “quente”, ou seja, puxando o cabo de alimentação ou desligando o interruptor do filtro de linha onde ele está ligado sem fechar antes o sistema operativo fará com que o sistema de arquivos seja corrompido e que haja uma série de procedimentos críticos que se tenham de efectuar no momento de encerramento do sistema.

Neste pequeno tutorial mostra-se como montar um Botão de desligar no Raspberry Pi, mas o melhor de tudo é que podemos modificar o comando a ser executado, pressionando o botão para que possamos dar-lhe qualquer uso que imaginemos, como ligar e desligar o WiFi ou reiniciar o Raspberry Pi. Isso vos deixo ao vosso gosto….

 

Montagem e ligações do Botão de desligar

Para montar o botão, pode usar uma breadboard para fazer ensaios ou soldar os componentes directamente. Na imagem mais abaixo, pode ver o esquema de ligações, como você vai ver, eu usei o pino de saída 3.3V e um pino GND, também o pino GPIO nº4 (BCM). Quando se pressiona o botão, cria-se um curto circuito entre o pin 3.3V e GND, por isso, eu coloquei uma resistência de 330 Ohms para não queimar a placa.

interruptor de desligar raspberry pi Portugal
interruptor de desligar raspberry pi Portugal

Script Python

Uma vez montado o esquema, falta-nos iniciar um pequeno script no Python que vai detectar as pulsações do botão e lançará o comando de desligar e de reiniciar do nosso Raspberry Pi

Este seria o código do nosso script de desligar. Na linha, poderá ver “sudo halt” que é o comando para desligar o Raspberry Pi, pode trocá-lo por “sudo reboot” ou qualquer outro comando que queira executar quando pressiona o botão.

import os
import time
import RPi.GPIO as GPIO
GPIO.setmode(GPIO.BCM)
GPIO.setup(4,GPIO.IN)
 
prev_input = 0
while True:
  input = GPIO.input(4)
  if ((not prev_input) and input):
    os.system("sudo halt")
  prev_input = input
  #Pequeña pausa
  time.sleep(0.05)

Para iniciar o script, é so escrever para o terminal:

sudo python shutdown.py

Automatização

O problema deste sistema é que temos que iniciar o script manualmente  a partir da consola cada vez que arrancamos o Raspberry Pi, por isso vamos automatizar o processo. Criamos um terminal e escrevêmos:

sudo vi /etc/rc.local

Uma vez aberto escrevemos “sudo vi /etc/rc.local” mesmo antes de “exit 0”, acabando assim:

sudo python shutdown.py
exit 0

Agora podemos reinicar ou desligar o nosso Raspberry Pi sem problemas porque a próxima vez que arrancar, o script inciar-se-á automaticamente.

Atualização: Encontrei outro script en Python que serve para o mesmo e consome menos CPU!

# Importamos os módulos para enviar comandos ao sistema e acceder aos pinos GPIO
from subprocess import call
import RPi.GPIO as gpio
 
# Definimos una função para que o script no se detenha
def loop():
    raw_input()
 
# Definimos una função que se vai executar quando se chama a interrupção
def shutdown(pin):
    call('halt', shell=False)
 
gpio.setmode(gpio.BOARD) # Colocamos a placa em modo BOARD
gpio.setup(4, gpio.IN) # Configuramos o pin 4 como entrada
# Configuramos una interrupção para quando se apertar o botão 
gpio.add_event_detect(4, gpio.RISING, callback=shutdown, bouncetime=200)
 
loop() # Iniciamos a função para que o script continue em marcha

Gostaram deste artigo ? Deixem o vosso comentário no formulário a baixo.

Não se esqueçam de fazer like na nossa página no facebook.

Todos os produtos utilizados neste artigo podem ser encontrados na loja de componentes eletrónicos ElectroFun.

Comments

comments

Deixar uma resposta

Este site utiliza o Akismet para reduzir spam. Fica a saber como são processados os dados dos comentários.