Prefacio

Este trabajo se ha traducido utilizando IA. Agradecemos tus opiniones y comentarios: translation-feedback@oreilly.com

El Internet de las Cosas (IoT) es un complejo sistema de sistemas interconectados compuesto por diferentes dispositivos de hardware, aplicaciones de software, estándares de datos, paradigmas de comunicaciones y servicios en la nube. Saber por dónde empezar con tu propio proyecto de IoT puede ser un poco desalentador. Programar el Internet de las Cosas está diseñado para iniciarte en tu viaje de desarrollo del IoT y te muestra a ti, el desarrollador, cómo hacer que funcione el IoT.

Si decides seguir conmigo a lo largo de este libro, aprenderás a escribir, probar e implementar el software necesario para crear tu propia capacidad básica de IoT de extremo a extremo.

¿A quién va dirigido este libro?

Programar el Internet de las Cosas es, en esencia, un libro sobre la creación de soluciones IoT, desde el dispositivo hasta la nube.

Este libro se escribió principalmente como guía didáctica para mi curso de Dispositivos Conectados en la Universidad Northeastern, y para cualquier estudiante interesado en aprender a programar soluciones IoT. Aunque estructuralmente está enfocado a ayudar a estudiantes y profesionales, también puede ser útil para quienes estén interesados en aprender más sobre los conceptos y principios de IoT.

A lo largo del libro, encontrarás directrices paso a paso para crear tu propia capacidad de IoT de extremo a extremo, con ejercicios dentro de cada capítulo que se basan unos en otros para ayudarte a afianzar tus conocimientos sobre el IoT. Sin embargo, si te interesan más los conceptos, ¡no pasa nada! Si lo prefieres, puedes aprender el qué y el por qué, pero avanzar rápidamente por el cómo y saltarte los ejercicios.

Como educador y consultor, he estructurado el contenido de modo que pueda utilizarse como hoja de ruta para impartir cursos introductorios de programación de IoT, con la intención de avanzar por los conceptos clave y construir gradualmente una base de conocimientos en esta importante área. Tanto si eres un instructor de nivel universitario como un estudiante que busca desarrollar sus habilidades en el IoT, espero que este libro te resulte útil para construir tu curso y tus conocimientos.

Por último, dejo la mayor parte de las instrucciones y detalles específicos a las especificaciones existentes y a las API de código abierto. Aunque algunas partes del libro pueden servir como referencia de alto nivel, la mayor parte del contenido se centra en ayudarte a aprovechar esa información para construir la solución que necesitas. Somos afortunados de tener acceso a especificaciones de protocolo bien escritas y a una vibrante comunidad de código abierto, y estoy agradecido a quienes han defendido estos esfuerzos.

Al programador

Si te estás embarcando en tu propio viaje de aprendizaje de IoT como profesional, supongo que lo que más te interesa es ampliar tu conjunto de habilidades. Tal vez hayas sido testigo del crecimiento de las oportunidades de IoT y quieras formar parte de esta importante evolución tecnológica. A lo largo de los años, he comprobado que el enfoque paso a paso, "construir desde cero", para implantar soluciones IoT integradas y abiertas es de lo más útil para comprender las complejidades de este ámbito, por lo que sigo este modelo a lo largo del libro.

Los ejemplos de programación que encontrarás aquí están construidos a partir de mi propio viaje de aprendizaje sobre el IoT, y muchos han evolucionado a partir de tareas de módulos de laboratorio en el curso de postgrado sobre Dispositivos Conectados que imparto como parte del programa de Sistemas Físicos Cibernéticos de la Universidad Northeastern.

Cada capítulo y cada conjunto de ejercicios se basan en el anterior, así que si acabas de empezar con el IoT y no estás familiarizado con el modo en que un sistema IoT integral se integra a través del software, te recomiendo que sigas cada uno de ellos tal cual, trabajando en cada ejercicio en el orden indicado. Es mejor considerar las personalizaciones de las aplicaciones sólo después de haber dominado cada capítulo.

Si eres un programador experimentado y utilizas este libro como guía de referencia, puede que te resulte más fácil saltarte algunos de los procedimientos básicos de configuración del entorno de desarrollo y simplemente hojear algunos de los ejercicios de programación; sin embargo, te recomiendo que trabajes los requisitos especificados en cada uno de ellos, incluso si decides utilizar tu propio diseño.

Al Instructor

Los contenidos que sustentan este libro se han utilizado con éxito en mi curso de postgrado sobre Dispositivos Conectados durante los últimos años. Este libro es la formalización de esas notas de clase, presentaciones, ejemplos y ejercicios de laboratorio, y está estructurado de forma muy similar a mi curso.

Originalmente diseñé la clase como una introducción al IoT, pero con las aportaciones de los estudiantes y las sugerencias de mis ayudantes, se transformó rápidamente en un curso de desarrollo de software orientado a proyectos. Ahora es una de las últimas clases obligatorias para los estudiantes que terminan sus másteres en el programa de Sistemas Cibernéticos Físicos. El objetivo del curso es establecer una sólida base de conocimientos sobre IoT para ayudar a los estudiantes a pasar del mundo académico a la industria, aportando habilidades y conocimientos fundamentales sobre IoT a sus respectivas organizaciones.

