Raspberry Pi en la industria

El día de ayer fui testigo de algo que me emociono, de hecho lo catalogue de sorprendente porque en realidad esa fue la sensación que tuve al verlo, de sorpresa, y es que vi como uno de los monitores que muestra la cartelera de películas de una cadena de cines de España se había colgado reiniciándose o algo así por el estilo (pantalla negra y logs de comandos/sentencias), pero no es que esto específicamente lo que me emociono, sino ver el logo de la frambuesa de Raspberry Pi, y di por hecho que tendría a su vez instalado un Raspbian o algún derivado de este (aunque ciertamente podría haber sido alguna otra distribución).

Monitor mostrando logo de raspberry pi

Monitor mostrando logo de raspberry pi

Antes que nada perdonen la calidad de las imágenes, pero quiero compartir con ustedes mi emoción. Me emociona saber que haya personas, compañías que se aventuren en la industria, el comercio o lo que sea con nuevas tecnologías, sobretodo de este tipo, económicas, con una filosofía DIY (Do it yourself / Hágalo usted mismo), porque esta pequeña muestra nos ratifica que Raspberry Pi (y otros mini ordenadores de la competencia) tienen cabida en el desarrollo de proyectos (por muy pequeño o simple que sean), esto me emociona porque aunque yo al igual que otros piense que esto es el inicio de nuevas cosas que vendrán en el futuro (IoT, Big Data y cloud todo junto), ciertamente ha habido momentos en que he llegado a cuestionarme a mí mismo ¿Será que su función será únicamente para prototipos o cosas caseras? Aunque el hacer prototipos no este mal, realmente me entusiasma ver ese logo de la Raspberry Pi, porque nos demuestra que forma parte de un proyecto que esta en PRODUCCIÓN, es decir, para mí esta es una prueba fehaciente de que quienes soñamos con implementar cosas útiles con la Raspberry  e incluso sacarle provecho económico tenemos una oportunidad y que si se puede.

Monitor de cartelera de cine con logo de raspare pi

Monitor de cartelera de cine con logo de raspare pi

Nuevo juguete, La Raspberry Pi

Hacia muchisimo tiempo que no escribía, pero bueno hoy que tengo la oportunidad y me gustaría compartir con ustedes par de cosas referentes a la raspberry pi y conocer de ustedes su opinión al respecto y si tienen alguna idea o proyecto casero, porque no compartirla.

Para los que no saben, la raspberry pi es una placa computadora de bajo coste, creada en Reino Unido con fines didácticos, hay 2 modelos el A y el B. El modelo B a diferencia del A, consta de puerto ethernet y de un puerto USB adicional, 512 MB de RAM (a diferencia de los 256 MB del modelo A), ambos modelos poseen el mismo CPU y GPU además de una salida HDMI, pero las características adicionales presentes en el modelo B hacen que sea un poco mas cara que el modelo A. En resumen en esa pequeña placa si acaso solo un poco mas grande que una tarjeta de crédito, tenemos la base para armar una computadora, ya solo sería necesario los periféricos e iniciarla con un sistema operativo.

Durante mucho tiempo venia oyendo/leyendo acerca de la raspberry pi, pero no había dado el paso de adquirir una, pues bien hace pocos días encargue un kit de iniciación por internet y ya finalmente esta en mis manos. ¿Qué me motivo a comprarla? pues les confieso que la cantidad de proyectos mas que interesantes que empece o ver en artículos y paginas por internet, que hacen que quiera llevar a cabo yo también esos pequeños proyectos tipo DIY (Do It Yourself o como sería en español Hazlo tu mismo). Aunque yo ya poseo una placa Arduino, he trasteado/jugueteado menos de lo que hubiera querido pero aun así me he divertido haciendo cosas simples (p.e. java y arduino) y quiero seguir haciendolas pero ahora con usando también mi nueva raspberry pi.

