¿Conoces esas famosas cenas familiares de Navidad?
Las que parecen sacadas de una película, llenas de parientes que quizá hayas visto solo una vez en todo el año, tal vez por casualidad en un centro comercial. Tíos y tías que se sientan a tu lado y tratan de entender a qué te dedicas con los «ordenadores» (y que inevitablemente te piden que les arregles algo en su teléfono o portátil también).
Sí, lo sé, es un cliché de los 2000 y tal vez no signifique mucho para las generaciones más jóvenes, pero para quienes han pasado por eso, bueno, es una mezcla emocional inconfundible. Estamos en 2024, es cierto, y parece que ahora todo el mundo es «experto en ordenadores» (¡incluso ese tío o tía!), pero todavía hay un momento en que ese viejo sentimiento de «¿por qué yo?» reaparece. Es cuando tengo que explicar qué significa trabajar en el desarrollo de IoT.
El acrónimo ya es familiar: el famoso Internet de las cosas.
Pero a menudo, la palabra mágica smart se añade al nombre de un dispositivo, transformando un objeto pasivo y silencioso en algo vivo y capaz de comunicarse. Es como darle un alma digital a los objetos que nos rodean.
Así que, con la Navidad a la vuelta de la esquina y todos los familiares preparándose para preguntarme de nuevo qué es lo que realmente hago con los «ordenadores», pensé en practicar un poco y compartir mi experiencia con la comunidad de Codemotion, explicando qué significa desarrollar para IoT. O al menos intentarlo…
Algunos ejemplos
Quizá la forma más sencilla de introducir el tema es definir mejor su alcance. El IoT puede parecer un campo de nicho, y de alguna manera lo es, pero tiene facetas infinitas. Es un sistema vasto, que recuerda a la “long tail” en el mundo del SEO: empiezas con una simple maceta y terminas con una notificación en tu teléfono que dice: “¡Oye, acuérdate de regarme!”
El proceso cubre todo tipo de objetos: cualquier cosa puede volverse “inteligente” y empezar a proporcionar datos de todo tipo. Un reloj, además de dar la hora, podría monitorear nuestros niveles de oxígeno, la temperatura corporal y la cantidad de pasos que damos cada día. Un frigorífico podría informarnos sobre la temperatura interna, el estado de los alimentos, e incluso recordarnos cuándo es hora de tirar la leche.
Un sensor al lado de un racimo de uvas podría recopilar datos detallados para producir el Prosecco perfecto, mientras que una bicicleta de un servicio de ride-sharing podría tener tanta telemetría que haría envidiar a un equipo de Fórmula 1—¡quizás incluso con comunicación bidireccional!
Como decía, existen infinitos dominios y perspectivas en las que un objeto puede volverse inteligente. En este mar de posibilidades, mi trabajo es guiarte por lo que significa desarrollar un dispositivo IoT, pasando por todas las fases: desde el prototipo hasta la integración, y finalmente, la gestión de los datos que, al final, son el verdadero alma de cada objeto conectado.
Del prototipo a la producción
La creación de un dispositivo IoT, o «dispositivo inteligente,» comienza destilando los requisitos y definiendo los datos finales que deberá proporcionar. Este análisis preliminar ayuda a identificar, a grandes rasgos, los sensores necesarios, los puertos físicos requeridos, y si el dispositivo funcionará con una toma de corriente o una batería.
Lista de materiales (BOM)
Esta fase inicial nos permite definir la Lista de Materiales (BOM), que es el listado de componentes necesarios para crear el producto final. Elegir los componentes adecuados es crucial: hay que considerar la disponibilidad en el mercado, la compatibilidad, las especificaciones técnicas y el coste. La gestión eficiente del BOM es esencial para optimizar los costes de producción y asegurar que el dispositivo se pueda fabricar a gran escala sin problemas. Por ejemplo, un microcontrolador con múltiples opciones de conectividad integrada (Wi-Fi, Bluetooth, etc.) puede simplificar el desarrollo, pero aumentar el coste por unidad.
El prototipo
A menudo, una primera iteración implica crear un prototipo de hardware para validar físicamente el proyecto e identificar posibles límites o problemas antes de pasar a la optimización y escalado. Plataformas de prototipado rápido como Arduino, ESP32 o Raspberry Pi se usan comúnmente para reducir el tiempo y costes iniciales, permitiéndonos probar y validar conceptos antes de pasar a soluciones más específicas y personalizadas.
Otro aspecto crítico es el diseño de la carcasa o envoltorio del dispositivo. Este debe ser no solo estéticamente agradable, sino también funcional y resistente a las condiciones de uso esperadas. Por ejemplo, un dispositivo destinado a uso submarino requerirá impermeabilización certificada (por ejemplo, estándar IP68), mientras que uno para deportes de invierno debe soportar temperaturas extremas y golpes. En esta etapa, entran en juego estudios de diseño ergonómico e industrial, considerando incluso la interfaz de usuario del dispositivo (pantalla, botones, retroalimentación visual o auditiva, etc.).
Estudios de coste
En paralelo, realizamos estudios de costes y análisis de mercado. Es crucial estimar con precisión los costes de producción y desarrollo para establecer un precio final y evaluar la viabilidad económica del producto. Esta fase a menudo requiere evaluar los volúmenes de producción esperados y las economías de escala. El análisis también debe considerar diferentes escenarios de producción, incluidos los costes de certificación, especialmente para productos destinados a industrias reguladas como los sectores médico o automotriz.
Arquitectura
En cuanto a los métodos de comunicación, los dispositivos IoT pueden utilizar diferentes tecnologías, cada una con ventajas y limitaciones específicas:
- USB: para conexiones por cable y suministro de energía;
- Bluetooth Low Energy (BLE): ideal para dispositivos de bajo consumo y comunicación de corto alcance;
- Wi-Fi: para conexiones de alta velocidad y cobertura local;
- LoRaWAN: para dispositivos que requieren largo alcance y bajo consumo, como sensores en entornos agrícolas o remotos;
- Infrarrojos (IR): en algunos contextos, para transmitir información a lectores ópticos dedicados (por ejemplo, medidores de energía).
La elección de la tecnología depende del caso de uso, el tipo de datos que el dispositivo necesita transmitir y el método de alimentación. Diseñar correctamente la arquitectura de comunicación es esencial para garantizar la fiabilidad del dispositivo y su capacidad para integrarse en una red IoT existente. Además, es importante considerar la posibilidad de actualizaciones OTA (Over-The-Air) para garantizar la longevidad y el mantenimiento, permitiendo actualizaciones de software y corrección de errores de forma remota.
Comunicación y datos
Una vez que mis compañeros han completado el prototipo y el hardware ha sido probado, es mi turno: desarrollo de aplicaciones móviles. Para decirlo de manera simple (¡y tal vez explicárselo a mi tío!), aquí es donde conectamos el mundo físico con el digital, traduciendo los datos en bruto del dispositivo en una experiencia de usuario tangible e intuitiva.
Después de validar el primer prototipo (aunque el hardware aún no esté completamente disponible en esta etapa), comenzamos a verificar que lo discutido durante la fase de planificación se esté siguiendo. Sin embargo, la verificación no es un proceso final; sucede de manera continua, en cada sprint, con demostraciones periódicas del equipo de firmware. Este es un momento crucial: es el equivalente a un “shake down” en la Fórmula 1, donde probamos el sistema completo para asegurarnos de que todo funcione correctamente e identificar posibles problemas antes de que se vuelvan críticos.
Desarrollo móvil
Nuestro rol como desarrolladores móviles para dispositivos inteligentes es servir de puente entre el mundo físico (el dispositivo y sus sensores) y la experiencia digital (la aplicación). Para lograrlo, colaboramos con una amplia gama de profesionales: ingenieros de firmware y sistemas embebidos, especialistas en UI/UX, ingenieros de backend, expertos en IA/ML, ingenieros móviles y equipos de QA. Este equipo multidisciplinario trabaja en sinergia para crear una experiencia coherente e integrada que conecte perfectamente el mundo real con el digital.
A menudo, la interacción entre la app y el dispositivo no se realiza a través de una API RESTful clásica, sino mediante protocolos de comunicación dedicados que establecen una conexión directa y uno a uno entre el smartphone y el dispositivo periférico. La sinergia del equipo es esencial, y el uso de metodologías como fail-fast (FF) nos permite identificar y resolver rápidamente los puntos críticos de manera eficiente. Por ejemplo, si notamos que los datos no llegan con la granularidad requerida, puede ser necesario realizar modificaciones en el hardware, lo que impactaría en los plazos de producción y los costes del BOM, requiriendo una nueva planificación.
Nuestra tarea como equipo móvil es conectar el QUÉ (los datos proporcionados por firmware, backend o calculados mediante IA/ML) con el CÓMO (la experiencia de usuario diseñada por los equipos de UX/UI). Aunque algunos aspectos del desarrollo pueden parecerse a los de una app tradicional que se conecta a un backend, hay aspectos únicos y desafiantes. Por ejemplo, la activación (onboarding) de un dispositivo IoT va mucho más allá del clásico carrusel informativo; requiere una interacción intensa por parte del usuario mediante un proceso llamado provisioning.
Provisionamiento
Durante el proceso de provisionamiento, el dispositivo inteligente pasa a formar parte del ecosistema del usuario. Para esta integración se utilizan varios modos operativos, entre los cuales se incluyen:
- Selección de un dispositivo BLE (Bluetooth Low Energy) desde una lista detectada por el smartphone, donde el usuario elige el dispositivo correcto;
- Conexión temporal a un Punto de Acceso Wi-Fi (AP) para transmitir las credenciales de la red y configurar el dispositivo;
- Uso de un golpe NFC para iniciar el proceso de emparejamiento.
En algunos casos, estos métodos se pueden combinar para asegurar una conexión segura y estable. Una vez que el provisionamiento está completo, el dispositivo está listo para transmitir sus datos. Si la conexión es a través de Wi-Fi, los datos a menudo se envían a un backend que los recopila, analiza y los pone a disposición a través de la aplicación. Por el contrario, si la comunicación ocurre mediante BLE o NFC, gran parte del trabajo de gestión de datos lo realiza el smartphone, actuando como un puente directo entre el dispositivo y la app.
Esta fase es particularmente delicada porque la sincronización y actualización de datos, especialmente con protocolos de bajo consumo como BLE, requiere especial atención a la velocidad de transmisión (MTU) y la cantidad de datos a transferir. Por eso, a menudo vemos pantallas de «sincronización» en las aplicaciones, cuya duración depende de estos factores.
No hay una regla fija sobre cómo gestionar los datos: en algunos casos, los datos se guardan directamente en los servicios nativos del smartphone, como HealthKit para iOS o servicios equivalentes en Android. En otros casos, se necesita un backend para procesar y analizar los datos, especialmente cuando la cantidad de datos recopilados es significativa o requiere procesamiento adicional.
Actualizaciones OTA (Over-The-Air)
Un aspecto crucial del desarrollo de IoT es la gestión de las actualizaciones OTA, esenciales para corregir errores, mejorar funcionalidades y asegurar la longevidad del producto. Sin embargo, también representa una de las fases más críticas, ya que si algo sale mal, existe el riesgo de “brickear” el dispositivo, dejándolo inutilizable. Por ello, es fundamental diseñar una infraestructura segura y confiable para distribuir actualizaciones, minimizando los riesgos asociados.
Para reducir el riesgo de bricking, los dispositivos deben contar con mecanismos de reversión que permitan volver al firmware anterior en caso de error durante una actualización. Además, es crucial implementar un sistema de verificación de integridad del firmware, utilizando certificados y claves criptográficas, por ejemplo, para asegurar que solo se pueda instalar firmware autorizado y seguro.
La coordinación con el equipo de QA es vital en esta etapa, ya que un enfoque fail-fast nos permite identificar rápidamente problemas durante la distribución de las actualizaciones e intervenir antes de que los dispositivos lleguen a los usuarios. Las técnicas de prueba incluyen simular actualizaciones en un gran número de dispositivos, monitorear errores y proporcionar retroalimentación inmediata en caso de fallos.
Resumen
El desarrollo móvil para dispositivos IoT es un desafío multidisciplinario que combina hardware, software, UI, UX y QA en un ecosistema complejo.
Desde la configuración inicial y el provisioning hasta la gestión de las actualizaciones OTA, cada paso requiere atención al detalle, sincronización del equipo y un profundo entendimiento de las tecnologías involucradas.
Al final, ver cómo un dispositivo cobra vida y funciona como se espera, integrándose sin problemas en la vida diaria del usuario, es la recompensa de un trabajo bien hecho.