ON/OFF Button Raspberry Pi

Feb 25,  2023

Botón físico para encender y apagar cualquier Raspberry Pi

Not neccesary on Pi 5 😂

Conexión:

Código:

Abrimos la Terminal y escribimos:

En el escribimos:

Guardamos con Ctrl+o(Vocal O), confirmamos con Enter y cerramos el archivo con Ctrl+x.

Ahora debemos agregar permiso de ejecución a nuestro script y agregar el comando de ejecución a rc.local:

Abrimos rc.local:

Colocamos el comando justo encima de exit 0(cero):

Guardamos con Ctrl+o(Vocal O), confirmamos con Enter y cerramos el archivo con Ctrl+x.

Tras realizar esto apagamos la Raspberry Pi, realizamos la conexión sin ningún cable conectado a ella. chequeamos 2 veces la correcta conexión y encendemos nuevamente. El Script estará funcionando siempre esperando que presionemos el botón para apagarla, el encendido se da solo si no hemos desenchufado la fuente de alimentación y al presionar el botón se encenderá por simple electrónica.

En caso de estar ocupado el GPIO 3:

Si usas un HAT o tienes ocupado el GPIO 3 con otro dispositivo, ejempo IQAudio DAC+ utiliza I2C, por ende GPIO 3. Entonces puedes cambiar al GPIO 5 pero el botón solo servirá de Apagado.

Soft Button:

Creamos un acceso directo en nuestro escritorio y podemos apagar directamente con doble clic la Raspberry Pi. Abrimos la Terminal:

En el Escribimos:

[Desktop Entry]


Type=Application


Name=Shutdown


Icon=$HOME/Desktop/off.png


Exec=sudo shutdown -h now


Categories=Application;


Terminal=true

Guardamos con Ctrl+o(Vocal O), confirmamos con Enter y cerramos el archivo con Ctrl+x.

Para que no nos pregunte donde queremos ejecutar el acceso directo, activamos la opción:

Esta opción la encontramos en PcManFM, nuestro Explorador de Archivos en Raspberry Pi OS. Vamos a a Editar --> Preferencias --> General y ahí la encontraremos sin el tilde. Tildamos y cerramos el Explorador. Ahora Reiniciamos nuestro Sistema. al reiniciar veremos que con un simple doble clic, el sistema se apagará. Pero no tendrá logo, para esto bajamos una imagen en formato .PNG que nos guste y la colocamos en $HOME/ con el nombre que queramos, en este tutorial se llama off.png, si le cambias el nombre edita ese dato en Icon.

Método Opcional:

También podemos enviar el logo a la ruta adecuada dónde se encuentran los logos del sistema, así como el acceso directo, dónde se encuentran los accesos directos, esto es optativo, haces el mismo procedimiento pero así:

Movemos el logo:

Creamos el archivo .desktop en:

En el Escribimos:

[Desktop Entry]


Type=Application


Name=Shutdown


Icon=off


Exec=sudo shutdown -h now


Categories=Application;


Terminal=true

Guardamos con Ctrl+o(Vocal O), confirmamos con Enter y cerramos el archivo con Ctrl+x. Reiniciamos y veremos el acceso en el Menu, solo nos queda arrastrarlo al escritorio.

Utilidad para los que poseen varias Raspberry Pi y desean apagar todas a la vez con un botón físico y el protocolo SSH:

Código:

Abrimos la Terminal y escribimos:

En el escribimos:

Para esto debemos crear en la Raspberry Pi que poseerá el botón, las claves SSH para que las demás Raspberry Pi no nos soliciten contraseña al loguearnos por SSH al pulsar el botón, abrimos la Terminal y escribimos:

Presionamos Enter las 3 veces y si nos consulta si queremos sobre-escribir la ya creada le indicamos que si.

Repetimos este paso para nuestro usuario root ya que el script lo vamos a ejecutar con sudo:

