Boton switch fisico para salir del sistema (stand by) para apagar sin corromper SD

Soporte General para RetroPie
Responder
Avatar de Usuario
Pirossi
Pi Destroyer
Pi Destroyer
Mensajes: 503
Registrado: 24 Ene 2017, 03:16
Agradecido: 0
Agradecimiento recibido: 1 vez

Actualizado, probado, funciona perfectamente bien :relax1

Como ya sabeis, apagar la Raspberry Pi “en caliente”, es decir, tirando del cable de alimentación o apagando el interruptor de la regleta donde esté conectada sin cerrar antes el sistema operativo hará que el sistema de archivos acabe corrompiéndose ya que existen una serie de procedimientos críticos que se realizan a nivel de software en el momento de cierre del sistema.

Os dejo el tutorial en el que se indica como montar un botón de encendido/apagado en la Raspberry Pi, pero lo mejor de todo es que podemos modificar el comando que se ejecutará al presionar el botón asi que podemos darle cualquier uso que imaginemos.


Cableado y montaje
Para montar el botón necesitais un boton del tipo switch, y 2 cables de conexion para econectar 2 de las patillas del switch a los pines correspondientes gpio.

Se conectan al pin 5 y 6 del gpio
El pin5 corresponde a gpio3 y el pin6 a gnd(masa)

RP2_Pinout (1).png
Script Python
Una vez montado el esquema nos faltará iniciar un pequeño script en Python que detectará las pulsaciones del botón y lanzará el comando de apagado o de reiniciado de nuestra Raspberry Pi.

Antes de empezar con el script, teneis que entrar en modo terminal y escribir un par de comandos para actualizar paquetes:

--------------------------------------------------------------

sudo apt-get update

(Esperamos a que termine el proceso e introducimos el siguiente)

sudo apt-get -y install python-rpi.gpio



(Dejamos que actualice y termine)
-------------------------------------------------------------



A continuacion os muestro nuestro script de apagado. En la línea 11 podeis ver “sudo halt” que es el comando para apagar la Raspberry, lo podeis cambiar por “sudo reboot” o cuaquier otro comando que querais ejecutar cuando se presione el botón.
-------------------------------------------------------------------------------------------------------------



Aqui teneis el script phyton optimizado para que consuma la menos cpu posible.


--------------------------------------------------------------
from subprocess import call
import RPi.GPIO as gpio

def loop():
    raw_input()

def shutdown(pin):
   call('halt', shell=False)

gpio.setmode(gpio.BOARD)
gpio.setup(3, gpio.IN)

gpio.add_event_detect(3, gpio.RISING, callback=shutdown, bouncetime=200)

loop()

--------------------------------------------------------------
Os dejo una breve esplicacion de cada parte del codigo del script despues de la #

[nfo]# Importamos los modulos para enviar comandos al sistema y acceder a los pines GPIO
from subprocess import call
import RPi.GPIO as gpio
# Definimos una funcion para que el script no se detenga
def loop():
raw_input()
# Definimos una funcion que se ejecutará cuando se llame a la interrupción
def shutdown(pin):
call('halt', shell=False)
gpio.setmode(gpio.BOARD) # Ponemos la placa en modo BOARD
gpio.setup(3, gpio.IN) # Configuramos el pin5 como entrada
# Configuramos una interrupción para cuando se aprete el boton
gpio.add_event_detect(3, gpio.RISING, callback=shutdown, bouncetime=200)
loop() # Iniciamos la función para que el script siga en marcha[/nfo]

--------------------------------------------------------------------------------------------------------------------

Para iniciar el script tan solo debemos escribir en el terminal:

--------------------------------------------------------------

[nfo]sudo python shutdown.py[/nfo]

--------------------------------------------------------------
O en su defecto en la ruta en la que lo hayais metido dentro de la sd .
devereis de poner:

sudo python laruta/laruta/shutdown.pi

*Laruta seria el nombre de los directorios o carpetas donde se encuentre el archivo
Shutdown.py que habeis guardado en la sd de la raspberry previamente.

------------------------------------------


Apartir de este momento, ya funciona el boton" y podeis apagar y encender la raspberry :woow

Automatización
El problema de este sistema esta en que deberemos iniciar el script manualmente desde consola cada vez que arranquemos la Raspberry asi que vamos a automatizar el proceso. Abrimos un terminal y escribimos:

---------------------------------------------------------------------------------------

[nfo]sudo nano python /etc/rc.local[/nfo]

--------------------------------------------------------------------------------------

Una vez abierto escribimos “sudo python shutdown.py” justo antes de “exit 0”
(O en su defecto la ruta en la que tengamos el archivo shutdown.py)quedando asi:

-----------------------------------------------------------------------------------------

[nfo]sudo python shutdown.py
exit 0[/nfo]

