editar suscripciones
×

[TUTORIAL] Configurar botón de encendido/apagado en la raspberry pi

ALERTA: TOCHO INSAID xD

Voy a explicar cómo configurar la raspberry para poder encenderla/apagarla con un botón conectado al GPIO. Antes que nada, recomiendo crear una imagen de la tarjeta sd, esto se puede hacer con un programita que se llama win32diskimager. No tienen por que fastidiarse nada, pero es mejor prevenir :-)

Voy a explicarlo para tres SO distintos, que son los que yo utilizo y he comprobado que funciona todo correctamente: Recalbox, Raspbian y LibreELEC/OpenELEC.
El primero es el más fácil porque prácticamente no hay que hacer nada y los otros dos son muy parecidos pero con algún pequeño cambio.


El botón


En ebay (es lo más barato que he encontrado) podéis encontrar bastantes tipos distintos. El que yo tengo es como este, metálico y con led:


Los hay también sin led, de plástico... la clave es que en la descripción ponga algo como "momentary switch" o "push it- on, release it - off" y también que sea "Normally Open (NO)". Resumiendo, los típicos botones que cuando pulsas y sueltas, vuelve a su posición original y que cuando no está pulsado el circuito esté abierto.
Si tiene led, lo suyo es que el voltaje de alimentación del led sea 2/3 V y habría que ponerle una resistencia, ya que los pines del GPIO son de 3,3 V si no me equivoco.


Conexión


El GPIO de la Raspberry Pi 3 es el siguiente (mirando la Raspberry con los puertos USB hacia abajo, es decir, los pines marcados con los números 39 y 40 son los más cercanos a los puertos USB):


Vamos a conectar el botón a los dos pines marcados con el cuadro azul, y si tiene led, conectaremos las patas del led a los marcados en verde (positivo del led al pin marcado con un número 8 ). Los pines de color negro en realidad pueden ser cualquiera de los marcados con la etiqueta "ground", pero por cercanía esos nos vienen bien.


Y ahora ya pasamos a la configuración. Para el encendido realmente no hace falta hacer nada, simplemente con conectar el botón a esos pines y pulsarlo ya se encenderá, así que pasamos a configurar el apagado


Recalbox


Como dije al principio, este es el más sencillo. Simplemente encendemos Recalbox, conectado a la red, y modificamos una línea de un fichero que viene en Recalbox.
Podemos hacerlo conectando por ssh, o lo que es más fácil aún, en un pc conectado a la misma red que la raspberry, abrimos el navegador y ponemos h ttp://recalbox. Se nos abrirá una interfaz web

Pulsando el botón marcado en rojo se nos abrirá el fichero de configuración. simplemente hay que buscar una línea de código y borrar el punto y coma que hay al principio, esta línea está casi al principio del fichero y es la siguiente:
;system.power.switch=PIN56ONOFF 


Una vez hecho eso, se guarda el fichero, se reinicia la raspberry y se acabó, a otra cosa :-)


Raspbian


Aquí podemos hacerlo todo desde el propio escritorio del SO.
Abrimos una terminal

Escribimos en la terminal el siguiente comando
nano scripts/shutdown.py

y en esa nueva pantalla vacía tendremos que escribir el siguiente código
import RPi.GPIO as GPIO
from subprocess import call
GPIO.setmode(GPIO.BCM)

GPIO.setup(3, GPIO.IN)

#GPIO.setup(14, GPIO.OUT)
#GPIO.output(14, True)

GPIO.wait_for_edge(3, GPIO.FALLING)

call(['shutdown', '-h', 'now'], shell=False)


(Las dos líneas con el símbolo # al principio son para encender el led, si tu botón tiene led hay que borrar esos dos símbolos)


Una vez hecho esto, pulsamos Ctrl + X, Nos preguntará si queremos guardarlo, pulsamos S e intro para confirmar el nombre del fichero y volverá a aparecernos el símbolo $ como al principio.
Para comprobar que todo funciona correctamente podemos poner en la terminal lo siguiente y sin cerrar la terminal, pulsar el botón para ver si se apaga la raspberry
python scripts/shutdown.py


Si en vez de apagarse la raspberry sale algo en la terminal como "ImportError: No module named 'RPi.GPIO'" tecleamos lo siguiente en la terminal, y cuando termine de instalar y vuelva a aparecer el símbolo $ repetimos el paso anterior, y la raspberry debería apagarse al pulsar el botón.
sudo apt-get install python-dev python-rpi.gpio


Si nuestro botón ya funciona solo nos queda automatizar el script para que se ejecute solo al iniciar la raspberry. De nuevo en la terminal escribimos
crontab -e

(Si nos da a elegir entre varias opciones al hacer esto, elegimos la que ponga "nano")
y se nos abrirá otro fichero en el que tendremos que añadir al final del todo lo siguiente:
@reboot sudo python scripts/shutdown.py &


Igual que antes, guardamos con Ctrl + X, ...

Y con esto ya está todo, ahora la raspberry debería encenderse/apagarse al pulsar el botón y también se encenderá el led si lo tiene.


Pendiente de añadir LibreELEC/OpenELEC

tutorialconfigurarbotónencendidoapagadoraspberrypi
4
  • RaspberryPi

    Raspberry Pi

  • adri adri 216.45
    Muy currado el tuto! Se agradece! Y seguramente acabe comprando uno para ponérselo a mi raspy :mola:
    votos: 1 karma: 23
    #1  
    ZhouSand ZhouSand 46.55
    Si no me veo muy torpe lo probaré. :mola: :mola: :mola:
    votos: 1 karma: 23
    #2  
    escribano escribano 132.20
    :-O
    votos: 0 karma: 8
    #3  
    TrollA TrollA 9.05
    y no es más facil coger uno cable de estos usb con los que alimentas el cacharro pero que tenga interruptor?
    votos: 0 karma: 8
    #4  
    El_Patizador El_Patizador 134.95
    #4 Con esos cables es más lioso, porque tienes que apagarla primero y después ya darle al interruptor del cable. Si le das directamente al interruptor sería lo mismo que desenchufar el cable directamente y hay una alta probabilidad de que se corrompa la SD y habría que volver a instalar todo.
    votos: 0 karma: 8
    #5  
    uzanto uzanto 20.50
    @El_Patizador ¿no hace falta una resistencia entre los pines del interruptor? La he visto en algunos proyectos y se supone que es necesaria... Ni idea la verdad, si tu lo usas a menudo así y no ha pasado nada, imagino que no será necesario.
    votos: 0 karma: 8
    #6  
    El_Patizador El_Patizador 134.95
    #6 Para el led si, para el interruptor en sí hasta donde yo se no hace falta
    votos: 0 karma: 8
    #7