Revista 100% Verde

Cómo agregar un botón de encendido/apagado a la Raspberry Pi

Por Soloelectronicos @soloelectronico
Siempre debemos apagar con seguridad nuestra Raspberry Pi ,pues de lo contrario nos exponemos a perder el sistema de arranque y tener que volver a crear una imagen con todo el trabajo que esto conlleva respecto a las personalizaciones que tanto nos gustan Raspberry Pi no cuenta con un pulsador de encendido para intentar competir con su clones y de este modo mantener el precio "bajo", aunque sin embargo, es muy fácil añadir el suyo propio como vamos a ver en este post donde añadiremos un botón de encendido a su Raspberry para que puede encender o apagar esta con total de seguridad . No nos bastara añadir el pulsador pues tendremos que usar unos scripts que vigilen dos pines GPIO (general entrada/salida) en el Pi para que cuando se presione el botón activar o desactivar el Pi. Cómo agregar un botón de encendido/apagado a la Raspberry Pi

¿Por qué es importante un botón de encendido ?

Como comentábamos nunca deberíamos "tirar" del cable de alimentación de su Raspberry Pi pues esto puede conducir a la corrupción de los datos graves (y en algunos casos, dañar físicamente tu tarjeta SD) pues para ello se puede cerrar con seguridad el Pi a través de un comando de consola (shutdown) o por supuesto también desde el propio interfaz gráfico de Raspian (shutdown)

Veamos ahora como podemos añadir un pulsador pero entes tenemos que entender cómo despertar la Raspberry Pi de un estado de suspensión antes de construir la funcionalidad de apagado.

Una manera fácil de comprobarlo es apagando con sudo shutdown -h now y conectando los pines 5 y 6 con un cable hembra a hembra. Sólo necesitará cortarlo momentáneamente y entonces usted debe encontrar que la Raspberry Pi se "despertó".

En este punto es interesante destacar que cuando "apaga" el Pi, lo enviará en un estado de suspensión, lo cual significa que sigue consumiendo una cantidad muy pequeña de energía ( muy similar a cómo todos modernos equipos trabajo cunado quedan en stand-bye).

Lógicamente si agrega un botón de encendido podrá tanto detener como despertar el Pi de un estado detenido, pero s i su Raspberry Pi se ha apagado, usted puede desconectar de forma segura la fuente de alimentación sin la preocupación de corrupción de datos.

El equipamiento hardware como vemos es muy sencillo pues basta dos cablecillos que c onectaremos en los pines 5 y 6 de la Raspberry PI del conector de expansión( justos los dos de la tercera columna empezando por la drecha)

Cómo agregar un botón de encendido/apagado a la Raspberry Pi

Sencillamente, si se cortocircuitan entre sí los pines 5 y 6 (GPIO3 y GND) se pondrá nivel bajo el pin correspondiente al GPIO y podremos actuaren consecuencia con la Raspberry Pi

Obviamente el cortocircuito lo sustituiremos por un pequeño pulsador normalmente abierto que conduciremos con dos cablecillo a los pines 5 y 6 de nuestra Raspbery Pi

Cómo agregar un botón de encendido/apagado a la Raspberry Pi

Finalmente sujetaremos el pulsador con cinta de doble cara , pegándolo o practicando un agujero al contenedor de la Raspberry Pi

Cómo agregar un botón de encendido/apagado a la Raspberry Pi

La solución de sleep es bastante sencilla, pero para cerrar con seguridad el Pi vamos a tener que utilizar una solución de software. Ya que sabemos que vamos a utilizar los pines 5 y 6 para el Pi, vamos a usar estos pines para apagarlo tambien . Tanto así que podemos conectar nuestro botón a los alfileres y se concluirá y despertar la Pi.

Vamos a tener que escribir un script que escuche una pulsación y cierre el Pi. Antes nos fijamos en la secuencia de comandos, vamos a discutir algunos enfoques diferentes. En primer lugar, podríamos escribir un script que inicie un bucle infinito y espere un cambio en el estado de los pines GPIO.

Usando seudo-código, podría ser algo como:

while True : if GPIO3 is pressed: shutdown the pi

Mientras que esto funcionaría y probablemente no tenga problema de rendimiento real, hay realmente una manera mejor:podemos escuchar una interrupción (un cambio de estado de bajo a alto o alto a bajo) que interrumpa el procesador para qeu realize uan determinada accion .

Afortunadamente la biblioteca de RPi.GPIO proporciona un método llamado wait_for_edge que bloqueará la ejecución de nuestro script hasta que se detecte una interrupción. Así configuramos GPIO3 y una vez que detectamos un borde de caída vamos a apagar el Pi.

Entonces, vamos a usar un script llamado listen-for-shutdown.py.