Este libro está estructurado para que pueda utilizarse como guía de referencia o incluso como componente principal de un plan de estudios completo, para ayudarte con tu propio curso relacionado con IoT. El contenido se centra en la construcción de una solución IoT integral, abierta e integrada, desde el dispositivo hasta la nube, utilizando un enfoque didáctico de "aprende mientras construyes". Como cada capítulo se basa en el anterior, puedes utilizar este libro para guiar a tus alumnos en la construcción de su propia plataforma desde cero.

Puedes mantenerte al día con los ejercicios en línea revisando la Programación del tablero Kanban IoT.1 En el sitio web del libro encontrarás otros contenidos útiles para enseñar y explicar algunos de los conceptos de este libro.

Al Director o Ejecutivo de Tecnología

El contenido de este libro debería ayudarte a comprender mejor los retos de integración inherentes a cualquier proyecto de IoT y debería proporcionarte una visión de los conjuntos de habilidades que tu(s) equipo(s) tecnológico(s) necesitará(n) para tener éxito en tus iniciativas de IoT.

Si formas parte de este grupo, supongo que lo que más te preocupa es comprender esta área tecnológica en su conjunto: sus retos de integración, los requisitos y necesidades de configuración de los equipos de desarrollo, los conjuntos de habilidades de los equipos, las preocupaciones de los usuarios empresariales y las partes interesadas sobre el IoT, y los retos de gestión del cambio que puedes encontrarte al embarcarte en el viaje del IoT de tu organización.

Para los directivos y gestores de tecnología, no es necesario que pongas en práctica los ejercicios tú mismo, pero será útil que leas todo el libro para que comprendas los retos con los que probablemente se encontrará tu equipo.

A las partes interesadas de la empresa que deseen sobre todo comprender lo que implica el IoT, les recomiendo que lean -como mínimo- la sección de visión general al principio de cada capítulo y que se centren en el capítulo final, que trata un puñado de casos prácticos, escenarios y sugerencias de implantación.

¿Qué necesito saber?

Aunque los ejercicios de este libro presuponen que tienes cierta experiencia escribiendo aplicaciones de software en Python y Java, la mayoría no requieren conocimientos sofisticados de programación ni una formación formal en informática. Sin embargo, la mayoría de los ejercicios sí requieren que te sientas cómodo desarrollando código en un entorno de desarrollo integrado (IDE); leyendo, escribiendo y ejecutando pruebas unitarias; ejecutando aplicaciones desde la línea de comandos; y configurando sistemas basados en Linux mediante una línea de comandos basada en shell.

Si pretendes completar los ejercicios opcionales que aparecen en el tablero Kanban o al final de algunos de los capítulos, tendrás que sentirte cómodo creando aplicaciones Python y Java desde cero con poca o ninguna orientación.

Todos los ejercicios van precedidos de un diagrama de diseño del estado objetivo para la tarea específica en cuestión, que detalla cómo deben funcionar los nuevos componentes lógicos que construyas con los componentes existentes que ya hayas desarrollado. La mayoría son simples diagramas de bloques que muestran las relaciones básicas entre los componentes de la aplicación.

Nota

Muchos de los diagramas no están diseñados para encajar en una metodología de documentación específica y sólo muestran una visión de alto nivel de los componentes y sus interacciones básicas. Algunos diagramas requieren una especificidad adicional, y en esos casos incluyo uno o varios diagramas de clases basados en el Lenguaje Unificado de Modelado (UML) para aclarar la intención del diseño.2

¿Cómo está organizado este libro?

Este libro te llevará a construir una solución IoT de extremo a extremo, de pila completa e integrada, utilizando varias bibliotecas de código abierto y componentes de software que construirás paso a paso. Cada componente formará parte de un sistema más amplio, y verás cómo los componentes se interconectan y se mapean en una arquitectura de estado final a medida que trabajes en los ejercicios de cada capítulo.

En cada capítulo, ofreceré una breve introducción al tema de ese capítulo junto con material de referencia útil, que incluirá algunas definiciones pertinentes. También resumiré por qué es importante el tema y qué puedes esperar aprender, y a continuación haré ejercicios de programación relacionados con el tema. Muchos capítulos terminan con ejercicios adicionales que también puedes poner en práctica, para afianzar aún más tus conocimientos sobre el tema del capítulo.

He agrupado capítulos similares y he utilizado este esquema para establecer las cuatro partes del libro: Parte I, "Primeros pasos"; Parte II, "Conexión con el mundo físico"; Parte III, "Conexión con otras cosas"; y Parte IV, "Conexión con la nube". Hablaré aquí de cada parte y capítulo con un poco más de detalle, y luego proporcionaré algunos antecedentes sobre la propia IO.

Cada parte o capítulo comienza con un haiku que intenta captar la esencia de lo que aprenderás y algunos de los retos que probablemente encontrarás. ¿Cómo surgió esto? En mis primeros días como desarrollador de software, uno de los equipos con los que trabajaba tenía una política: si comprometías código que provocaba la rotura de la compilación nocturna, tenías que escribir un haiku relacionado con el problema y enviarlo por correo electrónico a todos los miembros del equipo. Aunque probablemente no te encuentres con muchas construcciones nocturnas rotas mientras realizas los ejercicios de este libro, ¡no dudes en escribir tus propios haiku mientras cometes errores y aprendes de ellos!

Parte I, "Cómo empezar"