Presionamos Enter las 3 veces y si nos consulta si queremos sobre-escribir la ya creada le indicamos que si.

Una vez creadas ambas claves debemos enviarlas a las Raspberry Pi de destino:

En ambos casos nos pedirá una confirmación de conexión y la contraseña, respondemos con yes y raspberry si es Pi OS o RetroPie o cualquier sistema basado en Debian cuyo usuario sea pi y su contraseña por defecto sea raspberry. de no serlo, colocamos la contraseña adecuada. tras esto nos indicará que intentemos conectarnos para probar que hemos copiado bien la clave, con lo cual veremos que no nos pide contraseña:

Si todo fue bien realizado, no nos pedirá nada y habremos conectado por ssh sin poner contraseña.

En la segunda Raspberry Pi:

Ahora copiamos las claves a la otra Raspberry Pi, en este ejemplo y si tus Raspberry Pi poseen el mismos hostname debemos cambiárselo a una, en este caso se lo cambiamos a la Raspberry Pi Zero que tiene un Sistema Operativo basado en Debian cuyo usuario es pi y su contraseña es raspberry. Para ello abrimos raspi-config:

Cerramos raspi-config yendo a la opción Finish y reiniciando para que el cambio surta efecto.

Procedemos a copiar las claves:

En ambos casos nos pedirá una confirmación de conexión y la contraseña, respondemos con yes y raspberry si es Pi OS o RetroPie o cualquier sistema basado en Debian cuyo usuario sea pi y su contraseña por defecto sea raspberry. de no serlo, colocamos la contraseña adecuada. tras esto nos indicará que intentemos conectarnos para probar que hemos copiado bien la clave, con lo cual veremos que no nos pide contraseña:

Si todo fue bien realizado, no nos pedirá nada y habremos conectado por ssh sin poner contraseña.

NOTA: Acerca del uso de hostname.local, esto nos evita indicar una IP que puede variar con el tiempo o simplemente nos evita configurar una IP estática, al poseer el Sistema basado en Debian por lo general el demonio Avahi-daemon, esto nos permite realizar eso, para los que poseen Iphone o Mac esto es común, para los que usamos Android no, ya que nosotros debemos indicar siempre la IP correcta para poder establecer la conexión, pero esto es solo entre Android y Raspberry, como la comunicación en este caso se dá entre Raspberries, se puede utilizar esta técnica.

En otos sistemas:

Respecto a otros sistemas solo debemos conocer estos datos:

Recalbox:

Usuario : root

Contraseña: recalboxroot

hostname: recalbox

Avahi-daemon: Si

Como podemos observar el usuario es diferente, y más aún, es el root, lo que nos evita indicar sudo para poder apagar la Raspberry Pi.

Copiamos la clave:

Repondemos yes y la contraseña recalboxroot

Y en nuestro Script modificaremos la linea que le corresponda, supongamos que es la Raspberry Pi que en el Script de arriba tenía una de las conexiones con pi@raspberry.local, entonces el código quedaría:

#!/bin/bash

# Indicamos el pin GPIO que recibe el cambio de estado para el apagado

GPIOpin1=3

echo "$GPIOpin1" > /sys/class/gpio/export

echo "in" > /sys/class/gpio/gpio$GPIOpin1/direction

while true; do

  sleep 1

  power=$(cat /sys/class/gpio/gpio$GPIOpin1/value)

  if [ $power != 1 ]; then

    echo "out" > /sys/class/gpio/gpio$GPIOpin1/direction

    echo "0" > /sys/class/gpio/gpio$GPIOpin1/value

    sleep 3

    ssh 'root@recalbox.local' 'shutdown -h now'

    sleep 3

    ssh 'pi@zero.local' 'sudo shutdown -h now'    

    sleep 3

    sudo shutdown -h now

  fi

done

Eso es todo, esta última utilidad tal vez no sea para la mayoría pero surge de una consulta para un Arcade con Jukebox con los Sistemas RetroPie y Max2play.