-----------------------------------------------------------------------------------------

Ahora podemos reiniciar o apagar nuestra Raspberry Pi sin problemas ya que la proxima vez que arranque se iniciará automaticamente el script.


Quien se anime a probarlo o a aportar mas informacion , mejoras al respecto, sera bien recivido y de ayuda para todos los usuarios.[/b]



Espero que os guste!!!!!,me ha costado hacerlo funcionar y poder acomodar el texto para que sea entendible para todos, a pesar de que el propio script lo he encontrado en otra pagina, he querido compartirlo ,experimentar y hacerlo lo mas comprensible posible para todos, es flipante que se pueda hacer algo asi cuando venden modulos de apagado por unos 20 pavos!!


Agradecimientos a fpaez (Parte de la informacion encontrada en su pagina, cualquier inconveniente se pueden poner en contacto con migo atraves de un mp en este mksmo foro )
.
Última edición por Pirossi el 03 Mar 2017, 00:51, editado 22 veces en total.
Imagen
Avatar de Usuario
Kactius
Pi Destroyer
Pi Destroyer
Mensajes: 796
Registrado: 17 Nov 2016, 17:26
Agradecido: 0
Agradecimiento recibido: 6 veces
Contactar:

Te recomiendo visitar en este mismo foro :
viewtopic.php?f=6&t=1572

CORREMPER cuidado con ese titulo
Avatar de Usuario
Pirossi
Pi Destroyer
Pi Destroyer
Mensajes: 503
Registrado: 24 Ene 2017, 03:16
Agradecido: 0
Agradecimiento recibido: 1 vez

Kactius escribió:Te recomiendo visitar en este mismo foro :
viewtopic.php?f=6&t=1572

CORREMPER cuidado con ese titulo
gracias!, corregido el titulo
le echare un vistazo.

por cierto alguien sabe como crear ese script, si se necesita algun programa?
y en que directorio se coloca?
Imagen
Avatar de Usuario
drewdty
Pi Destroyer
Pi Destroyer
Mensajes: 753
Registrado: 05 Dic 2016, 22:47
Agradecido: 0
Agradecimiento recibido: 4 veces

he encontrado esto para poder apagar dede el mando de la tv
https://www.msldigital.com/collections/ ... -plus-2015
hay que modificar el archivo lircd.conf
segun el mando que tengas
Imagen
La madre de todas las ciencias es la paCIENCIA
Avatar de Usuario
Pirossi
Pi Destroyer
Pi Destroyer
Mensajes: 503
Registrado: 24 Ene 2017, 03:16
Agradecido: 0
Agradecimiento recibido: 1 vez

Despues de varias horas Probando lo he conseguido
con un boton(switch) y funciona correctamente tanto para apagado asta quedarse en stand by(con la luz roja)
Como para encenderlo con un click.

Para copiar y crear el script he usado droidedit, y despues con ayuda de
Raspmanager he copiado y pegado el fichero.
Todo desde el movil.
Tambien he usado raspmanager para ejecutar comandos.

Funciona fenomenal :relax1


Lo proximo que probare sera que tras tenerlo apretado unos segundos fuerce reinicio, desde el propio boton, sin usar los pines "run'.
Imagen
kikegranada
Pi Alpha
Pi Alpha
Mensajes: 26
Registrado: 26 Dic 2016, 09:36
Agradecido: 0
Agradecimiento recibido: 0

bueno al menos uno de los problemas entre comillas que le veia a la rasperri que era el tema de reseteo y apagado parece que ya se puede resolver, muchas gracias
Avatar de Usuario
tenshide
Pi Beta
Pi Beta
Mensajes: 116
Registrado: 01 Mar 2017, 22:30
Agradecido: 0
Agradecimiento recibido: 0

los GPIO negros (GND) son todos iguales verdad? justo el que pones tu lo tengo yo conectado al miniventilador, concretamente al 4 y 6.
saludos!
Imagen
Avatar de Usuario
monoculero
Pi Omega
Pi Omega
Mensajes: 79
Registrado: 18 Feb 2017, 21:28
Agradecido: 0
Agradecimiento recibido: 0

Y lo de poner sudo poweroff como comando a ejecutarse desde attract mode al seleccionar exit, también serviría o corrompe la sd?
Wiche
Pi Alpha
Pi Alpha
Mensajes: 20
Registrado: 02 Ago 2016, 11:52
Agradecido: 0
Agradecimiento recibido: 0

Esto me va a venir fenomenal, gracias por el tuto :woow
Daking
Pi Alpha
Pi Alpha
Mensajes: 20
Registrado: 28 Feb 2017, 13:13
Agradecido: 0
Agradecimiento recibido: 0

Muy buen tutorial!! Muchas gracias
Responder