Lo primero los agradecimientos a "
MrBeaker" del "foro de raspberry", por probar, y realizar este turorial que encontró en un foro guiri y por dar informacion adicional.
(si en algún momento no estas deacuerdo con esta publicación contacta con migo sin problema)
Deciros que tras probar varios scripts distintos este metodo es el mas correcto y funciona de lujo.
Al lio
MrBeaker comenta tal que asi:
Buenas compañeros, ando realizando un proyecto de raspberry + carcasa NES y necesitaba poder apagar y encender la Raspberry a través de un botón.
Buscando encontré un tutorial que explica a la perfección el proceso para poder apagar nuestra plaquita a través del GPIO.
Consiste en la programación de un script en python, y el tutorial en cuestión es el siguiente
http://forum.arcadecontrols.com/index.php?topic=147052.0Aunque está genialmente explicado ahí, paso a ponerlo en español.
Necesitamos:
- Una Raspberry Pi
- Un pulsador
- Dos cables para la conexión entre la Raspberry y el pulsador
El pulsador lo tenemos que conectar a los pines 5 y 6 del GPIO. Con el simple hecho de conectar un pulsador en esos pines tendremos la capacidad de poder arrancar la placa a través del botón sin ninguna linea de código extra ni configuración. Sin embargo lo interesante del asunto es poder tanto encender como apagar la raspberry, por lo que el proceso de apagado si que tiene que ser programado a través de un script.
En pocas palabras, el objetivo final es hacer un programilla que la raspberry ejecute al arrancar y que se quede esperando indefinidamente una acción que nosotros le digamos (que en nuestro caso será pulsar el botón). Una vez que se realice esa acción forzamos el apagado de la placa, fácil! :vago
Lo primero que tenemos que hacer es acceder por SSH a nuestra Raspberry, y una vez dentro ejecutar las siguientes lineas
sudo apt-get update
sudo apt-get -y install python-rpi.gpio
Después, creamos nuestro script con el siguiente comando
sudo nano /home/pi/shutdown.py
y dentro copiamos el siguiente fragmento de código
import RPi.GPIO as GPIO
import time
import os
GPIO.setmode(GPIO.BCM)
GPIO.setup(03, GPIO.IN, pull_up_down = GPIO.PUD_UP)
while True:
print GPIO.input(03)
if(GPIO.input(03) == False):
os.system("sudo shutdown -h now")
break
time.sleep(1)
Tras ello pulsamos Ctrl+X y decimos Y (Yes) para guardar cambios.
Una vez hecho esto y con nuestro script ya programado, tenemos que indicarle a la raspberry que cada vez que arranque tiene que ejecutar este código, para ello tenemos que escribir en crontab a través de la siguiente línea
sudo crontab -e
bajamos hasta el final y escribimos lo siguiente
@reboot sudo python /home/pi/shutdown.py
De nuevo pulsamos Ctrl+X y decimos Y para guardar.
Para finalizar, nos tenemos que asegurar que el script funciona correctamente, por lo que vamos a testear su funcionamiento ejecutando de manera manual el código a través de la siguiente línea
sudo python /home/pi/shutdown.py
Si todo va bien, el código no arrojará ningún error por pantalla y se quedará escuchando a que pulsemos el botón.
Si lo pulsamos, la raspberry se debe apagar!Una vez apagada podemos comprobar que, efectivamente, la raspberry también enciende si pulsamos el botón y... ya tendremos nuestro pulsador de encendido/apagado
Os dejo una foto de las pruebas que estoy realizando ahora mismo con un botón de encendido/apagado, otro de reset y un led
[thumbnail]http://oi63.tinypic.com/154c1as.jpg[/thumbnail]
[size=150]
EDIT:[/size]
Como veo que ya sois varios los que me lo habéis preguntado, os pongo como sería la conexión y programación para el botón de RESET.
Hay dos opciones:
1 - Volver a hacer el tutorial creando un nuevo script (con otro nombre) y cambiando el comando de apagado
sudo shutdown -h now
por
sudo shutdown -r now
Obviamente el botón hay que conectarlo en otros dos pines diferentes, por ejemplo al 7 y al 9.
Si lo conectas al 7 y al 9 hay que modificar el script y donde pone GPIO.setup() y GPIO.input() cambiar el 03 por 04, quedando tal que así.
import RPi.GPIO as GPIO
import time
import os
GPIO.setmode(GPIO.BCM)
GPIO.setup(04, GPIO.IN, pull_up_down = GPIO.PUD_UP)
while True:
print GPIO.input(04)
if(GPIO.input(04) == False):
os.system("sudo shutdown -r now")
break
time.sleep(1)
2 - Conectar (soldando) el botón al puerto RUN de la placa. El puerto RUN son unos agujeritos que se encuentran al lado del GPIO.
Este tipo de reinicio es de tipo hardware, es decir, es como si desconectaras y conectaras la rpi de la corriente, lo cual no es muy recomendable, al menos hacerlo de manera repetida.[/quote]