IoT a tu alcance

Estamos pensando en armar algo con IoT, algo simple como prender una luz desde nuestro teléfono móvil. Cómo encararlo y qué herramientas tenemos disponibles?

Cuando hablamos de IoT, no hablamos de una marca o un producto determinado, sino de un concepto. Por lo tanto, la oferta que tenemos es muy amplia y varía desde soluciones muy simples a soluciones muy complejas.

Lo primero que deberemos evaluar es, donde estará ubicado nuestro IoT y qué función cumplirá. Por ejemplo, no es lo mismo que nuestro proyecto esté en nuestra casa, a que esté en una fábrica, ya que en esta última podría estar sometido a ruido electromagnético, gases corrosivos, etc, o bien que esté a la intemperie, a merced del sol, la lluvia, el viento y el polvo o incluso podríamos pensar en instalarlo dentro de un organismo vivo.

El segundo aspecto a evaluar es cómo le daremos energía a nuestro dispositivo. Quizás podremos conectarlo a nuestra red eléctrica, o deberá alimentarse de un panel solar o por energía inalámbrica (este último es usado para implantes en seres vivos).

El tercer punto a evaluar consiste en qué tareas debe cumplir y qué tan críticas son dichas tareas; nuevamente no es lo mismo un dispositivo que sólo prenda una luz a que se trate de un marcapasos.

El cuarto punto será el tamaño del dispositivo, es quizás que tenemos mucho espacio donde instalarlo o debemos cuidar sus dimensiones?

Por último, hay que pensar cómo queremos que el dispositivo se comporte y comparta información: es un dispositivo autónomo, trabaja bajo una red local o  lo hace contra un servicio en internet? Es importante destacar el hecho de que para que sea IoT (INTERNET de las cosas), por definición, debe poder ser visto desde algún otro punto conectado a la red mundial, ya que de no hacerlo no sería IoT, aunque el hardware usado sea el mismo que el usado en un IoT.

Con estos puntos básicos a evaluar podemos empezar a enumerar los distintos tipos de hardware que tenemos:

Empecemos con las ESP

Estas son placas programables tipo micro controlador, con chipset de la empresa Espressif Systems, al estilo Arduino, que pueden además correr tanto lenguaje compilado como interpretado estilo Python o Lua.

Pros:

Pequeño tamaño
Bajo consumo
Gran oferta de tamaños y velocidad de cómputo
Incluyen de base WiFi
Gran variedad de espacio en memoria disponible para nuestro código.
Bajo costo

Contras:

Son susceptibles al ruido electromagnético
Tiene limitado número de salidas análogas

Arduinos

Son quizás las placas más conocidas tipo micro controlador y con una enorme cantidad de variantes por lo cual es complicado de definir una línea de comparación directa y debiéramos enfocarnos sólo en las versiones Arduino Uno WiFi o la Nano IoT, pero debido a a que podemos agregarles shields de comunicación a las versiones base, las vamos a incluir.

Pros:

Bajo consumo
Gran cantidad de pines análogos y digitales
Enorme oferta de modelos y tamaños
Bajo costo

Contras:

Son susceptibles al ruido electromagnético
No todas traen conectividad de base
Espacio disponible generalmente limitado
No suelen soportar lenguaje interpretado
Gran tamaño en comparación a otras soluciones.

Arduino Industrial

Debido al éxito de las Arduinos y a la tesitura de algunos desarrolladores de usar este tipo de solución en fábricas a pesar del riesgo que conlleva poner un dispositivo de maquetas en producción real, es que empezaron a aparecer las versiones industriales, las cuales son arduinos más eficientes, con conectividad y tolerantes al ruido.

Pros:

Gran cantidad de pines análogos y digitales
Buena tolerancia al ruido electromagnético
Incluye WiFi de base
Buen tamaño no es el más chico pero tampoco es enorme.

Contras:

Costo elevado en relación a otras placas
Poco espacio para nuestros proyectos
Baja velocidad de reloj

Placas basadas en CPU

Por motivo de no hacer muy extensa esta nota pasaré por alto todas las placas de desarrollo para IoT basadas en micro controlador y pasaré a las basadas en CPU.

NVidia Jetson
Orange PI
Banana Pi
LattePanda
Odroid
Intel PC Stick

Una placa IoT basada en CPU puede ser básicamente cualquier computadora que tenga línea de entrada y salida para propósitos generales. Las más conocidas son las RaspBerry PI, pero existen una enorme cantidad como:

Entre cientos de placas denominadas Single Board Computer.

Este tipo de soluciones corren sistemas operativos como GNU/Linux, Android o Windows y por tanto pueden correr lenguajes tanto compilados como interpretados, son multitarea, y básicamente las podremos poner a cumplir cualquier tarea que se nos ocurra así sea controlar una luz o cualquier función de una PC de escritorio común.

