[Tutorial ACTUALIZADO] Cómo encender y apagar tu Raspberry a través de un botón.

Sección Unicamente para Tutoriales y Guías
wanda
Pi Newbie
Pi Newbie
Mensajes: 6
Registrado: 04 Dic 2017, 13:00
Agradecido: 0
Agradecimiento recibido: 0

Buenaas.
Estoy haciendo un par de consolas retro y no me había planteado mucho eso de ponerle botón de encendido y reset pero gracias a este tutorial lo voy a hacer, son para regalar y es la primera vez que toco una rpi, pero me ha resultado super sencillo.

Muchas gracias.

También le voy a hacer las carcasas en 3D y las voy a personalizar con el nombre de cada uno, cuando las tenga puedo poner fotos y si alguien esta interesado puede encargarmelas puesto que tengo una impresora.


Por cierto, he visto que el boton de reset dices que es por hardware. ¿No podría hacerse el mismo script pero que cada vez que pulses el botón te lo haga por software? Por ejemplo que te haga el sutdown -h y despues el encendido en la misma interrupción? no entiendo mucho de esto y puede que este diciendo algo sin sentido.
Pesplu
Pi Alpha
Pi Alpha
Mensajes: 17
Registrado: 06 Dic 2017, 19:57
Agradecido: 0
Agradecimiento recibido: 0

muchas gracias por el tutorial
Avatar de Usuario
MrBeaker
Pi Master
Pi Master
Mensajes: 277
Registrado: 27 Dic 2016, 15:26
Agradecido: 1 vez
Agradecimiento recibido: 0

wanda escribió:Buenaas.
Estoy haciendo un par de consolas retro y no me había planteado mucho eso de ponerle botón de encendido y reset pero gracias a este tutorial lo voy a hacer, son para regalar y es la primera vez que toco una rpi, pero me ha resultado super sencillo.

Muchas gracias.

También le voy a hacer las carcasas en 3D y las voy a personalizar con el nombre de cada uno, cuando las tenga puedo poner fotos y si alguien esta interesado puede encargarmelas puesto que tengo una impresora.


Por cierto, he visto que el boton de reset dices que es por hardware. ¿No podría hacerse el mismo script pero que cada vez que pulses el botón te lo haga por software? Por ejemplo que te haga el sutdown -h y despues el encendido en la misma interrupción? no entiendo mucho de esto y puede que este diciendo algo sin sentido.
Sí! Si que se puede hacer por software tambien! Si no me equivoco seria justo igual pero con shutdown -r now. Habria que cambiar tambien el pin del GPIO al que se conecta el boton para poder el de apagado y reset conectados a la vez.
Avatar de Usuario
MrBeaker
Pi Master
Pi Master
Mensajes: 277
Registrado: 27 Dic 2016, 15:26
Agradecido: 1 vez
Agradecimiento recibido: 0

VictorGM95 escribió:Hola, no sabía si dejar el comentario aquí, o en el post de la imagen, así que lo dejaré por aquí también:

El caso es que he instalado una imagen preconfigurada con Kodi y recalbox (inicia por defecto en kodi). Y no se qué comandos utilizar (los e kodi o recalbox) o si es indiferente.

Un saludo y gracias por el tutorial.
Hola! Tendrias que poner, en principio, los de recalbox, ya que en este caso kodi esta instalado en base a este.

Saludos!
wanda
Pi Newbie
Pi Newbie
Mensajes: 6
Registrado: 04 Dic 2017, 13:00
Agradecido: 0
Agradecimiento recibido: 0

Estoy haciendo dos consolas retro con la rpi y utilizando retroprie, y quiero ponerle los botones de on/off y reset, el de on/off ya lo tengo configurado pero eso de que el reset sea por hardware no me gusta nada. En mi respuesta dijiste que tengo que conectar los pines de ambos botones al mismo para que hagan el off(o eso entendi) y me gustaría saber cual es ese pin puesto que para el on/off utilizas los pines 5 y 6, supongo que te refieres al 6 que es GND pero no estoy segura. Tampoco se si el pin que has utilizado en el post para el reset lo hace por hardware por defecto y tendría que cambiarlo.
Avatar de Usuario
MrBeaker
Pi Master
Pi Master
Mensajes: 277
Registrado: 27 Dic 2016, 15:26
Agradecido: 1 vez
Agradecimiento recibido: 0