En esta sección, construimos nuestra base inicial para el desarrollo del IoT. Empezarás creando un entorno de desarrollo y pruebas, y terminarás la sección escribiendo dos aplicaciones sencillas para validar que tu entorno funciona correctamente.

  • El Capítulo 1, "Primeros pasos", es el más largo del libro. Sienta las bases de tu solución integral y te ayudará a establecer una base de conocimientos sobre IoT. También te guiará en la configuración de tu estación de trabajo y entorno de desarrollo para que puedas ser productivo lo antes posible. En este capítulo, cubro algunos términos básicos de IoT, creo un planteamiento sencillo del problema, defino conceptos arquitectónicos básicos y establezco un enfoque de diseño inicial al que haré referencia como marco para cada ejercicio posterior.

    Nota

    El IoT consiste en una plétora de dispositivos y sistemas heterogéneos, y hay muchas herramientas y utilidades disponibles para apoyar el desarrollo y la automatización del sistema. En todo el libro utilizo herramientas y utilidades de código abierto. Éstas representan un pequeño subconjunto de lo que está a tu disposición y no deben tomarse como recomendaciones de carta blanca; puedes tener tus propias preferencias. Mis objetivos son simplemente mantener el contenido bien delimitado e informar de un enfoque generalizado de desarrollo y automatización que te ayude a poner en práctica los ejercicios con éxito.

  • El Capítulo 2, "Aplicaciones iniciales de nivel de perímetro", abarca la configuración de tu entorno de desarrollo y tu enfoque para captar los requisitos y, a continuación, pasa a la codificación. Aquí crearás tus dos primeras aplicaciones IoT: una en Python y otra en Java. Son bastante sencillas, pero sientan las bases para los capítulos siguientes. Aunque seas un desarrollador experimentado, es importante que realices los ejercicios que se te proponen para que sigamos trabajando desde la misma base.

Parte II, "Conectarse al mundo físico"

Esta sección cubre una característica fundamental del IoT: la integración con el mundo físico. Aunque los ejercicios se centran en la simulación y la emulación de hardware, los principios que aprenderás -cómo leer los datos de los sensores y activar un actuador (virtualmente)- te serán útiles si decides utilizar hardware real en el futuro.

  • El Capítulo 3, "Simulación de datos", explora las formas en que puedes recoger datos del mundo físico (detección) y desencadenar acciones basadas en esos datos (actuación) utilizando la simulación. Empezarás construyendo un conjunto de simuladores sencillos, que seguirás utilizando en cada ejercicio posterior. Aunque su diseño es muy básico, estos simuladores te ayudarán a comprender mejor los principios de la recogida de datos y su utilización para desencadenar eventos de actuación.

  • El Capítulo 4, "Emulación de datos", amplía la funcionalidad de simulación que desarrollaste en el Capítulo 3 para emular el comportamiento de sensores y actuadores. Este capítulo permanece centrado en el mundo virtual mediante el uso de un emulador de hardware de código abierto que puedes ejecutar en tu estación de trabajo de desarrollo.

  • El Capítulo 5, "Gestión de datos", trata de la telemetría y el formato de los datos, incluyendo las formas de estructurar tus datos para que tanto los humanos como las máquinas puedan almacenarlos, transmitirlos y comprenderlos fácilmente. Esto servirá de base para tu interoperabilidad con otras "cosas".

Parte III, "Conectar con otras cosas"

Aquí es donde la goma se encuentra con el camino. La Parte III se centra en la integración entre dispositivos: para estar verdaderamente integrado, necesitarás una forma de llevar tu telemetría y otra información de un lugar a otro. Conocerás y utilizarás protocolos de capa de aplicación diseñados para ecosistemas IoT. Asumiré que tu capa de red ya está instalada y funcionando, aunque hablaré de algunos protocolos inalámbricos por el camino.

  • Enel Capítulo 6, "Integración MQTT - Visión general y cliente Python", se presentan los protocolos de publicación/suscripción, en concreto el Message Queuing Telemetry Transport (MQTT), que se utiliza habitualmente en aplicaciones IoT. Recorreré un conjunto selecto de detalles de la especificación y explicaré cómo puedes empezar a construir una capa de abstracción sencilla que te permita interactuar fácilmente con bibliotecas comunes de código abierto, empezando por Python.

  • El capítulo 7, "Integración MQTT-Cliente Java", continúa ampliando tus conocimientos sobre MQTT profundizando en una biblioteca de código abierto que te permite conectar tus aplicaciones Java a un servidor MQTT. Utilizarás este protocolo en los ejercicios y pruebas que realizarás al final del capítulo para integrarlo con el código Python que desarrollaste en el Capítulo 6.

  • El capítulo 8, "Implementación del servidor CoAP", se centra en los protocolos de solicitud/respuesta; en concreto, en el Protocolo de Aplicación Restringida (CoAP), también utilizado habitualmente en aplicaciones IoT. La gran diferencia aquí es que empezarás con Java y construirás un servidor CoAP utilizando otra biblioteca de código abierto. También se proporcionan ejercicios opcionales para construir un servidor CoAP en Python.

  • El Capítulo 9, "Integración del cliente CoAP", continúa con CoAP, pero se centra en construir el código cliente que utilizarás para conectarte a tu recién desarrollado servidor Java. Este código cliente, escrito tanto en Python como en Java, te permitirá soportar comunicaciones de dispositivo a dispositivo utilizando CoAP como protocolo.

  • El Capítulo 10, "Integración en el perímetro", se centra en la integración, permitiéndote conectar tus dos aplicaciones entre sí mediante MQTT o CoAP. Incluiré ejercicios para cada protocolo, que te ayudarán a decidir cuál puede ser más relevante para tu solución. Al igual que el Capítulo 9, este capítulo requerirá trabajo de implementación tanto en Python como en Java.

