Front & Back

Blog sobre el Desarrollo de aplicaciones web

Laboratorio Cómo usar los pines GPIO de la Raspberry PI

GPIO (Generic Purpose Input Output) es un pin de entrada y salida que puede ser programado por el usuario en tiempo de ejecución. Al no estar definido para un propósito concreto, podemos utilizarlo para interactuar mediante señales digitales con un dispositivo periférico.

En este post vamos a utilizar tanto Node.js como la línea de comandos para interactuar con los pines GPIO de la Raspberry PI (Modelo B) y encender o apagar un LED que hemos conectado, pero antes de nada echemos un vistazo a la disposición de los pines:


Pin GPIO RaspBerry PI

Como podemos ver, contamos con dos pines de alimentación de 5V, otros tantos de 3.3V y cinco de tierra (GND). Por otra parte (en verde) tenemos 17 pines digitales cuyo estado puede ser HIGH (un voltaje entre 2 y 3.3) o LOW (entre 0 y 0.8). Los voltajes entre 0.8 y 2 serán obviados. Tenemos que tener en cuenta que estamos trabajando con un dispositivo que maneja niveles lógicos de hasta 3.3V, esto significa que en ningún caso deberemos alimentar ninguno de los pines digitales con un voltaje superior.

Diseño del circuito

Para la activación del LED el circuito es bastante sencillo; os pongo a continuación el esquema:

Esquema circuito LED

Consta básicamente de cuatro elementos:
- Un LED (D1), que emirá luz cuando reciba corriente (una intensidad entre 10 y 40mA).
- Una resistencia (R1) de 330 Ω
- Alimentación mediante el GPIO04 de la Raspberry.
- Conexión a tierra (GND Raspberry).

¿Por qué es necesario usar una resistencia?
I=VRSegún la ley de Ohm la intensidad de corriente eléctrica (I) es igual a la tensión (V) divida entre la resistencia (R). Si eliminásemos la resistencia del circuito, tendríamos que R = 0, y teniendo en cuenta que el resultado de una división entre cero tiende a infinito, sin la resistencia provocaríamos un cortocircuito que dañaría el LED o incluso la propia Raspberry.

A la hora de escoger la resistencia ha habido que tener en cuenta la intensidad de polarización de un led típico; que según he leído está entre los 10 y los 40mA. Considerando que la eficiencia de un LED es superior cuanto menor es la tensión que circula a través de él, la ecuación está clara:R=VI=3.30.010 = 330 ΩMontaje del circuito

Montar el circuito es bastante sencillo; siguiendo las indicaciones del esquema tendremos que conectar el ánodo del LED; ([+] y la más larga de las dos patillas) al GPIO04, el cátodo (-) a la resistencia, y ésta a su vez a cualquier conexión GND. Os pongo a continuación una imagen:

Encendido de un led mediante el GPIO de Raspberry PI

1 - He usado para realizar las conexiones una "breadboard" o placa de pruebas; una pequeña plancha con orificios interconectados muy útil para el prototipado de circuitos.

2 - Por otra parte es imprescindible un conector GPIO. El que kit que he utilizado resulta muy útil.

Manejando el GPIO04 para la activación del LED

Para realizar lecturas o escrituras a periféricos utilizando un sistema UNIX, puede crearse un fichero de acceso a dicho perifériferico en el sistema. Hemos de tener en cuenta que sólo el usuario root puede realizar estas modificaciones, así que lo primero es lo primero:
$ sudo su

Ahora crearemos un acceso al GPIO04:
$ echo 4 > /sys/class/gpio/export

A continuación indicaremos si vamos a leer o a escribir ("in" o "out") en este caso se trata de una señal de salida:
$ echo out > /sys/class/gpio/gpio4/direction

Ahora podemos utilizar este acceso para encender o apagar nuestro LED:
$ echo 1 > /sys/class/gpio/gpio4/value #Para encender
$ echo 0 > /sys/class/gpio/gpio4/value #Para apagar

Para cerrar el acceso al GPIO04:
$ echo 4 > /sys/class/gpio/unexport

Cómo manejar el GPIO con Node.js

Por último, a modo de curiosidad, voy a hablaros de pi-gpio una librería para acceder al GPIO de la Raspberry PI con Node.js. La instalación no tiene misterio; como siempre npm:
$ npm install pi-gpio

El código para encender nuestro LED sería el siguiente:
var gpio = require("pi-gpio"); //Incluimos la librería

//Ojo porque a continuación nos referimos al número de pin. GPIO04 = pin 7
gpio.open(7, "output", function(err) {
gpio.write(7, 1, function() { //Le pasamos 1 para encender; 0 sería apagado
gpio.close(7);
});
});