wanda escribió:Estoy haciendo dos consolas retro con la rpi y utilizando retroprie, y quiero ponerle los botones de on/off y reset, el de on/off ya lo tengo configurado pero eso de que el reset sea por hardware no me gusta nada. En mi respuesta dijiste que tengo que conectar los pines de ambos botones al mismo para que hagan el off(o eso entendi) y me gustaría saber cual es ese pin puesto que para el on/off utilizas los pines 5 y 6, supongo que te refieres al 6 que es GND pero no estoy segura. Tampoco se si el pin que has utilizado en el post para el reset lo hace por hardware por defecto y tendría que cambiarlo.
Hola!!

- Cada botón tiene dos patillas. Una de esas patillas tiene que ser una GND (tierra) del GPIO. Hay muchos pines de GND, como por ejemplo el pin 6. Este pin es el que utilizamos para el botón de apagado y encendido, por lo que si quisieras conectar un botón extra tendrías que utilizar otro pin distinto de GND, como por ejemplo el 9.
Aquí te dejo el link a la imagen del GPIO para que sepas identificarlos.
https://www.element14.com/community/ser ... 3_gpio.png

Ya tenemos una patilla del nuevo botón conectada, ahora falta la otra... ¿cuál es? en principio y si no me equivoco la que quieras siempre que no sea una GND. Puede ser por ejemplo el pin 3.

Así pues, el nuevo botón irá conectado a los pines 3 y 9 por ejemplo.
Llegados a este punto ya tenemos todo conectado, pero tenemos que decirle a la placa que cuando pulsemos el nuevo botón se reinicie, y para ello hay que programar un script nuevo.
Si te fijas en la imagen que te he puesto más arriba, el pin 5 se llama GPIO03 y el pin 3 GPIO02.
Los pasos para programar el nuevo script serían exactamente los mismos que los que indico en el tutorial, con la salvedad de que ahora en vez de decirle que escuche eventos del pin 5 (donde pone 03 en el script, por lo de GPIO03) como antes hacía pase a escuchar el pin 3 (ahora hay que poner 02 . Además también tienes que decirle que cuando ocurra algo ahí, en vez de apagarse (sudo shutdown -h now) se reinicie (sudo shutdown -r now) :inform

En cuanto a esto
"Tampoco se si el pin que has utilizado en el post para el reset lo hace por hardware por defecto y tendría que cambiarlo. "
el reset por hardware al que me refiero es conectando el botón directamente al puerto RUN de la placa
https://seeeddoc.github.io/Raspberry_Pi ... is_New.png
Y ya directamente pulsando provocas que la raspberry se reinicie, aunque no es para nada recomendado...
Avatar de Usuario
zoik
Pi Omega
Pi Omega
Mensajes: 62
Registrado: 11 Feb 2017, 16:59
Agradecido: 0
Agradecimiento recibido: 0

MrBeaker escribió: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.

Según si estemos en Recalbox o Retropie el procedimiento es distinto, así que procedo a explicar los dos.

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.p ... c=147052.0

Aunque 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

Imagen

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

RETROPIE

Lo primero que tenemos que hacer es acceder por SSH a nuestra Raspberry, y una vez dentro ejecutar las siguientes lineas

Código: Seleccionar todo

sudo apt-get update

Código: Seleccionar todo

sudo apt-get -y install python-rpi.gpio
Después, creamos nuestro script con el siguiente comando

Código: Seleccionar todo

sudo nano /home/pi/shutdown.py
y dentro copiamos el siguiente fragmento de código

Código: Seleccionar todo

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

Código: Seleccionar todo

sudo crontab -e
Si os pregunta, seleccionar la opción 2 (nano).

bajamos hasta el final y escribimos lo siguiente

Código: Seleccionar todo

@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

Código: Seleccionar todo

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 :D

RECALBOX

En recalbox no tenemos package manager (apt-get), y comandos como sudo no funcionan, ya que digamos es una versión "light" del sistema y no implementa todos los paquetes, por lo que si necesitas instalar alguno tienes que montar la imagen, añadirlo y volver a hacer un build de la imagen. Por suerte el paquete que necesitamos (el de python) ya está instalado, por lo que nos ahorramos este tedioso paso.

Lo primero que tenemos que hacer es acceder por SSH a nuestra Raspberry, y una vez dentro crear nuestro script con el siguiente comando

Código: Seleccionar todo

mkdir pi
cd pi
nano shutdown.py
y dentro copiamos el siguiente fragmento de código

Código: Seleccionar todo

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("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 indicar en init.d que tenemos un script que queremos que arranque junto con el sistema.

Para ello lo primero es irse a init.d

Código: Seleccionar todo

cd /etc/init.d
Una vez aquí tenemos que darle permisos de escritura a la carpeta. Como el comando chmod tampoco funciona, la solución pasa por ejecutar

Código: Seleccionar todo

mount -o remount, rw /
Si ejecutamos el comando

Código: Seleccionar todo

ls
vemos como hay una serie de ficheros enumerados desde el 01 hasta el 99. Todo esto son scripts que se ejecutan de manera secuencial al arrancar la placa, teniendo cada uno de ellos una función. Por ejemplo, el S31 arranca emulationstation, el S32 el bluetooth, etc...
Lo que nosotros vamos a hacer es crear un script en la última posición de la lista, para asegurarnos así que ningún otro arranque interfiere en el de nuestro script.

Ejecutamos el siguiente comando

Código: Seleccionar todo

nano S99myscript
y copiamos el siguiente código

Código: Seleccionar todo

#!/bin/sh
#
# Start logging
#

start() {
        python /recalbox/share/system/pi/shutdown.py
}

stop() {
        printf "Stopping shutdown: "
        echo "OK"
}

case "$1" in
  start)
        start
        ;;
  stop)
        stop
        ;;
  restart|reload)
        stop
        start
        ;;
  *)
        echo "Usage: $0 {start|stop|restart}"
        exit 1