Parte IV, "Conectarse a la Nube"

Por último, en la "cima" de la pila de integración, aprenderás a conectar toda tu infraestructura de dispositivos IoT a la nube utilizando tu aplicación de pasarela como intermediaria entre tu funcionalidad en la nube y todos tus dispositivos.

Esta sección cubre los principios básicos de la conectividad en la nube y toca varios servicios en la nube que pueden almacenar, analizar y gestionar tu entorno IoT. Construirás la misma aplicación sencilla en la nube en cada plataforma.

  • El Capítulo 11, "Integración con varios servicios en la nube", trata los conceptos clave de la conexión de tu solución IoT a la nube y explora varios ejercicios de integración en la nube que puedes poner en práctica utilizando el protocolo MQTT. Como hay muchos libros y tutoriales disponibles para estas plataformas, me limitaré a repasar estas capacidades en lugar de entrar en detalles sobre la construcción de algo específico. Los ejercicios te ayudarán a elegir qué plataforma en la nube te gustaría utilizar en tu propia implementación.

  • El capítulo 12, "Domar el IoT", examina los elementos facilitadores clave de una solución IoT y los mapea en unos cuantos casos de uso IoT sencillos que me han resultado especialmente útiles para preparar mi curso sobre Dispositivos Conectados. Cubriré el planteamiento general del problema, el resultado esperado y el enfoque de diseño teórico de alto nivel.

Mi esperanza es que el enfoque de este libro te permita comprender y crear un sistema IoT integrado, de extremo a extremo.

Algunos antecedentes del IoT

He aquí un breve resumen de cómo la IO ha llegado a este punto.

La informática dio un gran paso adelante con la invención del transistor en la década de 1950, seguida en la década de 1960 por el artículo de Gordon Moore que describía la duplicación de transistores empaquetados en el mismo espacio físico (actualizado posteriormente en la década de 1970).3

Con la informática moderna llegaron las redes modernas y los inicios de Internet, con la invención de la ARPAnet en 1969.4 Esto condujo en los años 70 a nuevas formas de trocear o paquetizar datos utilizando el Protocolo de Control de Red (NCP) y el Protocolo de Control de Transmisión (TCP) a través del Protocolo de Internet (IP) y aprovechando la infraestructura cableada existente. Esto fue útil para la industria, ya que permitió que la automatización industrial eléctrica avanzara por el camino de la gestión centralizada de sistemas distribuidos y conectados. Los sistemas de Control Supervisorio y Adquisición de Datos (SCADA) -antecesores de las tecnologías máquina a máquina (M2M) que condujeron al IoT- surgieron de sus raíces propietarias, y los controladores lógicos programables (PLC) -inventados inicialmente justo antes de ARPAnet- evolucionaron para aprovechar las redes TCP/IP y los estándares de equipos relacionados.5

La década de 1980 introdujo el Protocolo de Datagramas de Usuario (UDP)6 y el nacimiento de lo que muchos de nosotros experimentamos como la primera Internet moderna: la World Wide Web (WWW), inventada a finales de los 80 por Tim Berners-Lee.7

Nota

Este periodo de tiempo también ha sido un importante impulsor de lo que con el tiempo se conocería como el Internet Industrial de las Cosas (IIoT), un subconjunto del IoT y una parte importante de la evolución del IoT.

Seguro que has notado un tema común: a un problema le sigue una innovación tecnológica (a menudo patentada) para abordar el reto, que luego se estandariza o es sustituida por una o más normas, lo que lleva a una amplia adopción y a una mayor innovación.

Esto nos lleva a la era de la IO. En los años 80 y principios de los 90, surgieron los primeros dispositivos conectados, incluida una tostadora conectada a Internet demostrada por John Romkey y Simon Hackett en Interop 1990.8 En 1991, los usuarios del laboratorio informático cercano a la Sala de Troya de la Universidad de Cambridge instalaron una cámara web para monitorizar la cafetera, porque ¿quién quiere hacer un viaje para encontrarse la cafetera vacía?9

Siguieron más dispositivos, por supuesto, y supongo que se construyeron y conectaron aún más como experimentos en laboratorios universitarios, dormitorios, casas, apartamentos y empresas. Mientras tanto, la informática y las redes seguían haciéndose más baratas, potentes y, por supuesto, más pequeñas. Se cree que Kevin Ashton acuñó la expresión "Internet de los objetos " en 1999, cuando hizo una presentación sobre el tema en Proctor & Gamble.10

Avanzamos rápidamente hasta 2005, cuando el Instituto de Diseño de Interacción de Ivrea (Italia) nos proporcionó el económico ordenador de placa única (SBC) Arduino, diseñado para principiantes,11 abriendo la puerta a que más gente construyera sus propios sistemas de detección y automatización. Añade un almacenamiento de fácil acceso y la capacidad de analizar datos a través de servicios accesibles desde cualquier lugar de Internet, y tendrás los cimientos de un ecosistema IoT: es decir, un montón de cosas individualmente únicas que pueden conectarse entre sí para servir a un propósito mayor.

