Controlar los GPIOs de la Raspberry con Bash y Python

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.

Raspberry Pi

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

FORO

Ir al foro de este Post

Artículos Relacionados

Poner un banner al arrancar Raspberry con el usuario

Campos

Instalar OctoPrint en Raspberry Pi

Campos

Deja un comentario

* Al utilizar este formulario, usted acepta el almacenamiento y el manejo de sus datos en este sitio web.

 

Este sitio web utiliza cookies para mejorar su experiencia. Asumiremos que está de acuerdo con esto, pero puede optar por no participar si lo desea. Aceptar Leer mas