esac

exit $?
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

Código: Seleccionar todo

/etc/init.d/S99myscript start
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 :D

OPENELEC (KODI)
*TUTORIAL EN CONSTRUCCIÓN*

Os dejo los pasos aún sin explicar:
Instalación y testeo realizado en base a la imagen v11 de kamber (OpenELEC 7.0.1 y Kodi 16.1)
1) Habilitar el paquete RPi.GPIO en kodi yendo a... Sistema/Ajustes/Add-ons/Instalar desde repositorio/OpenELEC Add-ons (unofficial)/Add-ons de programa/RPi.GPIO.
Una vez ahí instalar y habilitar el plugin, posteriormente pulsar en actualizar por si hubiera una actualización. -La versión 7.0.3 es la más reciente a fecha de 09/08-

2) Programar el script:

Código: Seleccionar todo

mkdir /storage/scripts
nano /storage/scripts/shutdown.py
Pegar esta porción de código en el fichero y guardar con Ctrl+X, después Y

Código: Seleccionar todo

import sys
sys.path.append('/storage/.kodi/addons/python.RPi.GPIO/lib')
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)
Probar con el código

Código: Seleccionar todo

python /storage/scripts/shutdown.py
Si queremos hacer que arranque al encender la placa:

Código: Seleccionar todo

nano /storage/.config/autostart.sh

Código: Seleccionar todo

python /storage/scripts/shutdown.py &
Información sacada del tutorial en Inglés: http://www.barryhubbard.com/raspberry-pi/howto-raspberry-pi-openelec-power-wake-shutdown-button-using-gpio/


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 :P



EDIT:
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
(SI ES EN RECALBOX SERÍA SIN EL SUDO)

Código: Seleccionar todo

sudo shutdown -h now
por

Código: Seleccionar todo

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í.

Código: Seleccionar todo

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.



















hola tio!

creo haberlo hecho bien, he utilizado el interruptor de una snes de interruptor.



la cosa es que, me enciende dandole al interruptor, pero apagarse no se apaga.

tiene posicion on y off

la on sin problema. pero para apagaarla no hace nada




a ver si me puedes contestar
raspberry pi3 modelo b

batocera

:relax1
Fiera_SouL
Pi Newbie
Pi Newbie
Mensajes: 1
Registrado: 06 Ene 2018, 11:30
Agradecido: 0
Agradecimiento recibido: 0