Sin embargo, ver la IO como un montón de cosas que conectan el mundo físico a Internet no hace justicia a la IO. Creo que la esencia de la IO, y un factor clave de su complejidad, es la heterogeneidad: disimilitud y amplia variación entre tipos de dispositivos, características y capacidades, propósitos, enfoques de implementación, protocolos compatibles, seguridad y técnicas de gestión.

La complejidad redefinida

Entonces, ¿qué es exactamente el Internet de las Cosas? Es un complejo conjunto de ecosistemas tecnológicos que conectan el mundo físico a Internet mediante diversos dispositivos informáticos de perímetro y servicios informáticos en la nube.

A efectos de este libro, utilizaremos algunas definiciones ligeramente simplificadas. Dispositivos informáticos de perímetro se refiere a la electrónica integrada, los sistemas informáticos y las aplicaciones de software que interactúan directamente con el mundo físico a través de sensores y actuadores o proporcionan una pasarela, o puente, para que esos dispositivos y aplicaciones se conecten a Internet. Los servicios de computación en nube se refieren a los sistemas informáticos, las aplicaciones de software, el almacenamiento de datos y otros servicios informáticos que viven en uno o más centros de datos y a los que siempre se puede acceder a través de Internet.

En adelante, me referiré a estas dos áreas por su nivel arquitectónicorepresentativo, es decir, Nivel de Nube para los servicios de computación en la nube y Nivel de Borde para los dispositivos de computación en el perímetro. Los niveles arquitectónicos separan la funcionalidad clave de un sistema IoT tanto física como lógicamente, lo que significa, por ejemplo, que toda la detección y actuación tienen lugar en el Nivel Edge, y todo el almacenamiento a largo plazo y los análisis complejos tienen lugar en el Nivel Cloud.

Nota

Para quienes estén interesados en un estudio más profundo de la arquitectura y las normas relacionadas, hay muchas organizaciones que participan activamente y publican contenidos relacionados con estas áreas. Algunas para empezar son:

El CII ha publicado diversos documentos útiles. De especial interés es la Arquitectura de Referencia de Internet Industrial, que analiza un marco y un vocabulario común para los sistemas IIoT y ha influido mucho en mi forma de pensar sobre el tema de la arquitectura IoT.12

Crear valor

El valor real de cualquier sistema IoT es su capacidad para proporcionar un resultado mejorado o potenciado mediante la integración de los mundos físico y lógico y la recopilación y el análisis de series temporales de datos.

Tomemos un ejemplo sencillo de una cocina residencial cargada de electrodomésticos. Si, por ejemplo, puedo medir la temperatura interior de un frigorífico cada minuto, puedo determinar cuánto tiempo han estado expuestos a una temperatura determinada los objetos almacenados en el frigorífico. Si muestreo la temperatura interior sólo una vez al día, no dispongo del detalle adecuado para hacer esa determinación.

Por supuesto, si otros sistemas no pueden entender los datos que recojo, son prácticamente inútiles. Aunque individualmente cada parte puede ser única y no depender de otra, construir soluciones IoT integrables requiere que tú, como desarrollador, pienses detenidamente en cómo su diseño (y los datos) de cada parte de un sistema IoT podrían interactuar con otros sistemas (y otros desarrolladores).

Otra parte clave de la cadena de valor es la escalabilidad. Una cosa es construir un sistema que admita un puñado de entradas y otra muy distinta manejar miles, millones o incluso miles de millones de entradas. La escalabilidad -la capacidad de un sistema para manejar tanta o tan poca información como queramos- es lo que confiere al IoT su verdadero poder. Por ejemplo, un sistema en la nube escalable compatible con la IO es aquel que puede manejar un único dispositivo de puerta de enlace que le envíe datos, o miles (o millones o miles de millones) de entradas, sin fallar.

Probablemente ya esté claro que, al construir un sistema IoT integrado, tendrás que enfrentarte a matices significativos en cada paso. No puedes esperar comportamientos plug 'n' play o incluso coherentes de los sistemas que te envían datos. Es más, aunque intentes escribir tu código de forma suficientemente genérica para que funcione de la misma manera de un dispositivo de hardware a otro, puede que no siempre funcione en todas las plataformas.

Nota

No es posible que un libro cubra todas las plataformas especializadas, ni es fácil escribir código coherente de nivel semilento a nivel de dispositivo que no necesite optimizarse para cada dispositivo. Aunque cada dispositivo puede tener diferencias que debemos tener en cuenta al crear (y probar) nuestras soluciones, los ejemplos de código que proporciono en este libro son portátiles (con algunas excepciones menores) y utilizables en la mayoría de los sistemas que pueden ejecutar una máquina virtual Java o un intérprete Python 3.

Vivir en el perímetro

Con toda la potencia y flexibilidad del Nivel Nube, una solución IoT suele presentar la mayor complejidad en el perímetro, que es donde vive la mayor parte (y a menudo toda) la heterogeneidad del sistema. Las dos categorías de dispositivos en las que se centrará este libro son los dispositivos limitados y los dispositivos pasarela.

Para simplificar demasiado: los dispositivos restringidos tienen algunas limitaciones de potencia, comunicaciones y procesamiento, mientras que los dispositivos de pasarela generalmente no las tienen.

