Este artículo se basa en otro artículo que Ubidots contribuyó a la Edición de Septiembre/Octubre de 2015 de la revista Microsolutions de Microchip.
El Internet de las Cosas (IoT) no se trata solo de millones de cosas hablando con nosotros; también se trata—más importante—de que nosotros podamos responderles. Tomemos como ejemplo las aplicaciones de análisis minorista. Supongamos que un minorista tiene un sensor que cuenta cuántas personas entran y salen de la tienda. Estos datos se informan a la nube, donde una bonita interfaz web ayuda a la tienda a analizar el comportamiento de los compradores en tiempo real, comparando el rendimiento de la tienda entre múltiples tiendas, o viendo cómo cambian las tasas de visitantes a clientes a lo largo del tiempo, especialmente al lanzar una campaña de marketing.
Esta solución es, de hecho, un nicho de IoT en crecimiento con varios proveedores que están ayudando a miles de minoristas a optimizar su rendimiento de ventas (de hecho, una vez publicamos un tutorial sobre cómo construir un Contador de Personas usando un Raspberry Pi y un sensor PIR).
Basado en estas métricas, imagina las posibilidades si el sistema pudiera controlar automáticamente dispositivos dentro de la tienda. Podría mostrar publicidad contextual basada en el número de personas que pasan frente a él, enviar códigos promocionales a los teléfonos de los compradores dependiendo de su género y edad, o tal vez incluso jugar con las luces de la tienda para establecer una ambientación específica. Poder controlar dispositivos sin duda enriquecería la experiencia de IoT en el comercio minorista y en casi cualquier otro mercado que aún no ha sido impactado por el IoT. Tomar acción basada en ese bucle de retroalimentación permitirá que el IoT realice su máximo potencial.
Comunicación Bidireccional para el IoT
Desde una perspectiva técnica, la comunicación de la nube al dispositivo ha resultado ser más compleja que la comunicación tradicional del dispositivo a la nube. ¿Por qué es eso? El Internet fue diseñado originalmente en un modelo cliente-servidor, donde el cliente siempre era el iniciador de la solicitud. Hasta ahora, esto ha permitido que los dispositivos inicien la comunicación cada vez que necesitan enviar datos a la nube. Pero, ¿qué sucede si el servidor necesita enviar datos a un cliente sin que el cliente haga primero una solicitud? Los desarrolladores web han ideado algunas técnicas para superar este desafío. Aquí hay tres opciones que consideramos más “portátiles” para el mundo embebido.
La forma más básica de resolver este problema de comunicación se llama polling corto—un método donde el cliente pregunta periódicamente al servidor si hay nuevos datos disponibles para él. Esta es la solución más simple de codificar, aunque no se recomienda si necesitas notificar a un dispositivo en tiempo real.
La siguiente opción es el polling largo. En este caso, el cliente realiza la solicitud y el servidor no responderá hasta que tenga algo que enviar. Esto permite notificaciones push en tiempo real de la nube a los dispositivos, aunque requiere que el dispositivo mantenga la conexión abierta el tiempo que necesite para escuchar al servidor. Usar esta técnica consume más energía y también corre el riesgo de perder la conexión. Considera el caso donde un dispositivo controla de forma remota la puerta de un camión. Si se ha realizado una solicitud de polling largo, y luego el camión entra en un túnel, la conexión móvil se caerá. El dispositivo necesitará lógica adicional para cerrar la conexión colgada y abrir una nueva.
Una tercera opción es usar protocolos más nuevos como CoAp o MQTT, por ejemplo, que fueron diseñados para proporcionar baja latencia, tamaños de paquetes pequeños y comunicación estable sobre redes débiles. Estos protocolos más nuevos proporcionan un canal de comunicación bidireccional, que a su vez soporta notificaciones push. Esto los convierte en buenas opciones para proyectos de IoT que requieren la capacidad de controlar dispositivos conectados en tiempo real. La única desventaja podría ser la falta de bibliotecas de firmware y ejemplos para dispositivos embebidos, que son significativamente más abundantes para conexiones basadas en HTTP.
Elegir el protocolo adecuado dependerá de tu aplicación y de cuán a menudo necesitarás comunicarte con un dispositivo. En el proyecto de muestra descrito a continuación, se eligió el polling corto porque los datos necesitan actualizarse solo cada minuto y porque manejar la matriz de LED mientras se deja un socket abierto requeriría más potencia de procesamiento.
Práctica Práctica
En este ejemplo, queríamos explorar cómo usar el método de polling corto para enviar datos desde la nube de Ubidots a una placa de desarrollo chipKIT™ Uno32™ usando un chipKIT Wi-Fi® Shield. Nuestro ejemplo asume que hay un contador de personas enviando datos a Ubidots, después de lo cual nuestro dispositivo chipKIT leerá el último valor del contador y lo mostrará en una matriz de LED. Ten en cuenta que la memoria y la potencia de procesamiento de la placa chipKIT nos permitieron controlar las matrices de LED mientras podíamos consultar la nube de Ubidots, como se muestra a continuación:
No podríamos haber logrado esta cantidad de procesamiento con otras placas similares a Arduino®. Lee nuestro artículo “Enviando Datos a una Placa chipKIT con una Matriz de LED” para más información sobre cómo se construyó este proyecto.
Soporte para Tu Proyecto de Sensores
Ubidots es una plataforma de desarrollo de aplicaciones basada en la nube que no solo se adhiere al estándar web (HTTP), sino que está específicamente diseñada para el IoT, proporcionando un rico conjunto de funciones API que los desarrolladores pueden entender.
Además, trabajamos en estrecha colaboración con nuestros usuarios para implementar interfaces API específicas para el cliente que se adapten a sus necesidades, desde puntos finales TCP/UDP tradicionales que hablan datos binarios hasta protocolos más avanzados como MQTT o CoAP.
Al desarrollar proyectos para el IoT, los ingenieros embebidos esperan un backend robusto para almacenar datos de sensores, la capacidad de realizar tareas como cálculos matemáticos u operaciones estadísticas sobre esos datos, la capacidad de activar alertas o web-hooks basados en lecturas de sensores y, por supuesto, la capacidad de crear interfaces amigables para sus clientes finales. Todos estos son servicios que Ubidots proporciona para ayudarte a capturar, almacenar y dar sentido a tu proyecto de sensores.
Este artículo fue publicado originalmente en el blog de Ubidots el 14 de octubre de 2015.