Hola a todos,

este es mi primer post en este foro con mi recien estrenada Raspi.
Tengo una Raspberry PI 3 a la que le he soldado un par de pines macho en el puerto RUN para encender con un pulsador que cierre el circuito.

Me parece la mejor solución para mi, puesto que la uso mayormente como mediacenter con KODI y la controlo con KORE desde Android y es desde esa aplicación desde donde apago la raspberry.

El caso es que "aparentemente" todo funciona OK. Apago desde la app y al pulsar el boton arranca sin problema. Pero lo raro es que me pasa como a otro compañero aquí, al cabo de un tiempo indeterminado de estar apagada, se enciende sola.

He comprobado la continuidad del circuito y del pulsador y es correcto. Abierto constante y cerrado al pulsar.

No sé a qué puede ser debido y me tiene un poco loco.

Alguien a quién le ocurra lo mismo y lo haya conseguido solucionar??

Muchas gracias por todo y un saludo!!!

Fiera_SouL
Avatar de Usuario
MrBeaker
Pi Master
Pi Master
Mensajes: 277
Registrado: 27 Dic 2016, 15:26
Agradecido: 1 vez
Agradecimiento recibido: 0

zoik escribió:
MrBeaker escribió: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.

Según si estemos en Recalbox o Retropie el procedimiento es distinto, así que procedo a explicar los dos.

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.p ... c=147052.0

Aunque 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

Imagen

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

RETROPIE

Lo primero que tenemos que hacer es acceder por SSH a nuestra Raspberry, y una vez dentro ejecutar las siguientes lineas

Código: Seleccionar todo

sudo apt-get update

Código: Seleccionar todo

sudo apt-get -y install python-rpi.gpio
Después, creamos nuestro script con el siguiente comando

Código: Seleccionar todo

sudo nano /home/pi/shutdown.py
y dentro copiamos el siguiente fragmento de código

Código: Seleccionar todo

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

Código: Seleccionar todo

sudo crontab -e
Si os pregunta, seleccionar la opción 2 (nano).

bajamos hasta el final y escribimos lo siguiente

Código: Seleccionar todo

@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

Código: Seleccionar todo

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 :D

RECALBOX

En recalbox no tenemos package manager (apt-get), y comandos como sudo no funcionan, ya que digamos es una versión "light" del sistema y no implementa todos los paquetes, por lo que si necesitas instalar alguno tienes que montar la imagen, añadirlo y volver a hacer un build de la imagen. Por suerte el paquete que necesitamos (el de python) ya está instalado, por lo que nos ahorramos este tedioso paso.

Lo primero que tenemos que hacer es acceder por SSH a nuestra Raspberry, y una vez dentro crear nuestro script con el siguiente comando

Código: Seleccionar todo

mkdir pi
cd pi
nano shutdown.py
y dentro copiamos el siguiente fragmento de código

Código: Seleccionar todo

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("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 indicar en init.d que tenemos un script que queremos que arranque junto con el sistema.

Para ello lo primero es irse a init.d

Código: Seleccionar todo

cd /etc/init.d
Una vez aquí tenemos que darle permisos de escritura a la carpeta. Como el comando chmod tampoco funciona, la solución pasa por ejecutar

Código: Seleccionar todo

mount -o remount, rw /
Si ejecutamos el comando

Código: Seleccionar todo

ls
vemos como hay una serie de ficheros enumerados desde el 01 hasta el 99. Todo esto son scripts que se ejecutan de manera secuencial al arrancar la placa, teniendo cada uno de ellos una función. Por ejemplo, el S31 arranca emulationstation, el S32 el bluetooth, etc...
Lo que nosotros vamos a hacer es crear un script en la última posición de la lista, para asegurarnos así que ningún otro arranque interfiere en el de nuestro script.

Ejecutamos el siguiente comando

Código: Seleccionar todo

nano S99myscript
y copiamos el siguiente código

Código: Seleccionar todo

#!/bin/sh
#
# Start logging
#

start() {
        python /recalbox/share/system/pi/shutdown.py
}

stop() {
        printf "Stopping shutdown: "
        echo "OK"
}

case "$1" in
  start)
        start
        ;;
  stop)
        stop
        ;;
  restart|reload)
        stop
        start
        ;;
  *)
        echo "Usage: $0 {start|stop|restart}"
        exit 1