Nota

Estoy omitiendo la nomenclatura de "dispositivos inteligentes" a propósito, ya que cada vez está menos claro cuál es la mejor manera de definir los dispositivos "inteligentes" frente a los "no tan inteligentes".

Una forma de ver un dispositivo limitado es como un SBC de bajo consumo (a veces funciona con pilas) que lee datos del entorno (como la temperatura, la presión o la humedad) o desencadena una acción mecánica (como abrir o cerrar una válvula).

Nota

El IETF proporciona definiciones detalladas y terminología para varios "Dispositivos o Nodos Restringidos" en el RFC 7228.13 La intención de este libro no es alterar estas definiciones en modo alguno; simplemente utilizo los términos dispositivo restringido y aplicación de dispositivo restringido para separar la funcionalidad prevista del dispositivo restringido del dispositivo pasarela, al tiempo que doy a entender la naturaleza de cada tipo de dispositivo (en resumen, que el primero tiene más limitaciones técnicas que el segundo).

Un dispositivo pasarela también puede implementarse como un SBC, pero es mucho más potente: puede comunicarse con muchos dispositivos limitados diferentes y tiene suficiente potencia de procesamiento para agregar los datos de estos otros dispositivos, realizar algunas funciones analíticas y determinar cuándo (y cómo) enviar cualquier dato relevante a la nube para su posterior almacenamiento y procesamiento.

La Figura P-1 muestra una arquitectura de sistemas IoT teórica que representa las relaciones entre estos tipos de dispositivos dentro del Nivel de perímetro y los servicios y otras funcionalidades que viven dentro del Nivel de nube.

Notional IoT system architecture
Figura P-1. Arquitectura nocional del sistema IoT

A efectos de este libro, calificaré estos dispositivos del siguiente modo:

  • Los dispositivos de pasarela se centran principalmente en procesar, interpretar e integrar los datos del perímetro e interactuar con la nube. Realizan análisis "en el perímetro", convierten y/o transforman las pilas de protocolos, determinan cómo deben enrutarse los mensajes (si es que deben enrutarse) y, por supuesto, se conectan directamente a Internet y a los diversos servicios en la nube que hacen que el IoT sea útil para las partes interesadas de la empresa.

  • Los dispositivos limitados sólo se encargan de la detección y/o actuación y control, mientras procesan mensajes para sí mismos, pasan mensajes si se implementa el protocolo de comunicaciones adecuado y envían mensajes a un dispositivo pasarela. En resumen, sus capacidades son limitadas, y es posible que no puedan conectarse directamente a Internet, dependiendo en su lugar de un dispositivo pasarela para la conectividad con la nube.

¿Puede un dispositivo limitado conectarse directamente a Internet? Claro, si contiene una pila TCP/IP, tiene una dirección IP enrutable que sea accesible desde y hacia la Internet pública, y tiene el hardware de comunicaciones adecuado para hablar con Internet.

Sin embargo, a efectos de este libro, reduciré la categoría de dispositivos restringidos a estas dos limitaciones:

  • No admiten el enrutamiento de paquetes directamente hacia o desde la Internet pública (aunque supongamos que admiten tanto TCP/IP como UDP/IP) y deben interactuar con un dispositivo pasarela para formar parte de cualquier ecosistema IoT.

  • No disponen de recursos informáticos adecuados para determinar inteligentemente líneas de actuación complejas basadas en los datos que recogen.

A lo largo del libro me centraré en el paradigma de "conexión limitada de dispositivo a pasarela a la nube", aunque hay otros modelos viables de computación de perímetro que pueden ser más adecuados para tu caso de uso específico.

Conclusión

Lo que todo esto significa es lo siguiente: a medida que fabriquemos mejores dispositivos informáticos que sean más pequeños, más rápidos y más baratos, los utilicemos para interactuar con el mundo físico y los conectemos (o sus datos) a Internet para su procesamiento mediante servicios en la nube, podremos obtener información que nos ayude a obtener mejores resultados empresariales.

¡Gracias por leer!

Convenciones utilizadas en este libro

En este libro se utilizan las siguientes convenciones tipográficas:

Cursiva

Indica nuevos términos, URL, direcciones de correo electrónico, nombres de archivo y extensiones de archivo.

Constant width

Se utiliza en los listados de programas, así como dentro de los párrafos para referirse a elementos del programa como nombres de variables o funciones, bases de datos, tipos de datos, variables de entorno, sentencias y palabras clave.

Constant width bold

Muestra comandos u otros textos que deben ser tecleados literalmente por el usuario.

Constant width italic

Muestra el texto que debe sustituirse por valores proporcionados por el usuario o por valores determinados por el contexto.

Consejo

Este elemento significa un consejo o sugerencia.

Nota

Este elemento significa una nota general.

Advertencia

Este elemento indica una advertencia o precaución.

Utilizar ejemplos de código

Puedes encontrar material complementario (ejemplos de código y plantillas de documentación) en https://github.com/programming-the-iot. Los ejemplos de código de este libro tienen licencia MIT.

Si tienes una pregunta técnica o un problema al utilizar los ejemplos de código, envía un correo electrónico a

