En este articulo voy a explicar de una manera muy sencilla cómo controlar los GPIOs de la Raspberry con Bash y Python con el fin de encender y apagar cosas.
¿Qué son los GPIO?
GPIO (General Purpose Input/Output) en español (Entrada/Salida de Propósito General) vamos que es un pin genérico, cuyo comportamiento se puede controlar (programar) por el usuario en tiempo de ejecución, en nuestro caso en una raspberry pi
¿Porque los necesitamos?
Necesitamos controlar un ventilador para que cuando se caliente la Raspberry, se encienda dicho ventilador, con ello vamos a programar unos scripts para que luego desde Domoticz podamos controlarlo.
Explicación del funcionamiento de los GPIOs
La manera de acceder a los GPIO (en este caso al 18) es como si fuesen directorios. Podemos utilizar comandos como ‘ls’ o ‘cat’, entre otros, para conocer la estructura y contenidos de los directorios.
Ahora mismo no tenemos ningún pin accesible. Ni de entrada ni de salida. Tenemos que crearlo nosotros mismos. Queremos tener acceso al GPIO 18, así que introducimos el siguiente comando:
echo 18 > /sys/class/gpio/export
Tras esto, el sistema ha creado un archivo con una estructura GPIO que corresponde al número 18. A continuación, tenemos que informar a la Raspberry Pi de si el pin va a ser de salida o de entrada. Como lo que queremos es encender el GPIO 18, será de salida. Introducimos el siguiente comando:
echo out > /sys/class/gpio/gpio18/direction
Con esto, el sistema ya sabe que el pin será de salida. Ahora tendremos que darle valores. Existen dos posibles: ‘0’ y ‘1’.
Para encender el GPIO:
echo 1 > /sys/class/gpio/gpio18/value
Para apagar el GPIO:
echo 0 > /sys/class/gpio/gpio18/value
Una vez hayamos acabado de encender y apagar el GPIO, tendremos que eliminar la entrada GPIO creada, es decir, el GPIO 18. Para ello introduciremos el siguiente comando:
echo 18 > /sys/class/gpio/unexport
Con esto, ya sabemos crear, eliminar y cacharrear con los pines GPIO para encenderlos y apagarlos. Todos sabemos que esto es algo incómodo, así que lo ideal sería crear un programa, por ejemplo, en Bash para los más nostálgicos y Python que es más moderno, que nos ayude a gestionar nuestros GPIO.
Requisitos Previos
Se necesitan los siguientes pasos.
- Raspberry Pi.
- Un ventilador a 5v.
Instalar ventilador
Aquí os dejo una imagen para que veáis la distribución que he usado, tened cuidado y respetad la posición de los polos positivo y negativo.
Como se puede ver usamos el pin número 6 (cable para tierra, etiquetado como GND) y el pin número 12 (cable para el positivo, etiquetado como GPIO18). Conectamos e ventilador directamente si ninguna resistencia. Si vuestro ventilador requiere resistencia porque es menor de 5v o no estáis seguros os recomiendo usar una resistencia de 470 omnios (colocada en el cable positivo entre el pin y el ventilador). Si habéis puesto una resistencia y el ventilador no funciona como queremos, sustituid la resistencia por una menor.
Script Bash
Una vez montado el circuito, vamos a hacer un llamado a un “GPIO”
En Bash el siguiente script para encender el ventilador
#!/bin/bash #Exportamos el puerto GPIO 18 echo 18 > /sys/class/gpio/export #Lo configuramos como salida echo out > /sys/class/gpio/gpio18/direction #Encendemos el ventilador asignandole 1 como valor lógico echo 1 > /sys/class/gpio/gpio18/value
Para apagar el LED lo podemos hacer con el siguiente script.
#!/bin/bash #Apagamos el Ventilador asignandole 0 como valor lógico echo 0 > /sys/class/gpio/gpio18/value #Eliminamos la entrada del puerto GPIO 18 echo 18 > /sys/class/gpio/unexport
Lo que se hace con Bash es crear una jerarquía de directorios en /sys/class/gpio y añadir contenido a cada archivo que será tratado después como una variable.
Script Python
Para esto hay que instalar las librrias necesarias, y como siempre….
sudo apt-get update && sudo apt-get upgrade sudo apt-get install python-dev sudo apt-get install python-rpi.gpio
Creamos el script al que podemos llamar por ejemplo enciende.py.
#!usr/bin/env/ python #enciende.py #importamos la libreria GPIO import RPi.GPIO as GPIO #Definimos el modo BCM GPIO.setmode(GPIO.BCM) #Ahora definimos el pin GPIO 18 como salida GPIO.setup(18, GPIO.OUT) #Y le damos un valor logico alto para encender el Ventilador GPIO.output(18, GPIO.HIGH)
Con este podemos apagarlo, llamémosle por ejemplo apaga.py
#!usr/bin/env/ python #apaga.py #importamos la libreria GPIO import RPi.GPIO as GPIO #Definimos el modo BCM GPIO.setmode(GPIO.BCM) #Ahora definimos el pin GPIO 18 como salida GPIO.setup(18, GPIO.OUT) #Y le damos un valor logico bajo para apagar el Ventilador GPIO.output(18, GPIO.LOW) #Finalmente liberamos todos los pines GPIO, es decir, los desconfiguramos) GPIO.cleanup()
y podemos ejecutarlo como root con el comando “sudo python enciende.py” y “sudo python apaga.py”.