Para crear el script, podemos usar el editor nano asi que después de conectar con el Pi, ejecute el siguiente comando para crear este

sudo nano listen-for-shutdown.py

Luego, pegue el código siguiente en el archivo y pulse CTRL-X y salida, Y para guardar cuando se le solicite.

 import RPi.GPIO as GPIO import subprocess GPIO.setmode(GPIO.BCM) GPIO.setup( 3 , GPIO.IN, pull_up_down=GPIO.PUD_UP) GPIO.wait_for_edge( 3 , GPIO.FALLING) subprocess.call( [ 'shutdown' , '-h' , 'now' ] , shell= False ) 

A continuación necesitamos poner este script en el arranque por lo que deberemos copiar el script en lar uta de usr y hacerlo ejecutable , acciones que haremos con los dos siguintes comandos:

sudo mv listen-for-shutdown.py /usr/local/bin/ sudo chmod +x /usr/local/bin/listen-for-shutdown.py

Pero este script solo apagaria la placa y nosotros queremso tambien qeu se pueda arrancar pulsando el boton por lo que añadiremos otro script llamado listen-for-shutdown.py: que e enciende/apaga nuestro servicio.

Para crear el script escriba la secuencia de comandos:

sudo nano listen-for-shutdown.sh

Introduzca el código siguiente en el archivo y guárdelo:

#! /bin/sh case "$1" in start) echo "Starting listen-for-shutdown.py" /usr/local/bin/listen-for-shutdown.py & ; ; stop) echo "Stopping listen-for-shutdown.py" pkill -f /usr/local/bin/listen-for-shutdown.py ; ; *) echo "Usage: /etc/init.d/listen-for-shutdown.sh {start|stop}" exit 1 ; ; esac exit 0

Ahora necesitamos coloque este archivo en /etc/init.d y hacerlo ejecutable, acciones que haremos con los dos siguientes comandos.

sudo mv listen-for-shutdown.sh /etc/init.d/ sudo chmod +x /etc/init.d/listen-for-shutdown.sh

Ahora registramos la secuencia de comandos para ejecutar en el arranque y le pasaremos el parámetros de arranque con los dos siguientes comandos.

sudo update-rc.d listen-for-shutdown.sh defaults sudo /etc/init.d/listen-for-shutdown.sh start

Seguro querido lector que por lo menos la próxima vez que desconecte su Raspberry de forma violenta recuerda que podría haber puesto un botón para hacer el apagado seguro... Y por cierto si tiene una Orange Pi u otro clon , este sencillo truco le puede servir tambien..

Esta entrada fue publicada en clon de raspbery, copia de raspberry, Electronica General, Raspberry, raspberry barata y etiquetada como apagar raspberry, boton apagado raspberry, boton de apgado y encendido par raspberry, script apagado raspberry, script encender raspberry. Siempre debemos apagar con seguridad nuestra Raspberry Pi ,pues de lo contrario nos exponemos a perder el sistema de arranque y tener que volver a crear una imagen con todo el trabajo que esto conlleva respecto a las personalizaciones que tanto nos gustan Raspberry Pi no cuenta con un pulsador de encendido para intentar competir con su clones y de este modo mantener el precio "bajo", aunque sin embargo, es muy fácil añadir el suyo propio como vamos a ver en este post donde añadiremos un botón de encendido a su Raspberry para que puede encender o apagar esta con total de seguridad . No nos bastara añadir el pulsador pues tendremos que usar unos scripts que vigilen dos pines GPIO (general entrada/salida) en el Pi para que cuando se presione el botón activar o desactivar el Pi.

¿Por qué es importante un botón de encendido ?

Como comentábamos nunca deberíamos "tirar" del cable de alimentación de su Raspberry Pi pues esto puede conducir a la corrupción de los datos graves (y en algunos casos, dañar físicamente tu tarjeta SD) pues para ello se puede cerrar con seguridad el Pi a través de un comando de consola (shutdown) o por supuesto también desde el propio interfaz gráfico de Raspian (shutdown)

Veamos ahora como podemos añadir un pulsador pero entes tenemos que entender cómo despertar la Raspberry Pi de un estado de suspensión antes de construir la funcionalidad de apagado.

Una manera fácil de comprobarlo es apagando con sudo shutdown -h now y conectando los pines 5 y 6 con un cable hembra a hembra. Sólo necesitará cortarlo momentáneamente y entonces usted debe encontrar que la Raspberry Pi se "despertó".

En este punto es interesante destacar que cuando "apaga" el Pi, lo enviará en un estado de suspensión, lo cual significa que sigue consumiendo una cantidad muy pequeña de energía ( muy similar a cómo todos modernos equipos trabajo cunado quedan en stand-bye).

