Los puertos de propósitos general permiten al usuario poder controlar dispositivos físicos electrónicos como: motores, relés, leds, conversores analógicos/digitales, sensores, pantallas, y más.La ventaja de poder controlar estos componentes radica en que a través de software podemos crear programas para comandarlos y a diferencia de arduino, podemos utilizar diferentes lenguajes de programación que van desde Python, shell scripting, Java, Perl, y bueno… por ahí sigue la lista.
En las imágenes siguiente podremos observar el layout de los pines en su primera y segunda versión.
A primera vista quizás no observes el cambio pero con respecto a la primera versión, el pin físico 13 ha sido reemplazado en la segunda versión por el GPIO 27 en vez del 21, así como el pines físicos 3 y 5. Para saber con cuál de los dos layouts debes trabajar puedes hacer un cat al archivo ubicado en /pro/cpuinfo y fijarte en el parámetro que diga: «Revision». Si aparece 0002 o 0003 entonces tendrás la primera versión, y en tal caso que te aparezca un número superior o una letra entonces estas utilizando la segunda versión. En mi caso, yo estoy trabajando con la segunda versión.
Como observarás también, el Raspberry Pi cuenta con las tecnologías de comunicación serial a bajo nivel más famosas y utiles en el mercado actual: I2C, SPI, UART.
También puedes visitar nuestro artículo «Diagrama de pines para el Raspberry Pi» que hacer referencia a un archivo riguroso y detallado sobre los pines del Pi que incluyen los dos layouts.
Indagemos en este pequeño tutorial cómo podemos controlar el encendido y apagado de un LED, el popular Hola mundo a través de shell scripting y python. En este caso necesitarás un led, una resistencia de 220 ohm, cables macho-hembra, cablecitos-jumpers y un breadboard.
Colocamos el led en serie con la resistencia y lo conectamos a los pines físicos 12 (GPIO 18) y el 14 (Ground).
Shell scripting
¿Cómo podemos acceder a los pines del Pi? Para esto será necesario el uso de la consola. Utilizaremos el siguiente comando:
1 |
sudo echo > 18 /sys/class/gio/export |
Este comando lo que hará será crear un directorio en la carpeta /sys/class/gpio que contendrá archivos para controlar el pin que hayas exportado.
Si te colocas en el directorio creado:
1 |
cd /sys/class/gpio/gpio18; ls . |
Podrás observar que existen diferentes archivos: value, uevent, power, edge, active_low, direction, subsystem
Cada archivo tiene una función específica, para nuestro caso utilizaré dos de ellos: direction y value. El primero consiste en asignar si el puerto a utilizar es de entrada o salida (realiza la misma función que un puerto de registro de direccionamiento DDRx) y el segundo indica el valor binario a colocar al pin.
Para nuestro tutorial el gpio 18 será salida y el valor a escribir será 1. Esto lo podemos hacer con los siguientes comandos:
1 2 |
sudo echo out > direction sudo echo 1 > value |
Al ejecutar estos comandos en la terminal, observarás que el led encenderá. Para apagarlo puedes hacerlo con:
1 |
sudo echo 0 > value |
Python
Si en algún momento decides utilizar el Raspberry Pi para hacer proyectos complejos y elaborados, el uso de shell scripting no sería viable. Para eso existen otras opciones como python que a través de una inmensa cantidad de módulos, el mantenimiento y ejecución de un circuito se hace más fácil y llevadero.
Para el interés de nuestro tema, vamos a utilizar una librería disponible en pidora llamada python-rpi-gpio, para obtenerla podemos descargarla desde los repositorios oficiales:
1 |
sudo yum install python-rpi-gpio |
Esta librería se encarga de manejar los pines del Raspberry a través de Python. Ahora lo que haremos será iniciar el intérprete de python a través de root:
1 |
sudo python |
Importamos el módulo:
1 |
GPIO.setmode(GPIO.BCM) |
Y asignamos el GPIO 18 como salida:
1 |
GPIO.output(18,GPIO.HIGH) |
Apagamos el led:
1 |
GPIO.ouput(18, GPIO.LOW) |
¿Ves que se obtiene el mismo resultado?
¿Qué pasa si ahora deseamos algo más elaborado con python, quizás hacer este mismo proceso por siempre?
He aquí donde el uso de la programación juega un papel importante. Podemos crear un sencillo programa que encienda/apague un led y se ejecute por siempre, lo único que necesitas es crear un archivo con extensión .py y copiar el siguiente código:
La mayoría de los métodos utilizados ya han sido previamente exploradas excepto por time.sleep(0.1) que sirve para definir un retardo, es el equivalente de la función delay() en arduino.
A diferencia de delay() el tiempo a ingresar está en segundos. Ejecutamos el programa en python con el comando siguiente:
1 |
sudo python blink.py |
Podrás observar cómo tu led se enciende y se apaga 100 ms.
Y con esto termino el tutorial, ten en cuenta que al utilizar shell scripting para acceder a las propiedades del pin en vez de crearse archivos como tal, se crearon archivos virtuales que facilitaron el acceso a bajo nivel del pin. Los pines de entrada y salida del Raspberry pi utilizan 3.3 V para el nivel lógico 1, así que habrá que tener cuidado al colocar cargas que necesitan voltajes de operan por encima de este valor.
Espero que les haya gustado este tutorial, compartánlo en las redes sociales y sigue visitándonos.