Por internet he leido que con las raspberry han hecho de todo tipo de cosas como por ejemplo:

  • Un media center, reproductor AirPlay, smart TV (al estilo google TV o Apple TV).
  • Ordenador de abordo para el coche (computadora para el carro).
  • Una maquina de arcade con NES, SNES, SEGA, ATARI.
  • Punto de Acceso Wifi, servidor Radius.
  • Domótica, Internet de las cosas, robots.
  • Servidores NAS, Servidor Web, radio por internet, Rack de raspberrys (super computador de bajo coste, computación paralela).
Como ven igual que con arduino, aquí el limite es nuestra imaginación, e incluso combinando ambas plataformas también podríamos lograr cosas interesantes. Hay algunos proyectos que me gustaría llevar a cabo y se los detallo a continuación:
  • Controlar el termostato de la calefacción de mi casa vía Internet o SMS.
  • Construir reproductor AirPlay aprovechando unas cornetas que se les daño la conexión para el iPod/iPhone.
  • Una maquina arcade casero, y tener allí todos esos clásicos de ATARI, NES y SNES.
  • Un servidor RADIUS casero.
  • Notificar por redes sociales de forma automática mi localización cada 30 min o cada 50 km (por decir algo) cuando vaya de viaje en el coche (carro).
  • Enviar SMS o correo electrónico que me notifique, cuando llegue correspondencia a mi buzón de correo.
Estas son alguna de las ideas que me gustaría poder desarrollar, algunas demandan mas tiempo que otras y de igual manera podrán ser de mayor o menor interés para ustedes, pero a mi realmente me causan ilusión y me parece entretenido poder hacerlas, es por eso que denomino a la raspberry pi mi nuevo juguete.
¿Ya tienes tu raspberry pi? ¿Cuales han sido tus impresiones?, ¿qué has construido con ella o que proyectos te gustaría realizar?.


Comunicación serial java y arduino

Voy a mostrarles a continuación un sencillo ejemplo de interacción y comunicación vía Serial con una placa Arduino (one). Tengo aproximadamente un mes jugando con mi arduino one y confirmo lo que me habían contado, «es sencillamente emocionante ver que haces encender y apagar un LED», como me comento una amiga «es un juego para adultos», no me queda mas que reirme y aceptar que en mi caso es así y disfruto del poco tiempo que he podido dedicarme a hacer ejemplos.

Ha sido de esta manera, haciendo ejemplos del libro Getting Started with Arduino y leyendo por internet que me nació el gusanillo (curiosidad) por hacer un sencillo ejemplo pero donde en vez de comunicar los lenguajes Processing y Arduino, lo hiciera usando Java, C o C++ (estos 2 últimos espero poder hacerlos y de ser posible publicarlos mas adelante). ¿Con qué finalidad? además de aprender, sencillamente poder gozar de las bondades y herramientas que nos ofrece el trabajar con los lenguajes anteriormente mencionados.

Ahora si vamos al grano, primero indicare los componentes utilizados:

  • 1 Placa arduino one
  • 1 bombillo LED
  • 1 cable usb AM/BM (para cargar programa arduino)

La conexión es muy sencilla, consiste únicamente de colocar el LED (la pata mas larga) en el pin 13 y la otra pata en GND (tierra).

Una vez, hecho esto pasamos a hacer el sketch Arduino.

Compilamos el sketch y lo cargamos en la placa Arduino. Cargado el sketch, procedemos entonces con el programa Java. Para poder conectarnos con la placa arduino será necesario que tengamos la biblioteca RXTX (una biblioteca semejante a la Java Communications API extension), esta biblioteca posee los jar necesarios para poder establecer comunicación vía serial con la placa. La instalación dependerá del sistema operativo que utilicen, así que les recomiendo seguir los pasos de instalación indicados en el fichero README de la versión de la biblioteca (así sea la versión con los binarios o los fuentes) que se descarguen, o en el sitio web en la sección de instalación.

Una vez descargada e instalada la biblioteca RXTX, seguimos con nuestro programa Java, que consistirá unicamente de una interfaz grafica sencilla (un JFrame) con 2 botones para encender o apagar el LED.

Aqui les dejo el código fuente java:

