Raspberry Pi 2: botón de encendido, apagado y reset.

Cansado de tener que desconectar y conectar el cable de alimentación para encender la Raspberry Pi, y de teclear el comando de apagado, procedo a añadir un botón físico de encendido, apagado y reset.

El primer requisito es hacerse con un botón, que se conecte mediante cable a dos pines GPIO de la Raspberry Pi. He decidido retirar el botón de reset de una placa madre antigua que conservo y no utilizo, aunque podremos usar igualmente el de encendido. Aquí una imagen:

raspberry-on-off-button

Conectamos el botón a los pines 5 y 6 de la Raspberry Pi 2, que corresponden al GP3 y al Ground. Venden unas plaquitas muy útiles que ayudan a identificar cada pin, pero una consulta rápida en el buscador nos devuelve imágenes identificativas. En todo caso, se trata de la tercera fila de pines (cada fila tiene dos pines) empezando a contar desde la esquina más próxima de la placa.

En este punto ya podemos encender la Raspberry Pi con el botón. Pero para poder apagarla y resetear, es necesario crear un script que ejecute la orden correspondiente al detectar actividad en los pines a los que tenemos conectado el botón. Un problema tan común como es el apagado de la popular Raspberry Pi lo encontramos ampliamente documentado en internet, y el script en Python de https://github.com/gilyes/pi-shutdown se adapta perfectamente a lo que necesitamos. En la página de GitHub vemos un botón para descargar los archivos en un ZIP (Download ZIP): copiamos el archivo pishutdown.py a nuestra Raspberry Pi.

Para comprobar que funciona correctamente, ejecutamos desde la Raspberry el script Python con el siguiente comando:

sudo python pishutdown.py

Ahora la Raspberry Pi debería reiniciarse si se presiona el botón, y apagarse si se presiona durante tres segundos. Cabe decir que pasan unos segundos hasta que puede verse como inicia el proceso de apagado.

Una vez realizada esta prueba, el botón no vuelve a funcionar para apagar o resetear hasta que ejecutemos nuevamente el script. Por ello lo añadiremos al Cron, el gestor de tareas de Linux que permite indicar cuando ejecutar cada una de ellas. En la Raspberry Pi ejecutamos:

crontab -e

Es posible que os permita seleccionar el editor con el que modificar el Cron: la opción 2, el editor Nano, es la recomendada. Para ejecutar el script al iniciar el sistema tan solo debemos añadir al final del archivo lo siguiente:

@reboot sudo python /home/pi/pishutdown.py

Debe modificarse la ruta del script si se ha copiado en otra carpeta distinta de la Raspberry Pi. La combinación de teclas “Ctrl X” es para salir del editor, guardando los cambios del archivo cuando nos pregunte.

 

20 comentarios sobre “Raspberry Pi 2: botón de encendido, apagado y reset.

    1. Ejecuto sudo python pishutdown.py

      Me devuelve

      Traceback (most recent call last):
      File “pishutdown.py”, line 3, in
      import RPi.GPIO as GPIO
      ImportError: No module named RPi.GPIO

      Estoy buscando info a ver

      Uso una pi3 con osmc

      Saludos

      1. Logre instalar lo que me pedía.

        El boton funciona para encenderla (alegría por no tener que estar desenchufando y enchufando)

        Si ejecuto el script reinicia y apaga perfectamente.

        El problema esta en que el cron no parece funcionar… Y el servicio cron funciona bien.

        Tampoco se ejecuta crrando un servicio a parte solo para el script.

        Bueno al menos apagar puedo hacerlo con el mando de la televisión pero puff seguiré batallando

      2. Me alegra lo hayas podido solucionar y te esté ya funcionando vía script. En cuanto al problema con el crontab voy a dar unos cuantos palos de ciego, pero se me ocurre:

        – evidentemente, revisar que esté bien introducido en el archivo del cron. Poner el “@reboot sudo python /home/pi/pishutdown.py” justo debajo de la última linea comentada (después de la última línea que empiece con #)

        – revisar que en la línea del crontab esté bien indicada la ruta hacia el script; que realmente lo tengas en /home/pi/.

        – probaría si te resulta necesario ejecutar python mediante sudo. Si no fuera así, eliminaría el “sudo” de esta línea que añadimos al crontab (por si acaso está pidiendo la contraseña de superusuario y por eso no se ejecutara)

        Otra posibilidad que se me ocurre es pasar del Crontab y modificar el archivo “autostart” (quizá otras distros lo llamen diferente) de la distro que estés ejecutando. En este caso, localizar el archivo de texto que recoge los programas y servicios que inician con OSMC y añadir ahí la linea. Este archivo se encuentra en diferentes lugares según distribución y gestor de ventanas incluso.

        A ver si hay suerte.
        Un saludo.

      3. Si esta semana probaré a ver, no me habia pasado nunca que no me hiciera caso ni el cron ni un servicio xD
        Comentaré cuando tenga listo todo 🙂

      4. Seguro que es una tontería que se nos está escapando… por eso me atrevía a decirte lo de revisar las rutas indicadas aunque estoy seguro que ya lo habías tenido en cuenta.

        El escenario es un poco distinto, pero hace un rato he configurado Raspbian para que arranque automáticamente Transmission: he modificado un archivo “autostart” dentro de la carpeta .config en la carpeta de usuario. Es otro camino.

      5. al final me hice una imagen a partir de raspbian con kodi y todo lo que queria tener porque libreelec y similares estan muy capados, va de lujo

  1. Hola, muy elaborado el script! Me funciona solo para encenderla, pero no me hace caso para apagar o reset, he comprobado el codigo, ruta y los puertos gpio y todo parece correcto, tambien integrado en crontabs… nose que hacer estoy con libreelec, y me avisa cada vez que ejecuto el “python pishutdown.py” 21: runtimewarning a phisical pull up resistor is fitted on this channel!
    Ayuda please

    1. Para encenderla no hace falta el scrip, por eso parece qie te funciona, en LibreELEC puede que no funcione, esta muy capado, intenta instalar algo con un simple apt-get y verás el mensaje que te da… En un raspbian va bien

      1. Cierto eso que dices, de no poder instalarle nada por ssh, esta limitado… Pero puedes instalarle kodi encima al raspbian? O habria que hacerlo en otra particion yo es que estuve en rasp+openelec+retropie de aikoncwd pero me iba mal, le achaque la inestabilidad al raspbian, y por eso meti libreelec, gracias por tu respuesta!

      2. Hola Javi. Disculpa la demora en aprovar el comentario: desgraciadamente es necesario por la cantidad de spam que se genera.

        En alguna ocasión he instalado Kodi encima de Raspbian, y ejecutado como cualquier otro programa dentro del sistema. No me ha dado inestabilidad, aunque supongo que se consumen más recursos y puede haber diferencia de rendimiento según el modelo de Raspberry.

      3. Gracias igualmente andres, al final me pase a raspbian y muy contento con el boton, gracias por la guia

  2. buenas me ha gustado la guia aunque no he usado el script lo use para crear el mio propio usando gpiozero muchas gracias

  3. Hice todo tú tuto y me funciona perfectamente. Solo tengo una pregunta. Hay alguna forma de que la raspberry no se encienda la conectarle el cable de alimentación, que lo haga solo al pulsar el boton.
    Gracias y un saludo

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s