sexta-feira, 13 de dezembro de 2013

Usando o botão de inicialização para desligar o Rasberry Pi

Há pouco tempo postei como fazer e utilizar um botão para inicializar o Raspberry Pi, só que para desligar o sistema é necessário monitorar o GPIO3(pino 5) utilizado no artigo anterior. Isso pode ser feito sem qualquer modificação fisíca no nosso botão pois na placa o GPIO3(pino 5) já é ligado a um resistor de 1.8k (Errata: o resistor na verdade é do pull up e não em série. Aconselho o uso de um resistor de 470 Ohm no botão para segurança). O código que fiz a seguir faz todo trabalho sujo, roda como daemon e no caso do Raspbian pode ser executado como usuário comum se preciso.




Compile o código:
gcc codigo.c -o codigo

E execute:
./codigo

Caso não tenha erros, o processo iniciado ficará rodando como um daemon indefinidamente, monitorando o gpio3. Após apertar o botão o processo de desligamento é iniciado, chamando "shutdown -h now".

Referência:
http://ryniker.ods.org/raspberrypi/MagPi/GPIO_interrupts

28 comentários:

  1. qual o programa para compilar o código?

    ResponderExcluir
    Respostas
    1. GCC, via terminal gcc codigo.c -o codigo

      Excluir
    2. Pois...eu ainda sou mesmo novato...
      Pode indicar-me um tutorial?

      Excluir
    3. É relativamente simples, você somente precisará salvar o código com algum nome, ex: codigo.c, irá precisar abrir um terminal no seu raspberry pi, ir até a pasta que está salvo o arquivo, pelo terminal, utilizando cd /caminho/da/pasta, se tiver salvo na sua pasta "home" não precisará mudar de pasta, aí é somente compilar com o comando "gcc codigo.c -o codigo" e executar ./codigo e já poderá testar o botão.

      Excluir
  2. Tem como fazer esse código funcionar com o botão sendo usado no pino p6?

    ResponderExcluir
    Respostas
    1. No meu conhecimento não, pois o P6 é ligado em um pino do SoC que não é um GPIO, o que funcionaria é para ligar a placa ou fazer hardreset, mas desligar não.

      Excluir
  3. Boa Noite,
    Gostaria de saber se vc teria um codigo para desligar a ventoinha que estah ligado ao PI pelos pinos de +5V e GRUND.

    Grato,
    Luis Ferreira

    ResponderExcluir
    Respostas
    1. Olá, com a ventoinha ligada diretamente dessa forma não tem como, só há controle nos pinos GPIOs, entretanto você também não pode ligar diretamente neles pois não suportam a corrente da ventoinha, podendo até queimar.

      Uma das soluções mais básicas é utilizar um transistor (em conjunto com um resistor e diodo de protecao) para controlar essa ventoinha pelo GPIO.

      Excluir
    2. Só funciona no raspbian ou em qualquer sistema instalado nele?

      Excluir
    3. tiago, se estiver falando do código do post, na teoria em qualquer sistema (desde que linux) instalado no Raspberry Pi deve funcionar desde que tenha acesso ao sudo pelo usuário, para utilizar o comando shutdown, eu não testei em outros, caso não funcione em algum me avise!

      Excluir
  4. Este comentário foi removido pelo autor.

    ResponderExcluir
  5. Este comentário foi removido pelo autor.

    ResponderExcluir
  6. Uma pergunta, fazendo esse código, o botão da matéria anterior vai servir para ligar e desligar?

    E esse código vai servir para w10?

    ResponderExcluir
    Respostas
    1. Sim, funciona para ligar e desligar, pois para ligar ele não depende do código. O código não roda em windows 10 iot, só em linux.

      Excluir
  7. Este comentário foi removido pelo autor.

    ResponderExcluir
  8. Outra pergunta, é possível fazer um boot de inicialização para alternar entre o w10 e recalbox emulador

    ResponderExcluir
    Respostas
    1. Olá, na teoria é possível, entretanto não vi ninguém até agora fazer tal coisa. Os dual boots que vi no raspberry pi eram feitos com sistemas linux.

      Excluir
  9. Outra pergunta, é possível fazer um boot de inicialização para alternar entre o w10 e recalbox emulador

    ResponderExcluir
  10. Eu salvo no caso esse código em qual extensão? sou novato no raspberry. Esse código serve pro B+?

    Obrigado

    ResponderExcluir
  11. Não funcionou no Pi3. Tenho o Pi2 e funcionou perfeitamente.
    Tem ideia do que pode ser ?

    Aliás tenho outros scripts em Phyton para ler os GPIOS que só funciona no Pi2, será que meu Pi3 esta ferrado os GPIOS ?

    ResponderExcluir
    Respostas
    1. Mas que estranho, nem rodando como root eles funcionam?

      Excluir
    2. Conseguiu fazer funcionar? o meu tbm não funcionou

      Excluir
    3. Consegui fazer funcionar dessa maneira, porém não sei se é a mais correta, inclui a linha abaixo no arquivo /etc/rc.local

      /home/pi/./codigo &

      e agora esta desligando pelo botão

      Excluir
    4. Olá Rodrigo, é bem estranho esse problema. Assim que meu Raspberry Pi 3 chegar irei testar para ver o que ocorre e dou um parecer a cerca disso.

      Excluir
    5. Ola!!! Gostaria de testar essa possibilidade do botão, tanto de ligar, quanto de desligar no meu Rpi3B. Você saberia dizer quais seriam os pinos que devo usar no meu GPIO pois sei que houve uma mudança em relação aos primeiros RPi. Muito obrigado!!!

      Excluir
  12. Este comentário foi removido pelo autor.

    ResponderExcluir
  13. Funciona no PI4? O resistor eu ligo entre o botão e o p5 ou o p6? Ou não faz diferença?

    ResponderExcluir