esac

exit $?
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

Código: Seleccionar todo

/etc/init.d/S99myscript start
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 :D

OPENELEC (KODI)
*TUTORIAL EN CONSTRUCCIÓN*

Os dejo los pasos aún sin explicar:
Instalación y testeo realizado en base a la imagen v11 de kamber (OpenELEC 7.0.1 y Kodi 16.1)
1) Habilitar el paquete RPi.GPIO en kodi yendo a... Sistema/Ajustes/Add-ons/Instalar desde repositorio/OpenELEC Add-ons (unofficial)/Add-ons de programa/RPi.GPIO.
Una vez ahí instalar y habilitar el plugin, posteriormente pulsar en actualizar por si hubiera una actualización. -La versión 7.0.3 es la más reciente a fecha de 09/08-

2) Programar el script:

Código: Seleccionar todo

mkdir /storage/scripts
nano /storage/scripts/shutdown.py
Pegar esta porción de código en el fichero y guardar con Ctrl+X, después Y

Código: Seleccionar todo

import sys
sys.path.append('/storage/.kodi/addons/python.RPi.GPIO/lib')
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)
Probar con el código

Código: Seleccionar todo

python /storage/scripts/shutdown.py
Si queremos hacer que arranque al encender la placa:

Código: Seleccionar todo

nano /storage/.config/autostart.sh

Código: Seleccionar todo

python /storage/scripts/shutdown.py &
Información sacada del tutorial en Inglés: http://www.barryhubbard.com/raspberry-pi/howto-raspberry-pi-openelec-power-wake-shutdown-button-using-gpio/


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 :P



EDIT:
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
(SI ES EN RECALBOX SERÍA SIN EL SUDO)

Código: Seleccionar todo

sudo shutdown -h now
por

Código: Seleccionar todo

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í.

Código: Seleccionar todo

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.



















hola tio!

creo haberlo hecho bien, he utilizado el interruptor de una snes de interruptor.



la cosa es que, me enciende dandole al interruptor, pero apagarse no se apaga.

tiene posicion on y off

la on sin problema. pero para apagaarla no hace nada




a ver si me puedes contestar
Hola Zoik, este tutorial está hecho para pulsadores, no para botones.. en los pulsadores la diferencia es que una vez se suelta vuelven a su posición original.
Para botones tendría que pensar como hacerlo, pero seguro que se puede.

Yo creo que directamente no te funciona el script, puesto que conectando un botón, sin programar nada de nada, se enciende la placa... El script es para poder apagarla.
Avatar de Usuario
Texas
Pi Newbie
Pi Newbie
Mensajes: 2
Registrado: 11 Ene 2018, 18:40
Agradecido: 0
Agradecimiento recibido: 0

Hola a todos. Muchas gracias @MrBeaker por el tutorial. El botón de encender y apagar perfecto. Todo a la primera.

Añadir que para apagar la Pi la pulsación que tengo que hacer es de +-1 seg., si hago una pulsación más rápida el script pasa de mi. ¿Eso es normal?

Un saludo !! Texas.
Avatar de Usuario
zoik
Pi Omega
Pi Omega
Mensajes: 62
Registrado: 11 Feb 2017, 16:59
Agradecido: 0
Agradecimiento recibido: 0

al final lo he conseguido, entre este tutorial y un par mas en youtube.

tengo una super nintendo rota que vacié, y he aprovechado el mismo boton de serie que trae, y me enciende y apaga.

que pasada!

ahora voy a ver si soy capaz de ponerle un ventilador y un led para que se encienda a la vez que la consola. y se apague.


un saludo !!!
raspberry pi3 modelo b

batocera

:relax1
Avatar de Usuario
MrBeaker
Pi Master
Pi Master
Mensajes: 277
Registrado: 27 Dic 2016, 15:26
Agradecido: 1 vez
Agradecimiento recibido: 0

zoik escribió: 11 Ene 2018, 21:18 al final lo he conseguido, entre este tutorial y un par mas en youtube.

tengo una super nintendo rota que vacié, y he aprovechado el mismo boton de serie que trae, y me enciende y apaga.

que pasada!

