Una vez instalados Raspbian y Node.js en la Raspberry, llega el momento de empezar a desarrollar software. Lo que necesito es, en primer lugar, encontrar un módulo JavaScript que me permita acceder a GPIO. Investigando un poco, descubro que hay muchos paquetes que permiten controlar la GPIO de la Rasp desde JavaScript.
Por lo que he ido mirando, quizás los que más destaquen sean:
-
pi-gpio. Proporciona una interfaz muy simple para el manejo de la GPIO.
-
rpi-gpio. Parece un poco más elaborado que el anterior. Este paquete usa el esquema de numeración de pines de GPIO propio de Raspberry (en lugar de la numeración del pin físico) y todas las funciones de entrada/salida son asíncronas lo que, a priori, encaja mejor con el esquema de funcionamiento de Node.
-
onoff. Proporciona funciones tanto síncronas como asíncronas para el acceso de E/S a GPIO. Además, proporciona un mecanismo de detección de interrupciones que permite la invocación de callbacks cuando cambia la señal en un pin y evita estar haciendo pooling a GPIO.
-
node-rpio. Sólo proporciona funciones síncronas pero tiene una amplia cobertura funcional y parece que es muy rápido.
Tras unos primeros intentos con rpi-gpio, me voy a decantar por trabajar con el último de los cuatro (node-rpio).
Una cosa que hay que tener en cuenta es que para el acceso a los pines de GPIO en la Rasp es necesario tener privilegios de administrador. Desde el punto de vista de seguridad, no es una buena práctica el conceder privilegios de administrador a diestro y siniestro así que, en primer lugar, voy a instalar la herramienta gpio-admin:
Cerramos la sesión y volvemos a entrar y ya debemos tener la membresía del grupo gpio.
Otro aspecto a considerar es el esquema de nombrado de los pines. Dado que este es un aspecto que puede ser muy importante (nos podemos cargar la Rasp conectándola mal) voy a ver si recapacito un poco. El módulo node-rpio soporta dos esquemas de numeración de interfaces: la numeración física y el esquema de numeración de GPIO (WiringPi).
En fin, vamos a por ello. Voy a empezar con algo sencillo empleando un LED de dos colores (verde y rojo) conecto la pata de rojo al pin 11 (físico, GPIO.0 en numeración WiringPi) y la pata verde al pin 1 (fisico, GPIO.1 en numeración wPi) y la tierra al pin 6. El montaje, con los accesorios que tengo, queda así:
Empiezo probando que funciona desde la línea de comandos, establezco el modo de los pines correspondientes a los colores a salida.
Compruebo que, efectivamente, el valor está establecido a out (pin 0 y 1 wPi o pines físicos 11 y 12):
Si ahora escribo el valor de salida 1 en el pin 0 debería encenderse el LED de color rojo:
Escribo el valor de salida 0 en el pin 0 y el valor de salida 1 en el pin 1 y el LED deberá lucir en verde:
Bueno, hemos superado la primera prueba. En el siguiente post empezaré a programar en JavaScript para hacer esto mismo.