Pros:

Gran cantidad de pines análogos y digitales
Buena tolerancia al ruido electromagnético
Incluye WiFi de base y ethernet
Tienen salida de vídeo
Buena relación precio beneficio
Tienen USB
Gran capacidad de almacenamiento (depende de la SD que instalemos)
Gran potencia de cómputo

Contras:

Alto consumo eléctrico
Poco tolerante a las temperaturas altas

Las Single Board Computer son generalmente usadas como Broker en instalaciones IoT (algo así como un concentrador) pero gracias a desarrollos como Node-Red pueden ser estupendos actuadores o sensores.

Ya conocemos qué ofertas tenemos en el mercado, sus pros y sus contras así que empecemos a evaluar qué usar y como.

Un dispositivo IoT puede estar relacionado con internet de varias formas, dependiendo de qué protocolos de comunicación usemos y qué arquitectura tenga nuestra red de dispositivos.

Dentro de lo más básico, podemos encontrar a un dispositivo autónomo, no depende de nadie, por ello le codificaremos una interfaz web que servirá para gestionarlo de forma remota desde un navegador. Esta arquitectura denominada Stand Alone se vincula con internet así como lo haría cualquier servidor web. En general es muy susceptible a ataques tipo denegación de servicio pero con algunos resguardos es totalmente viable.

Un poco más arriba encontramos la Arquitectura Cliente-Servidor, un dispositivo cliente que haga de sensor obtiene información y la envía a un servidor, este procesará la tarea y envía la acción a realizar a otro cliente que hará de actuador.

Para que los dispositivos se entiendan entre sí se crearon diversos protocolos de comunicación en donde predominan el HTTP (Hypertext Transfer Protocol) y el MQTT (Message Queue Telemetry Transport), también conocido como MQ Telemetry Transport, sin ser estos los únicos ya que existen otros como ser: AMQP (Advanced Message Queuing Protocol) o STOMP (Simple/Streaming Text Oriented Messaging Protocol).

Dentro de la arquitectura Cliente-Servidor podemos tener a nuestro Servidor o Broker embebido en nuestra red local con vista a internet para ser llamado de forma directa o bien podemos tenerlo en un sitio remoto como ser servicio en nube. En el primer caso nuestro sensores y actuadores se conectarán de forma local a nuestro Servidor o Broker por lo cual no dependeremos de terceros para que toda nuestra red de dispositivos funcionen, o sea somos independientes de la conexión a Internet y a servidores de terceros, esto nos da una robusta maniobra local pero con algunas dificultades a la hora de comandar centralizadamente de forma remota. 

En caso que nuestro Servidor o Broker se encuentre en nube, nuestros sensores y actuadores deberán enviar y recibir la información fuera de nuestra red local, esto nos permitirá una interoperabilidad extraordinaria entre dispositivos ubicados en distintos recintos pero somos muy dependientes de terceros y a fallas que podrían frenar completamente las acciones de nuestros dispositivos.

Para este punto ya sabemos qué dispositivos existen y cómo los conectaremos por lo cual estamos en condiciones de evaluar nuestro proyecto el cual consistía en prender o apagar una luz, pero…  ¿dónde está esa luz y qué función cumple? Porque no es lo mismo prender y apagar la luz de un faro que nuestro velador o las luces de un campo o una luz de alerta en una fábrica.

Si vamos a prender la luz de nuestra mesa de noche quizás lo más simple es una topologia Stand Alone con una ESP01 ya que es independiente de internet, tiene bajo consumo y su actuación no es crítica.

Si vamos a manejar las luces de nuestra casa podemos optar por usar el protocolo MQTT a través de un broker local como ser Eclipse Mosquitto instalado en una RaspBerry PI con actuadores y sensores basados en ESP12, en una topología cliente-servidor local algo muy conocido en soluciones comerciales como la Apple Home Kit.

Si buscamos administrar las luces de un galpón a distancia, podemos usar soluciones en nube como las ofrecidas por Blynk que no requiere que instalemos un broker local y una ESP9 o Arduino Uno WiFi como actuador o sensor.

Si la luz es una baliza en una fábrica optaremos por una topología Cliente-Servidor local con una placa Arduino Industrial.

Y por último si es un faro marítimo o un semáforo de ciudad, quizás la mejor opción sea una RaspBerry PI corriendo Node Red ya que podrá tomar muchas acciones de forma autónoma pero sin dejar de lado la posibilidad de ser revisada o comandada de forma remota.

El mundo de IoT es muy vasto, y lo acá escrito solo es un punto de partida.

https://mosquitto.org

https://blynk.io

https://nodered.org

https://www.espressif.com

https://www.raspberrypi.org

https://www.arduino.cc

Por Fernando Maniglia
Gerente de Seaman. SRL

Fernando Maniglia - Neurona BA
Fernando Maniglia