Este libro está aquí para ayudarte a hacer tu trabajo. En general, si se ofrece código de ejemplo con este libro, puedes utilizarlo en tus programas y documentación. No es necesario que te pongas en contacto con nosotros para pedirnos permiso, a menos que estés reproduciendo una parte importante del código. Por ejemplo, escribir un programa que utilice varios trozos de código de este libro no requiere permiso. Vender o distribuir ejemplos de libros de O'Reilly sí requiere permiso. Responder a una pregunta citando este libro y el código de ejemplo no requiere permiso. Incorporar una cantidad significativa de código de ejemplo de este libro en la documentación de tu producto sí requiere permiso.

Agradecemos la atribución, pero en general no la exigimos. Una atribución suele incluir el título, el autor, la editorial y el ISBN. Por ejemplo "Programando el Internet de las Cosas por Andy King (O'Reilly). Copyright 2021 Andrew D. King, 978-1-492-08141-8".

Si crees que el uso que haces de los ejemplos de código no se ajusta al uso legítimo o al permiso concedido anteriormente, no dudes en ponerte en contacto con nosotros en

Aprendizaje en línea O'Reilly

Nota

Durante más de 40 años, O'Reilly Media ha proporcionado formación tecnológica y empresarial, conocimientos y perspectivas para ayudar a las empresas a alcanzar el éxito.

Nuestra red única de expertos e innovadores comparten sus conocimientos y experiencia a través de libros, artículos y nuestra plataforma de aprendizaje online. La plataforma de aprendizaje en línea de O'Reilly te ofrece acceso bajo demanda a cursos de formación en directo, rutas de aprendizaje en profundidad, entornos de codificación interactivos y una amplia colección de textos y vídeos de O'Reilly y de más de 200 editoriales. Para más información, visita http://oreilly.com.

Cómo contactar con nosotros

Dirige tus comentarios y preguntas sobre este libro a la editorial:

Tenemos una página web para este libro, donde se enumeran erratas, ejemplos y cualquier información adicional. Puedes acceder a esta página en https://oreil.ly/programming-the-IoT.

Para noticias e información sobre nuestros libros y cursos, visita http://oreilly.com.

Encuéntranos en Facebook: http://facebook.com/oreilly

Síguenos en Twitter: http://twitter.com/oreillymedia

Míranos en YouTube: http://youtube.com/oreillymedia

Agradecimientos

Creo que todos estamos en un camino perpetuo de encontrarnos a nosotros mismos, ya sea a través de la carrera, la conexión o el trabajo misionero. Los giros específicos por los que Dios me ha guiado, y los mentores y compañeros que ha puesto en mi vida, representan la ventana a través de la cual he experimentado Su amor por mí. Ni que decir tiene que este libro nunca habría visto la luz si no hubiera sido por la paciencia, las críticas, el ánimo y la experiencia de familiares, amigos y colegas que estuvieron dispuestos a acompañarme en este viaje. Intentaré dar las gracias a todas las personas que han influido en mí y en este escrito, pero me temo que, sin querer, pasaré por alto algunas menciones. Por favor, perdonad cualquier olvido involuntario.

Empecé a programar a los 12 años más o menos, después de que mi padre trajera a casa un Atari 400 que le había prestado un amigo. Después de investigar un poco en BASIC (y de perder todo mi trabajo después de cada ciclo de encendido), mis padres me compraron mi propio Atari 800XL con almacenamiento en cinta (¿te acuerdas de eso?), que posteriormente actualizamos a un almacenamiento en disquete de 5¼" y finalmente mejoramos con un rapidísimo módem de 1200 Kbps. Gracias, mamá y papá. Papá... ojalá siguieras aquí con nosotros.

