joi, 19 martie 2015

Adauga buton de shutdown / reset la un Raspberry Pi

Mini-calculatorul Raspberry Pi este calculator foarte simplu, insa daca dorim sa il oprim (shutdown) sau sa il repornim (reset, reboot), putem face asta in mod brutal intrerupind alimentarea (care poate strica sistemul de operare de pe memoria SD) sau din linia de comanda cu comenzi specifice de Linux (de exemplu "sudo shutdown -h now") - asta daca avem o tastatura si un monitor conectate la RPi.

Raspberry Pi nu vine cu buton de oprire sau de reset, dar putem adauga noi un buton in cativa pasi simpli. Butonul este foarte util cand RPi este folosit de sine statator, pur si simplu avem o modalitate prin care repornim calculatorul sau il oprim fara a afecta sistemul de operare (ganditi-va: acelasi lucru se petrece si cu un PC cu Windows, il scoti din priza, la repornire "simte" ca nu a fost oprit corespunzator si incearca sa repare eventuale stricaiuni la sistemul de operare cauzate de oprirea brutala).

O comanda Linux de genul "sudo shutdown -h now" realizeaza o multime de pasi in fundal astfel incat toate procesele sa fie oprite corect, logurile si alte fisiere sa fie complete si inchise etc. Cum nu avem o tastatura si un monitor conectate, legam un buton a carui apasare sa dea placii comanda de shutdown. Butonul este un buton simplu cu revenire (push button) si il legam intre GND si GPIO7 pe conectorul de 26 de pini - vezi mai jos. Nu avem nevoie de rezistori de pull-up sau pull down, RPi are asa ceva intern.



Buton + 2 fire + conector header 2.54mm mama intre GND si GPIO7 (e nevoie de ciocan de lipit)

Am facut o carcasa din plastic lipit cu hotglue, am plasat butonul pe carcasa tot cu hotglue

Carcasa saracului :) si firele de la buton

Partea din carcasa unde sunt conectorii importanti, de asemenea si un decupaj pt a vedea LEDurile

Dupa apasarea butonului de shutdown, se asteapta pina toate 
LEDurile se sting (1 minut e de ajuns, nu am cronometrat), mai putin LEDul PWR (rosu) 




Mai ramine sa implementam partea de soft care sa trateze evenimentul (creeam si editam un fisier in directorul ShutdownButton (creare director cu mkdir ShutdownButton):
sudo nano /home/pi/ShutdownButton/pishutdown.py):

import RPi.GPIO as GPIO
import time
import os

GPIO.setmode(GPIO.BCM)  

GPIO.setup(7, GPIO.IN, pull_up_down = GPIO.PUD_UP)

def Int_shutdown(channel):  
         os.system("sudo shutdown -h now")
 
GPIO.add_event_detect(7, GPIO.FALLING, callback = Int_shutdown, bouncetime = 2000)

while 1:
        time.sleep(1)
 
 (salvam fisierul)
  Adaugam in cron ca la repornire sa se execute scriptul care citeste butonul (sudo crontab -e) si dam un reboot:
#de adaugat in cron
@reboot sudo python /home/pi/ShutdownButton/pishutdown.py
 

   (Inspiratie: http://spaceblogs.org/2013/06/03/shut-down-your-raspberry-pi-on-button-press-and-add-reset-function/)

Niciun comentariu:

Trimiteți un comentariu