Recientemente he estado trabajando con una pequeña, linda, encantadora y fascinante pieza de tecnología moderna y mis experiencias con ella son merecedoras de las notas más altas: ¡la Raspberry Pi!
Con este post, pienso compartir algunas impresiones sobre mi experiencia hasta ahora con la computadora; también tomaré la oportunidad de compartir algunos útiles detalles sobre como utilizar una librería de lenguaje C, WiringPi, para poder utilizar la Interface de Entrada y Salida General (GPIO) en el tablero de la Raspberry haciendo una prueba de concepto: ¡prender un LED en un circuito! Esto puede ser usado como base, o marco teórico, para incitar la curiosidad con la Raspberry y llevarlos a realizar proyectos más ricos: tareas como controlar y leer datos de motores, periféricos, lectores de NFC, Bluetooth, guardar y leer a/desde memoria, añadir WiFi, añadir GPS, son posibles con este tipo de recursos, para poder realizar proyectos de cómputo embebido. Si tienes experiencia con Arduino, Raspberry Pi te puede ser de increíble interés: no está tan enfocado en proveer facilidades para el diseño de circuitos, sino que está enfocada en proveerte un Microprocesador usable y 100% programable, que puedes echar a andar rapidísimo y usar para correr cómputo complejo con lo que captures desde Arduino.
(NOTA: WiringPi, a la fecha, tiene una cantidad muy grande de wrappers disponibles, que permiten utilizarla con otros lenguajes de programación de uso general, como Python, Ruby, Java y etcétera, así que no solo están limitados a usar lenguaje C; sin embargo en esta ocasión compartiremos detalles sobre como usarla con C)
(NOTA 2: Este artículo originalmente apareció en the null-log en 2013, y está escrito con la Raspberry Pi revisión 1 (modelo B) en mente. A la fecha (2015) existe un segundo modelo, Raspberry Pi revisión 2, disponible a la venta, que, aún cuando es similar a la revisión 1, difiere por tener mayor caballaje de fuerza y más pines de GPIO disponibles. El procedimiento detallado en ese post está supuesto a ser usado en la revisión 1, pero puede aplicar a la revisión 2, sin embargo la compatibilidad entre ambas revisiones no está garantizada)
‘ ‘ ‘
La Raspberry Pi es el producto de la Raspberry Pi foundation, organización de Reino Unido sin fines de lucro, que pretende hacer cambios en la conciencia colectiva sobre la educación en ciencias computacionales y programación entre el público por medio de la provisión al mercado de un computador de increíblemente bajo costo, corriendo una versión de GNU/Linux, sobre arquitectura ARM, orientado a propósitos educativos. Y bajo costo, realmente, es uno de los puntos fascinantes de este aparato: por 35 dólares se puede conseguir el modelo más completo de la computadora, y está disponible una versión básica, con características limitadas, por 25 dólares…
El brillante y elegante computador, del tamaño de una tarjeta de crédito; está dirigido al mercado de educación de estudiantes de educación primaria a preparatoria principalmente, pero su atractivo sin duda alguna es para entusiastas de todas las edades . En sumario, la RPi es todo un esfuerzo encomiable y un producto que llama la atención tremendamente.
No pienso aburrirlos listando en seco especificaciones y detalles técnicos de esta cosita intrigante, esa información está más que documentada en mejores lugares; sin embargo, para propósitos básicos, al adquirir una Raspberry Pi estás obteniendo una computadora que corre a 800 MHz en CPU sobre arquitectura ARM y 512 MB de RAM, con salida de vídeo HDMI o RCA, memoria secundaria por tarjeta SD, y con conectividad Ethernet, simple pero adecuada (quiza podría ser comparado a una experiencia de poder de cómputo que encontrarías en un smartphone de alrededor de 2010). La Raspi se alimenta a tan solo la ínfima tensión eléctrica de 5V (como comparación, unas cuatro baterías AA comunes en serie podrían hacer correr la Raspberry como campeonas…).
Así que, ¡qué esperar! Toma alguna SD que tengas por ahí, flashéale la distribución de GNU/Linux para ARM de tu sabor favorito, conecta un monitor y un teclado y BAM, estás en camino hacia el cielo del cómputo embebido. Las posibilidades son infinitas…
Algunas ideas bonitas de qué hacer después de echar a andar la máquina:
- Instala un buen servidor HTTP/FTP (xampp para linux, sudo apt-get install xampp, está recomendado) y córrele tus scripts favoritos y sirve todo el HTTP que quieras desde tu PC. Instala un editor de texto (como vim o emacs, o sublime text si prefieres interfaz gráfica) para editar los scripts del servidor.
- Instala WiringPi para poder hacer interface y manejar con dispositivos externos con bus serial genérico por pines por medio del GPIO en el tablero de la RPi. El código fuente para este paquete está en repositorios de git hospedados en http://drogon.net (blog altamente recomendado sobre proyectos de electrónica con la Raspberry Pi). Puede que te interese pegarle a tu tablero la raspberry leaf para referencia rápida al pinout de la interface.
- ¡El cielo es el límite!
‘ ‘ ‘
Para finalizar, compartiré un poco de mi trabajo con la GPIO. ¡Pueden usarlo para empezar a hacer cosas más padres aún!
Primero, instalemos la librería WiringPi.
Instalar WiringPi puede ser complicado si no estás familiarizado con la terminal de Linux, git, y apt-get, así que presento los comandos necesarios para instalar esta librería adecuadamente, paso a paso.
En tu Raspbian, abrir la terminal y escribir:
sudo apt-get update
sudo apt-get upgrade
sudo apt-get install git-core
git clone git://git.drogon.net/wiringPi
cd wiringPi
Ahora usa el script incluido para compilar la librería:
./build
¡Con eso ya está instalado! ¡Que alegría!
Ahora, comparto un pequeño programa (no garantizado, bajo licencia beerware) (también disponible en github para su conveniencia) que escribí en quince minutos y probé en otros quince para hacer interface con un circuito electrónico simple y mandar pulsos de onda cuadrada intermitentemente (o sea, que prende y apaga un LED). Descárgalo y ponlo en el directorio de tu preferencia en la Raspberry.
La lógica del programa está descrita de una manera semi-satisfactoria, pienso yo, en los comentarios del código: básicamente hace que la Raspberry espere impulsos por en un determinado pin, y genere impulsos de salida por otro pin distinto. Conecta los pines del GPIO a los lugares adecuados del circuito, de preferencia usando alguna interface física serial (como por ejemplo una de cable IDE o parecido), luego abre la terminal, navega a donde pusiste el código que compartí, y compila mi source con el siguiente comando:
gcc -o gpioLEDS.c -lwiringpi
Y luego corre el archivo binario generado
./gpioLEDS
El LED deberá ahora parpadear intermitentemente.
NOTA SOBRE EL PINOUT DE LA RASPBERRY PI: podrán notar que la manera en que wiringPi hace referencia a los pines del GPIO en código no coincide con el número de pin físico actual: wiringPi hace referencia a los ocho pines usables en general (es decir, muchos de los pines del GPIO pueden ser dirigidos según sea deseado, pero es preferible usar uno de los ocho pines de uso general para propósitos del usuario a los que hace referencia WiringPi debido a ciertos propósitos especiales que algunas aplicaciones en la Raspberry tienen para algunos de ellos)
Esto puede ser un poco confuso al inicio:
- en WiringPi el pin 0 es el pin BCM_GPIO 17, que corresponde al pin físico 11;
- el pin 1 es el pin BCM_GPIO 18 que corresponde al pin físico 12…
Es recomendable googlear, googlear, y googlear más sobre estos detalles debido a que no es mi intención ahondar en la documentación de WiringPi, pero comparto la equivalencia de pines que encontré a continuación:
Con esto concluye nuestro post: ¿Están interesados en comprar una Raspberry Pi? ¿Ya cuentan con una y desean compartir sus experiencias? ¡Nos encantaría oír sus comentarios!