Lógicamente si agrega un botón de encendido podrá tanto detener como despertar el Pi de un estado detenido, pero s i su Raspberry Pi se ha apagado, usted puede desconectar de forma segura la fuente de alimentación sin la preocupación de corrupción de datos.

El equipamiento hardware como vemos es muy sencillo pues basta dos cablecillos que c onectaremos en los pines 5 y 6 de la Raspberry PI del conector de expansión( justos los dos de la tercera columna empezando por la drecha)

Cómo agregar un botón de encendido/apagado a la Raspberry Pi
Cómo agregar un botón de encendido/apagado a la Raspberry Pi

Finalmente sujetaremos el pulsador con cinta de doble cara , pegándolo o practicando un agujero al contenedor de la Raspberry Pi

La solución de sleep es bastante sencilla, pero para cerrar con seguridad el Pi vamos a tener que utilizar una solución de software. Ya que sabemos que vamos a utilizar los pines 5 y 6 para el Pi, vamos a usar estos pines para apagarlo tambien . Tanto así que podemos conectar nuestro botón a los alfileres y se concluirá y despertar la Pi.

Vamos a tener que escribir un script que escuche una pulsación y cierre el Pi. Antes nos fijamos en la secuencia de comandos, vamos a discutir algunos enfoques diferentes. En primer lugar, podríamos escribir un script que inicie un bucle infinito y espere un cambio en el estado de los pines GPIO.

Usando seudo-código, podría ser algo como:

while True : if GPIO3 is pressed: shutdown the pi

Mientras que esto funcionaría y probablemente no tenga problema de rendimiento real, hay realmente una manera mejor:podemos escuchar una interrupción (un cambio de estado de bajo a alto o alto a bajo) que interrumpa el procesador para qeu realize uan determinada accion .

Afortunadamente la biblioteca de RPi.GPIO proporciona un método llamado wait_for_edge que bloqueará la ejecución de nuestro script hasta que se detecte una interrupción. Así configuramos GPIO3 y una vez que detectamos un borde de caída vamos a apagar el Pi.

Entonces, vamos a usar un script llamado listen-for-shutdown.py.

Para crear el script, podemos usar el editor nano asi que después de conectar con el Pi, ejecute el siguiente comando para crear este

sudo nano listen-for-shutdown.py

Luego, pegue el código siguiente en el archivo y pulse CTRL-X y salida, Y para guardar cuando se le solicite.

 import RPi.GPIO as GPIO import subprocess GPIO.setmode(GPIO.BCM) GPIO.setup( 3 , GPIO.IN, pull_up_down=GPIO.PUD_UP) GPIO.wait_for_edge( 3 , GPIO.FALLING) subprocess.call( [ 'shutdown' , '-h' , 'now' ] , shell= False ) 

A continuación necesitamos poner este script en el arranque por lo que deberemos copiar el script en lar uta de usr y hacerlo ejecutable , acciones que haremos con los dos siguintes comandos:

sudo mv listen-for-shutdown.py /usr/local/bin/ sudo chmod +x /usr/local/bin/listen-for-shutdown.py

Pero este script solo apagaria la placa y nosotros queremso tambien qeu se pueda arrancar pulsando el boton por lo que añadiremos otro script llamado listen-for-shutdown.py: que e enciende/apaga nuestro servicio.

Para crear el script escriba la secuencia de comandos:

sudo nano listen-for-shutdown.sh

Introduzca el código siguiente en el archivo y guárdelo:

#! /bin/sh case "$1" in start) echo "Starting listen-for-shutdown.py" /usr/local/bin/listen-for-shutdown.py & ; ; stop) echo "Stopping listen-for-shutdown.py" pkill -f /usr/local/bin/listen-for-shutdown.py ; ; *) echo "Usage: /etc/init.d/listen-for-shutdown.sh {start|stop}" exit 1 ; ; esac exit 0

Ahora necesitamos coloque este archivo en /etc/init.d y hacerlo ejecutable, acciones que haremos con los dos siguientes comandos.

sudo mv listen-for-shutdown.sh /etc/init.d/ sudo chmod +x /etc/init.d/listen-for-shutdown.sh

Ahora registramos la secuencia de comandos para ejecutar en el arranque y le pasaremos el parámetros de arranque con los dos siguientes comandos.

sudo update-rc.d listen-for-shutdown.sh defaults sudo /etc/init.d/listen-for-shutdown.sh start

Seguro querido lector que por lo menos la próxima vez que desconecte su Raspberry de forma violenta recuerda que podría haber puesto un botón para hacer el apagado seguro... Y por cierto si tiene una Orange Pi u otro clon , este sencillo truco le puede servir tambien..


Volver a la Portada de Logo Paperblog