Avancemos 25 años y (finalmente) me convertí en programador e informático. Pero, ¿cómo empezó este proyecto? Mi amigo Jimmy Song, autor de Programming Bitcoin (O'Reilly), me puso en contacto con el equipo de O'Reilly Media cuando un día le dije: "Estoy pensando en escribir un libro...". Agradezco sinceramente los consejos sinceros, los comentarios y los ánimos de Jimmy a lo largo de este viaje.

Por supuesto, la génesis del contenido del módulo de laboratorio de este libro es mi curso de Dispositivos Conectados en la Universidad Northeastern. Como tal, tengo la gran suerte de trabajar con algunos colegas increíbles del mundo académico, como el Dr. Peter O'Reilly, Director del programa de Sistemas Cibernéticos Físicos de la Facultad de Ingeniería de la Universidad Northeastern, que me incorporó para enseñar Dispositivos Conectados. El Dr. Rolando Herrero, también de Northeastern, fue uno de los primeros revisores del contenido del libro. Su conocimiento experto de los sistemas y protocolos IoT fue inmensamente útil para dar forma y función al material. Trabajar con Peter y Rolando como amigos y colegas en la creación de una disciplina de IoT ha sido uno de los momentos culminantes de mi carrera, y estoy profundamente agradecido a ambos por su tutoría.

A todos los estudiantes de postgrado de Dispositivos Conectados con los que he tenido el privilegio de enseñar y colaborar, ¡muchas gracias! El contenido de este libro y los ejercicios de cada capítulo se han inspirado en vuestras opiniones, sugerencias, peticiones, comentarios y tolerancia hacia mis tontos chistes de padre. Vosotros sois la razón principal por la que este libro vio la luz y por la que puedo vivir mi pasión por la enseñanza (y no como cómico).

Muchos de los ayudantes de cátedra del curso aportaron comentarios y revisiones del libro y me ayudaron a resolver las desconexiones entre la prosa y los ejercicios en línea. Un sincero agradecimiento a estos increíbles colegas: Cheng Shu, Ganeshram Kanakasabai, Harsha Vardhanram Kalyanaraman, Jaydeep Shah, Yogesh Suresh y Yuxiang Cao. Me alegro de haber trabajado con cada uno de ellos y aprecio profundamente sus contribuciones al éxito del curso.

Algunos de mis amigos y colegas de la industria me proporcionaron información detallada y comentarios sobre el borrador preliminar. Tim Strunck, experto en ingeniería de soluciones comerciales de IoT, aportó un rico conjunto de comentarios sobre el flujo general y el contenido técnico; le estoy muy agradecido por su amistad y aguda perspicacia, junto con el asombroso Prólogo de este libro. Steve Resnick, Director Gerente de una gran empresa de consultoría y autor de dos libros propios, compartió su perspectiva ejecutiva y sus consejos sobre el flujo, la forma y el contenido, ayudándome a dar mayor claridad a los conceptos clave. Ben Pu aportó un nuevo punto de vista sobre el libro en general, que me ayudó a verlo a través de una lente que me permitió conectar con futuros lectores. Estoy agradecido de contar con una red que incluye a profesionales como Tim, Steve y Ben, y aprecio mucho sus comentarios y aportaciones rápidas.

A todos mis colegas y amigos de O'Reilly Media: ¡vaya equipo! Mike Loukides, Vicepresidente y Editor de Admisión, que pasó horas en videoconferencias, correos electrónicos y llamadas telefónicas y ayudó a dar forma a la propuesta y a que pasara el proceso de admisión. Melissa Duffield, Vicepresidenta de Estrategia de Contenidos, que trabajó conmigo en el aspecto de marketing y consiguió que pasara el proceso de aprobación en un tiempo récord. Cassandra Furtado, que respondió pacientemente a todas mis preguntas iniciales. Chris Faucher, que transformó mi manuscrito en un libro. Virginia Wilson, que ayudó a gestionar el calendario y el proceso de revisión técnica. Arthur Johnson, que, como corrector, detectó y corrigió muchos fallos de coherencia en la prosa y el formato. Y, por supuesto, Sarah Grey, que, como editora de desarrollo, me ayudó a pensar en la organización del material y a hacerlo realidad. Siento un enorme respeto por cada uno de ellos y por su profesionalidad, apoyo, capacidad de respuesta y compañerismo a lo largo de este proyecto.

En la preparación de este libro, sus ejemplos y ejercicios se ha utilizado una gran cantidad de software de código abierto y especificaciones abiertas. Me gustaría dar las gracias a los desarrolladores y colaboradores de cada uno de estos proyectos.

Sobre todo, gracias a mi maravillosa esposa, Yoon-Hi, y a mi increíble hijo, Eliot: vosotros dos sois las piedras angulares de mi vida, y no sé cómo habría podido siquiera empezar este camino sin vuestro ánimo y apoyo. Gracias por todas las revisiones, conversaciones (y ediciones) de palabras, retos, apoyo y fe. Me habéis sacado de los valles y me habéis empujado colinas arriba. Sois increíbles y os quiero más de lo que puedo expresar.

1 Todos los ejercicios de este libro son una adaptación de mi libro Programming the IoT Kanban board y se utilizan con mi permiso.

2 El Apéndice proporciona una representación UML básica para cada ejercicio. La última especificación UML puede consultarse en el sitio web del Grupo de Gestión de Objetos (OMG).

3 Encyclopaedia Britannica Online, s.v. "Ley de Moore", por los editores de Encyclopaedia Britannica, última actualización: 26 de diciembre de 2019.

4 Encyclopaedia Britannica Online, s.v. "ARPANET", por Kevin Featherly, última actualización: 23 de marzo de 2021.

5 Simón Duque Antón y otros, "Dos décadas de explotación de SCADA: A Brief History", en 2017 IEEE Conference on Application, Information and Network Security (AINS) (Nueva York: IEEE, 2017), 98-104.

6 John Postel, "Protocolo de datagramas de usuario", Internet Standard RFC 768, 28 de agosto de 1980.

7 Para más información sobre la propuesta WWW de Tim Berners-Lee, consulta https://www.w3.org/History/1989/proposal.html.

8 Consulta una explicación en "La tostadora de Internet".

9 Encyclopaedia Britannica Online, "Conoce a tu Joe: 5 cosas que no sabías sobre el café" (2. La olla vigilada), por Alison Eldridge, consultado el 18 de enero de 2021.

10 Kevin Ashton, "That 'Internet of Things' Thing", RFID Journal, 22 de junio de 2009.

11 Puedes leer un breve resumen del nacimiento del Arduino en la Cronología de la Historia de la Informática del Museo de Historia de la Informática.

12 El Internet Industrial de las Cosas, Volumen G1: Arquitectura de Referencia, Versión 1.9 (Needham, MA: Industrial Internet Consortium, 2019).

13 Carsten Bormann, Mehmet Ersue y Ari Keränen, "Terminology for Constrained-Node Networks", IETF Informational RFC 7228, mayo de 2014, 8-10.

Get Programar el Internet de las Cosas now with the O’Reilly learning platform.

O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.