ahora voy a ver si soy capaz de ponerle un ventilador y un led para que se encienda a la vez que la consola. y se apague.


un saludo !!!
Hola!
Lo del LED es muy fácil, es solamente conectar (sin programación ni nada) pero... conseguiste lo del ventilador?
Yo lo tengo hecho pero a través de hardware, con una plaquita que te apaga completamente la Raspberry.

Saludos!
ellagarto
Pi Newbie
Pi Newbie
Mensajes: 7
Registrado: 05 Oct 2017, 20:12
Agradecido: 0
Agradecimiento recibido: 0

hola, me funciona bien, pero el problema es que se vuelve a encender sola pasado un rato, no se que hago mal ¡¡¡¡
jalomur
Pi Beta
Pi Beta
Mensajes: 166
Registrado: 14 Nov 2016, 11:19
Agradecido: 0
Agradecimiento recibido: 1 vez

A ver si tienes el código para que se reinicie en vez de que se apague...

Enviado desde mi MI 5s mediante Tapatalk

ellagarto
Pi Newbie
Pi Newbie
Mensajes: 7
Registrado: 05 Oct 2017, 20:12
Agradecido: 0
Agradecimiento recibido: 0

En principio tengo el codigo como pone aqui, con el comando shutdown. No se que puede pasar lo quite y puse de nuevo , pero nada se vuelve a encender !!!
jalomur
Pi Beta
Pi Beta
Mensajes: 166
Registrado: 14 Nov 2016, 11:19
Agradecido: 0
Agradecimiento recibido: 1 vez

Se me ocurría que fuese eso. Tienes
sudo shutdown -h now

Y

sudo shutdown -r now

Que como ves por una sola letra te reinicia en lugar de apagar, por eso era. A ver si alguien te eche un cable con otra idea

Enviado desde mi MI 5s mediante Tapatalk

mecharn
Pi Newbie
Pi Newbie
Mensajes: 9
Registrado: 11 Jul 2017, 18:48
Agradecido: 0
Agradecimiento recibido: 0

Me valdría este tutorial para una carcasa nespi + que he comprado en AliExpress, ya que trae los botones de encendido y reset. Me viene en la página un tutorial pero me da errores de certificado o parecido creo que por la fecha ya que todo lo tengo en el año 1980
joemac
Pi Alpha
Pi Alpha
Mensajes: 11
Registrado: 21 May 2018, 01:17
Agradecido: 0
Agradecimiento recibido: 0

Hola , buenas tardes a todos !!! Soy nuevo y novato en esto de la raspberry. Leyendo sobre este post sobre instalar un boton de encendido y apagado , me surge una duda. Yo tengo ocupados los pines 5 y 6 del GPIO con un ventilador , asi que si quiero poner las conexiones del boton tengo que ponerlos en otro de 5v y en cualquier Ground ,,,, hasta ahora voy bien ?? pero si cambio y los pongo en los conectores 2 y 9 por ejemplo , ... que lineas del script tengo que editar ??? saludos
l3g0r
Pi Newbie
Pi Newbie
Mensajes: 2
Registrado: 03 Dic 2016, 13:42
Agradecido: 0
Agradecimiento recibido: 0

hola los pines "run" no se pueden usar para apagar o resetear? tenia puesto un pulsador para encender.
He probado este , que tiene las dos cosas con el mismo boton y funciona. Pero me gustaria poner con los pines run.
Se puede?que numero tiene el "run"
https://cdn.sparkfun.com/assets/learn_t ... PiZero.png
https://raw.githubusercontent.com/gilye ... hutdown.py
Lucasps
Pi Newbie
Pi Newbie
Mensajes: 3
Registrado: 15 Sep 2019, 16:29
Agradecido: 0
Agradecimiento recibido: 0

Buenas tardes,
Estoy intentando implementar un pulsador para reiniciar una raspberry con raspbian. He encontrado varios tutoriales similares a este y en ninguno de ellos se comenta la necesidad de montar una resistencia en serie.
Entiendo que como en ningún sitio lo encuentro no hay problema, pero ¿No hay peligro en conectar directamente los pines 5 y 6 mediante un pulsador sin usar una resistencia?
Al conectar ambos pines habrá una diferencia de potencial y si la resistencia es igual a 0.....

Saludos
Responder