Jugando y jugando con la Raspberry Pi, con mi nuevo octo-relé 😛 que he conseguido encontrar una forma muy fácil de programar acciones en el tiempo, sin usar engorrosas instalaciones de programas. Es decir, aquí traigo un howto para programar encendidos y apagados, de lo que quieras, de cualquier cosa. Simplemente usando un sencillo script programado en Shell Script, y el programador de tareas que todo GNU/Linux tiene.
Me explico, tendremos este esquema de todo conectado:
Raspberry Pi <=> Relés <=> Cosas que queremos encender y apagar
Recapitulando, a la Raspberry Pi le podemos conectar relés, que trabajan a 5v/3v a los pines de entrada y salida llamados GPIO. Por otro lado, tenemos el problema de que las cosas que queremos encender y apagar tienen voltajes distintos, corriente alterna quizá, e intensidades que nos pueden fundir la Raspberry Pi. Entonces le ponemos relés entre las cosas y la Raspi, que simplemente van a dar paso a la corriente o no.
Al grano, Shell Script que pone un valor en un pin del GPIO
Para este howto, necesitaremos el siguiente script que he programado. Simplemente configura el PIN del GPIO que quieras en modo salida (escritura), y pone el valor que quieras en dicho PIN:
#!/bin/bash
if [ ! -d "/sys/class/gpio/gpio$2" ]; then echo "$2" > /sys/class/gpio/export; sleep 1; fi
if [ ! $(cat "/sys/class/gpio/gpio$2/direction" | grep out) ]; then echo out > "/sys/class/gpio/gpio$2/direction"; fi
echo "$1" > "/sys/class/gpio/gpio$2/value"
Por ejemplo, para poner un 0 en el PIN 26 lo podemos usar así:
/home/pi/projects-src-pi/putValueInGpio.sh 0 26
Simplemente, mediante el sistema de ficheros, activa el PIN, lo configura en modo salida, y pone el valor pasado por parámetro al script. El primer parámetro es el valor, el segundo el PIN numerado usando el modo BCM. A continuación imagen con esquema del GPIO de 40 pines:
La lógica en el programador de tareas
Lo siguiente a hacer, y ya hemos terminado, es programar acciones en el tiempo con el programador de tareas. Te propongo ir a la linea de comandos y poner:
crontab -e
Es más fácil explicar con ejemplos, un caso de encendido y apagado de 3 luces conectadas a los pines 12, 16 y 20 puede ser el siguiente:
* 8-16 * * * ./projects-src-pi/putValueInGpio.sh 0 12
* 0-7,17-23 * * * ./projects-src-pi/putValueInGpio.sh 1 12
* 10-18 * * * ./projects-src-pi/putValueInGpio.sh 0 16
* 0-9,19-23 * * * ./projects-src-pi/putValueInGpio.sh 1 16
* 12-20 * * * ./projects-src-pi/putValueInGpio.sh 0 20
* 0-11,21-23 * * * ./projects-src-pi/putValueInGpio.sh 1 20
Me explico.. Una luz conectada al relé conectado en el PIN 12, se encenderá de 8 a 16 horas, y se apagará de 0 a 7 horas y de 17 a 23 horas. Y así sucesivamente con el PIN 16 y 20.
Le hemos programado con esto tanto el que se encienda como el que se apague. Y a cada minuto, se comprueba que los PINES están en el estado que deben estar según la hora actual. Esto es necesario para que el sistema se autocorrija. Sino, puede pasar algún problema justo en el momento del apagado, o encendido, que deje la cosa tanto encendida como apagada hasta el siguiente cambio de estado.
Por otro lado, en mi caso, he conectado los relés en modo normalmente cortados. Así, en mi caso, el relé se me activa con 0 dejando pasar la corriente, y se apaga con 1.
Terminando y referencias
Sólo me queda remitirte a las páginas oficiales de las herramientas usadas por si necesitas más: