Al principio nos conectábamos a Internet con nuestros ordenadores. Luego empezamos a hacerlo con nuestros teléfonos móviles. Ahora nuestros televisores, nuestros relojes, nuestros coches e incluso nuestros frigoríficos están conectados a la red de redes. Estamos en la era del Internet de las Cosas (a partir de ahora IoT, por sus siglas en la lengua de Shakespeare) y esto es sólo el principio. Pero, ¿cómo y en qué lenguaje puedo desarrollar programas y aplicaciones para este IoT? En este artículo te vamos a proporcionar algunas claves para ponerte manos a la obra y contribuir con un futuro que cada vez está más presente.
Primero, elegir el hardware
Se estima que para 2020 habrá más de 25.000 millones de dispositivos, de “cosas”, conectadas. Pero las “cosas” (una tostadora, el calentador del agua, el aire acondicionado…) de por sí no están conectadas. Necesitas introducir en ellas pequeñas computadoras que hagan el trabajo, microsistemas embebidos que convierten aparatos inertes en dispositivos conectados. Hasta hace poco estos sistemas eran caros y complejos pero desde un tiempo a esta parte han aflorado microcomputadores baratos y accesibles para el gran público, produciéndose un gran boom. Elegir entre uno de estos microcomputadores debe ser nuestro primer paso para adentrarnos en el mundo del desarrollo para el IoT.
Arduino Uno
Con Arduino empezó todo. Creado en 2006 en Italia y con fines didácticos (por supuesto open source) pronto se formó uno importante comunidad a su alrededor. La placa estrella de este proyecto es Arduino Uno. Sus características (procesador ATmega328P, 14 pines de I/O digital, 32Kb de memoria Flash, 2kb de SRAM, 1kb de EEPROM…) la hacen ideal para adentrarse en la programación de microcontroladores y hacer tus primeros pinitos en el mundo del IoT.
Raspberry Pi 2
La evolución de Arduino y todo un fenómeno desde la aparición de la Raspberry Pi original en 2011. La actual joya de la corona del proyecto de la frambuesa es la Raspberry Pi 2 que con un procesador ARM Cortex-A7, 1Gb de RAM, 40 pines, 4 puertos USB, puerto HDMI, interfaces para cámara y display, slot para microSD, soporte hasta para Windows 10 y posibilidad de programación en Python, Ruby, C o Visual Basic, es una auténtica bestia a precio muy moderado, open source y con una comunidad muy nutrida y activa detrás. Ideal para casi cualquier proyecto que se te ocurra.
Si quieres algo menos “sofisticado”, para esta campaña navideña han sacado la Raspberry Pi Zero, un pequeño (pero completo) microcomputador por tan solo cinco dólares.
BeagleBoard
Posiblemente la gran rival actualmente de la Raspberry Pi en el mundo de los microcomputadores open source low-cost sea el proyecto de origen texano BeagleBoard. Su último modelo de placa, la BeagleBoard Black, cuenta con unas características muy apetecibles: procesador ARM Cortex-A8 a 1Ghz, 4Gb de almacenamiento Flash, 512Mb de RAM, 2×46 pines, conectividad USB, microHDMI y ethernet y soporte para Linux y Android. Un gran dispositivo a precio reducido con múltiples opciones para su uso en el IoT.
Intel Galileo
La Intel Galileo es el fruto de la colaboración entre la Fundación Arduino y la todopoderosa Intel. Viene a ser como una Arduino Uno con esteroides y basada en la arquitectura x86 de Intel con una potencia similar a aquellos primeros procesadores Pentium de mitad de los 90. Es el primer paso de la nueva familia Intel Spark y resulta ideal para proyectos de domótica, wearables y, claro está, IoT.
Kinoma Create
Para terminar este repaso nos alejamos un poco de las pequeñas placas y microcomputadores para hablar de un producto más completo y complejo y con muchas posibilidades, la Kinoma Create. Pantalla táctil, procesador ARM SoC de 800Mhz, 128Mb de RAM, USB 2.0, Wifi, Bluetooth, microSD, altavoz, micrófono y distribución Linux son las características de un dispositivo con grandes posibilidades.
Sigamos con el lenguaje de programación adecuado
Una vez elegido el hardware, toca decidir que lenguaje de programación utilizar para darle vida y conectarlo al mundo. Podemos optar por lenguajes clásicos que dominamos y obtienen buenos resultados o por lenguajes algo más específicos que pueden sacar toda la chicha al dispositivo (aunque, claro está, la curva de aprendizaje será netamente más complicada). Algunos de ellos pueden ser:
C / C++
Disponible en prácticamente todos los dispositivos reseñados más arriba, procedimental, compilado, muy pegado al hardware, curva de aprendizaje no demasiado compleja… características muy interesantes para la programación del IoT las de este viejo rockero de C (y su evolución C++). Un back to basics en toda regla.
Java
Uno de los aspectos que más influyó en el auge de Java a finales de los 90 y principios de siglo fue que se trate de un lenguaje multiplataforma. Esto junto a su uso tan extendido (pocos desarrolladores con cierto bagaje no habrán tenido que utilizarlo en algún momento u otro) y a proyectos como el IDE Eclipse IoT, que pretenden facilitar el desarrollo IoT con Java, hacen que sea una opción más que interesante.
Javascript
Hace ya tiempo que aquello de que Javascript era simplemente un lenguaje para los clientes web quedó desfasado. El éxito del runtime para servidores Node.js es el perfecto ejemplo de esto y precisamente Node.js resulta una opción muy interesante para programar el IoT: dirigido a eventos asíncronos, modelo de I/O no bloqueantes, escalable, ligero, con buen rendimiento y una comunidad tremendamente amplia y activa detrás de él. Poco más se puede pedir para ponerse a trabajar con IoT.
Python
Elegante, legible, flexible… Python es seguramente el lenguaje de moda en desarrollo web y su tránsito al IoT puede ser igual de exitoso. A ello seguro que contribuye el hecho de que a pesar de ser un lenguaje interpretado puede ser ejecutado a través de distintos precompiladores y este código ejecutable ser distribuido. Es el lenguaje estrella para “trastear” con la Raspberry Pi y por algo será.
Go / Rust
Dos lenguajes bastante modernos, uno creado por Google, el otro por Mozilla pero los dos con más que evidentes similitudes (inspirados en C, muy centrados en temas de concurrencia y multihilo) y muy interesantes para la programación del IoT sobre todo si necesitas manejar dicha concurrencia tanto de entrada como de salida con solvencia. La curva de aprendizaje será dura seguramente (aunque cada vez hay más referencias donde agarrarse) pero los resultados pueden llegar a ser óptimos.
Forth
Forth es un lenguaje especialmente creado para sistemas embebidos y aplicaciones en tiempo real, es decir, ideal para el IoT. Es un lenguaje que no es nuevo (nació en los años 70) y que está orientado a pila y resulta algo ilegible por lo que la curva de aprendizaje no será fácil pero los posibles beneficios.
Ensamblador
Pero si todos estos lenguajes anteriormente referidos te parecen juegos de niños para un tipo (o tipa) duro como tu, siempre puedes recurrir al bajo nivel, al lenguaje ensamblador, al barro de pelear cada byte de memoria. Desde luego conseguirás que tu dispositivo de IoT haga exactamente lo que tu quieres que haga y gastando lo mínimo imprescindible. Ahora bien, es muy posible que pierdas la cabeza (o los ojos) en el intento.
Y finalmente, conectemos con el mundo
Ya tenemos nuestros dispositivos programados con el lenguaje que más nos gusta y/o convence. Guardan una serie de datos o realizan aquellas acciones que se le indican (o las dos cosas). Pero el verdadero potencial del IoT surge cuando conectamos estos dispositivos. Para esto hay una serie de aplicaciones y plataformas open source que nos pueden venir muy bien a todos los desarrolladores.
Node-RED
Una herramienta visual, sencilla, desarrollada en Node.js y open source (puedes encontrar su código en GitHub) creada por IBM y que permite el añadir dispositivos (hardware, APIs, servicios…) a una red y gestionarlos sin necesidad de tener conocimientos de programación. Node-RED es altamente escalable, de gran utilidad y realmente sencilla de manejar.
OpenHAB
Ideal para temas de domótica y “hogar conectado”, OpenHAB es una plataforma que permite la comunicación entre dispositivos que “hablan” lenguajes distintos. Esto lo consigue a través de un potente motor de reglas y una serie de interfaces nativas que se comunican a través de una API. Puede correr en cualquier dispositivo con una máquina virtual Java (JVM) y tiene detrás una comunidad muy ruidosa y activa.
Google AppScript
Dentro del servicio Google Apps del gigante de Mountain View podemos encontrar una herramienta pequeña pero poderosa de scripting llamada Google AppScript . Con Google AppScript podemos automatizar tareas como recoger datos de cualquier dispositivo que tengamos conectado y plantarlos en otro con apenas unas cuantas líneas de código Javascript. Por ejemplo, podemos ir actualizando una web con los datos de temperatura que saquemos de un medidor, mandar a un display los tweets que tengan un hashtag predeterminado…
ThingSpeak
ThingSpeak parte de una idea similar a Google AppScript pero es un proyecto más grande y con más posibilidades ya que además de capturar y enviar datos ofrece herramientas para analizarlos. Es open source (aquí su código en GitHub), tiene una API pública, permite geolocalización, funciona con Arduino, Raspberry, webs, apps… Desde luego un proyecto con una pinta estupenda.
Bonus track: Inspírate y fórmate
;
Ya tenemos todo lo necesario para adentrarnos en el mundo del IoT… bueno, quizás haga falta algo que tiene una importancia capital: una idea. Tranquilidad, siempre puedes pasarte por Kickstarter o Indiegogo para inspirarte y motivarte con los proyectos referentes a este mundillo que hay actualmente en estas famosas plataformas de crowdfunding (que no son pocos, por cierto).
Si por contra lo que buscas es una formación en IoT más específica y reglada (que además nunca viene mal un título que añadir al CV o al Linkedin), ya se están ofertando cursos, masters y programas en entidades como Coursera.
Imágenes | arduino.cc, pablobd, eclipsecon.org, openHAB