NOTA: Tener en cuenta que para programar en Java podremos usar el IDE de nuestra preferencia, en mi caso he utilizado Eclipse. [Actualización] En el código Java no olvidar editar la constante PORT_NAME e indicar el puerto que utilicen[/Actualización]

Para compilar escribir en consola:
javac -classpath path_instalacion_biblioteca/RXTXcomm.jar:. JPanelTurnOnOffLED.java

Después de haber compilado nuestro programa Java, procedemos a ejecutarlo, de la siguiente manera:

java -Djava.library.path=. -cp path_instalacion_biblioteca/RXTXcomm.jar:. JPanelTurnOnOffLED

path_instalacion_biblioteca: Ruta de instalación de la biblioteca, es decir, donde estarán alojados los jar.

Voilà!!!, ya deberíamos poder visualizar el JFrame con sus respectivos botones de encendido y apagado. Así que, ¿qué esperas? empieza ya a encender y apagar tu LED.

Recomendación: En el libro Getting Started with Arduino, nos sugieren que en caso de mantener el LED mucho tiempo encendido usar una resistencia de 270 ohm, en cuyo caso necesitaríamos adicionalmente para hacer nuestro ejemplo una breadboard y par de cables.

Puntos importantes a tener en cuenta para usuarios Mac OS X (snow leopard)

– Si colocas (copiar con el comando sudo) la biblioteca RXTX en /Library/Java/Extensions, nuestro programa java podrá ser compilado y ejecutado de la siguiente manera:

javac JPanelTurnOnOffLED.java

java JPanelTurnOnOffLED

Aunque esta quizás no es la forma más recomendada en caso de que se llegase a trabajar con distintas versiones de la biblioteca, ya que en ese caso lo adecuado sería tener una instalación para cada versión y compilar y ejecutar nuestro programa Java de la manera indicada en un principio para poder indicarle al compilador y a la maquina virtual con que versión de la biblioteca estamos trabajando.

– Puede que te sea necesario al momento de ejecutar el programa Java indicar que se ejecute en 32 bits, si obtienes una exception similar a la que te muestro a continuación

«java.lang.UnsatisfiedLinkError: /Library/Java/Extensions/librxtxSerial.jnilib: no suitable image found. Did find: /Library/Java/Extensions/librxtxSerial.jnilib: no matching architecture in universal wrapper thrown while loading gnu.io.RXTXCommDriver»

Lo que implicará que tengamos que añadir un argumento a nuestro comando de ejecución , quedando de la siguiente manera

java -d32 JPanelTurnOnOffLED

– Ir a la carpeta /var/lock (si no existe, crearla) y otorgarle permisos de escritura al o los usuarios que vayan a ejecutar el programa, esto podrás hacerlo desde el finder o por linea de comandos con el comando chmod.

Conclusión

Cada día que pasa y me involucro más con mi nuevo hobbie, me fascino con su versatilidad, pues además de ser una arquitectura abierta, nos permite interactuar con una gran gama de lenguajes de programación entre los que les puedo mencionar C, C++, Java, Objective-C, entre otros, de una gran lista, lo cual como les dije antes, nos permite gozar de las bondades (ventajas) de un lenguaje o plataforma de software, como lo es en este caso Java, ya que podríamos aprovechar el gran numero de bibliotecas existentes, así como también de su variedad de frameworks (que son unos cuantos). Este ejemplo ha resultado interesante para mi, ya que además de lo mencionado anteriormente, es un ejemplo que podemos extrapolar a algo mas complejo, es decir, podemos imaginar que en vez de ser 2 botones, podemos crear una interfaz mas compleja con unos 5 o 6 botones y cada uno de ellos con una instrucción distinta, que nos permita por ejemplo dado el botón pulsado, ver en una pantalla, la temperatura, posicionamiento global, etc…, o incluso controlar un servomotor.

En fin, como comente en un post anterior, aquí el limite es nuestra imaginación y mas aun cuando podemos interactuar con una variedad de lenguajes, lo que no resulta en un impedimento el no saber Processing, pues si tu fuerte es Perl, Python o Java, no importa, puedes empezar a programar ya!!!.

Video de la aplicación Java en ejecución