Implemente rápidamente dispositivos IoT de fuerza industrial basados en sensores en Amazon Web Services
Colaboración de Editores de DigiKey de América del Norte
2019-10-02
Los dispositivos de punto final para el Internet de las cosas industrial (IIoT) proporcionan la interfaz esencial entre los recursos basados en la nube y los procesos industriales. Sin embargo, al vincular la periferia con la nube, un dispositivo IIoT necesita abordar requisitos crecientes de rendimiento, conectividad, integración de sensores, seguridad y confiabilidad dentro del dispositivo, así como también entre el dispositivo y la nube.
Servicios especializados como Amazon IoT Core y Amazon FreeRTOS han ayudado a cumplir con esos requisitos clave del lado de la nube. Sin embargo, conectarse con esos servicios del lado del dispositivo puede presentar complicaciones adicionales para los desarrolladores de IIoT que recién comienzan con los servicios en la nube y sus numerosas interfaces y protocolos. Estos desarrolladores aún deben responder a los requisitos de procesamiento y detección de aplicaciones de vanguardia, así como a las limitaciones de costo, potencia, rendimiento y espacio.
Este artículo analiza brevemente el uso de recursos basados en la nube y cómo han evolucionado, y luego presenta un kit completo de nube basado en un microcontrolador RX65N de Renesas Muestra cómo se puede utilizar este microcontrolador y el diseño de referencia en combinación con su paquete de software asociado para implementar rápidamente dispositivos IIoT basados en sensores para la integración con la nube de Amazon Web Services (AWS).
Utilizar recursos en la nube
Si bien otros proveedores de servicios en la nube se están poniendo al día lentamente, AWS sigue siendo el proveedor líder de ofertas de computación, almacenamiento y software como servicios (SaaS) escalable sin servidor y computación, almacenamiento y software basados en la nube. Las organizaciones usan estos servicios a diario en aplicaciones a escala empresarial que pueden crecer con la demanda cambiante y aprovechar una amplia gama de paquetes SaaS, todo mediado a través de servicios de middleware uniformes y de plataforma amplia para comunicaciones, notificaciones, seguridad, almacenamiento de datos y casi cualquier necesidad de informática práctica.
Para las empresas que implementan aplicaciones de IoT a gran escala, la utilización de estos servicios para analizar datos IIoT de vehículos, equipos, edificios y plantas de fabricación ofrece claras ventajas para mejorar el conocimiento y el control de los activos físicos, los procesos y las prácticas. Para los desarrolladores, sin embargo, el proceso de conectar un dispositivo IIoT a AWS o cualquier otro servicio en la nube puede parecer menos claro debido a la aparente brecha entre los diseños de IoT en tiempo real con recursos limitados en la periferia y los servicios virtuales escalables en la nube.
Para acortar esta brecha, los principales proveedores de servicios en la nube ofrecen un conjunto de capacidades de conexión diseñadas para conciliar las amplias diferencias entre los dispositivos IoT y los servicios en la nube. Para los AWS, estas capacidades están en AWS IoT Core, que sirve como puerta de entrada no solo a la plataforma AWS completa sino también a servicios de nivel de aplicación específicos de IoT para el almacenamiento de datos, el análisis, la visualización y el aprendizaje automático (Figura 1).
Figura 1: AWS IoT proporciona la interfaz de servicio entre los sensores IIoT en el campo y la plataforma de servicios más amplia de AWS utilizada para analizar datos de sensores para aplicaciones industriales, como la aplicación de administración de flota sugerida aquí. (Fuente de la imagen: AWS)
Más allá de estas capacidades, la integración del sistema operativo en tiempo real (RTOS) de código abierto FreeRTOS con AWS IoT ofrece una ventaja importante al tratar con los requisitos del ciclo de vida para la actualización y el mantenimiento del sistema.
Al igual que con cualquier otra oferta a nivel empresarial, los servicios de AWS IoT especifican un amplio conjunto de requisitos de interfaz y protocolos para la incorporación de dispositivos, la autenticación y el intercambio de mensajes. Aunque es consistente con los requisitos para la plataforma AWS más amplia, la naturaleza especializada del entorno IoT significa que incluso los desarrolladores de AWS experimentados pueden enfrentar una curva de aprendizaje significativa al integrar un dispositivo con AWS IoT Core y los servicios AWS IoT asociados. Además, los desarrolladores, sin importar su nivel de experiencia, se enfrentan a los desafíos familiares de implementar un diseño de IoT que satisfaga la demanda continua de mayor rendimiento, menor consumo de energía y mejor seguridad.
Frente a este conjunto de desafíos, el kit de nube de Renesas RTK5RX65N0S01000BE RX65N ofrece una solución inmediata para implementar rápidamente dispositivos IIoT en AWS.
Plataforma integral
El kit de nube RX65N proporciona una plataforma completa de diseño y desarrollo de referencia para implementar y evaluar dispositivos IIoT con servicios en la nube AWS IoT. Junto con un paquete integral de desarrollo de software, el kit contiene tres placas de hardware, incluida una placa de destino con un microcontrolador Renesas R5F565NEDDFP 32-bit que está certificado para Amazon FreeRTOS, una placa Wi-Fi, y una placa de opción de nube de Renesas con conexiones USB y un conjunto de sensores típicamente necesarios en una aplicación IIoT.
Basado en el núcleo del procesador Renesas RXv2 32-bit, el microcontrolador R5F565NEDDFP proporciona 640 kilobytes (Kbytes) de RAM, 32 Kbytes de memoria y 2 megabytes (Mbytes) de flash de código. En este microcontrolador, la memoria flash de código se puede configurar en un modo lineal donde funciona como un espacio de direcciones único, o en modo dual donde funciona como dos áreas de memoria separadas. El modo dual permite actualizaciones inalámbricas (OTA) más confiables a medida que carga el nuevo firmware en un banco desocupado y valida su integridad y autenticidad antes de reiniciar el sistema.
Junto con su soporte de memoria, el R5F565NEDDFP y otros miembros de la familia RX65N integran un extenso conjunto de bloques funcionales, que incluyen una unidad de punto flotante (FPU) IEEE-754 y una unidad de protección de memoria (MPU). Entre sus interfaces externas, los microcontroladores RX65N incluyen dos convertidores de analógico a digital (ADC) multicanal 12-bit, un convertidor de digital a analógico (DAC) 12-bit y dos canales e interfaces de comunicaciones industriales que incluyen Ethernet, controlador Red de área (CAN) y múltiples interfaces seriales que incluyen I2C, cuádruple SPI y una interfaz de comunicaciones serie multicanal (SCI) que admite I2C y SPI.
Interfaz de hardware del sensor
Además de proporcionar una plataforma de evaluación, el kit de nube de Renesas demuestra la relativa facilidad de integración del microcontrolador RX65N con sensores IIoT. En este caso, la placa de opción de nube del kit incluye un conjunto de tres sensores:
- Sensor de luz digital ISL29035 (ISL29035IROZ-T7) de Renesas para la medición de luz ambiental/infrarroja
- El sensorBMI160 MEMS de Bosch Sensortec para aceleración de tres ejes y medición giroscópica
- Sensor BMS680 MEMS de Bosch Sensortec para mediciones de gas, temperatura, humedad y presión
Debido a que los tres sensores proporcionan una interfaz serial I2C, la integración con el microcontrolador es simplemente una cuestión de conectar los dispositivos a un bus I2C compartido. El esquema de la placa de opciones de la nube muestra esta sencilla interfaz de hardware (Figura 2).
Figura 2: Incluido en el kit de la nube de Renesas RX65N, el esquema de diseño de referencia de la placa de opciones de la nube de Renesas ilustra la interfaz simple de hardware necesaria para conectar sus tres sensores a un bus serial I2C compartido. (Fuente de la imagen: Renesas)
Mediante el uso de conectores compatibles disponibles en la placa de opciones en la nube, los desarrolladores también pueden ampliar la funcionalidad del hardware del kit con placas adicionales PMOD y Grove.
Desarrollo de software
Aunque los avanzados microcontroladores y sensores utilizados en los dispositivos IIoT simplifican el diseño del hardware, el diseño del software puede ser significativamente más complejo. Junto con los requisitos de software para el sistema IIoT, los desarrolladores enfrentan requisitos para interactuar con recursos basados en la nube como AWS IoT Core y los servicios de la plataforma AWS. En este caso, estos requisitos se abordan a través de un par de kits de desarrollo de software (SDK) de AWS destinados a dispositivos y servicios en la nube.
A nivel de aplicación, los desarrolladores de software de IoT interactúan con los servicios de AWS a través del SDK de AWS estándar. En este nivel, las interacciones con los dispositivos y sus datos ocurren a través de esos mismos servicios, mediados por los servicios de mensajería y notificación de AWS comunes a los servicios de AWS y AWS IoT, como se menciona a continuación.
A nivel de dispositivo, los desarrolladores trabajan con un SDK de dispositivo (o "Cosa") para conectarse a los servicios de AWS IoT. Las solicitudes y respuestas específicas entre dispositivos y servicios de AWS están mediadas por un agente de mensajes que gestiona los intercambios utilizando el protocolo de mensajería de publicación-suscripción (pub/sub) de las normas ISO de Transporte de telemetría de mensajes en cola (MQTT) (Figura 3).
Figura 3: La implementación de aplicaciones IIoT implica el uso de SDK separados para dispositivos y aplicaciones, pero ambos se basan en un conjunto de mecanismos uniformes en toda la plataforma para la mensajería, la notificación y otras capacidades subyacentes. (Fuente de la imagen: AWS)
A medida que el dispositivo envía mensajes MQTT con cargas de datos, un motor de reglas invoca servicios adicionales de la plataforma AWS de acuerdo con un conjunto de expresiones escritas por el desarrollador en una sintaxis basada en lenguaje de consulta estructurado (SQL). Por ejemplo, la regla que se muestra en el Listado 1 puede volver a publicar la carga útil generada por la expresión SQL (SELECT * FROM 'iot/test) en otra cola MQTT (my-mqtt-topic) si un modelo de inferencia (my-model) llamado por la función de servicios de aprendizaje automático de Amazon (machinelearning_predict()) clasifica los datos como pertenecientes a alguna etiqueta específica (predicttedLabel=1).
Copy { "sql": "SELECT * FROM 'iot/test' where machinelearning_predict('my-model', 'arn:aws:iam::123456789012:role/my-iot-aml-role', *).predictedLabel=1", "ruleDisabled": false, "awsIotSqlVersion": "2016-03-23", "actions": [{ "republish": { "roleArn": "arn:aws:iam::123456789012:role/my-iot-role", "topic": "my-mqtt-topic" } }] }
Listado 1: El motor de reglas de AWS invoca los servicios de AWS y enruta los datos mediante reglas de selección similares a SQL, las acciones designadas y los metadatos asociados. (Código fuente: AWS)
Sombras de dispositivo
Mientras que el motor de reglas de AWS IoT proporciona una capacidad de procesamiento débilmente acoplada, el servicio Device Shadows para AWS IoT ayuda a desacoplar la aplicación IoT del estado del dispositivo IoT. Las sombras de dispositivo contienen información de estado sobre un dispositivo IoT físico. En consecuencia, si un dispositivo IoT pierde conectividad o interrumpe la conexión con AWS, los servicios basados en la nube pueden usar la sombra de dispositivo para continuar operando en función de los últimos datos recibidos sin necesidad de construir sus propios mecanismos de almacenamiento en caché de datos del dispositivo. Por el contrario, el servicio de vanguardia de AWS IoT Greengrass permite que los dispositivos IoT continúen interactuando virtualmente con la nube durante interrupciones intermitentes en los servicios en la nube. Aquí, Greengrass continúa operando en dispositivos de vanguardia para mantener las sombras de dispositivo y proporcionar el subconjunto necesario de servicios en la nube que se necesitan para mantener la operación del dispositivo IoT.
Aunque las sombras de dispositivo mantienen el estado del dispositivo, el servicio Device Shadow es más que un simple mecanismo de almacenamiento en caché. También proporciona una interfaz común para que las aplicaciones envíen solicitudes a dispositivos IoT. Debido a que está vinculado al mecanismo de pub/sub MQTT, las actualizaciones y solicitudes de datos dan como resultado una notificación automática de todos los dispositivos y aplicaciones que se suscriben a las colas MQTT asociadas con cada sombra de dispositivo.
En el nivel de implementación, el servicio Device Shadow utiliza un formato de documento JSON simple que contiene datos y metadatos asociados con cada dispositivo físico. Trabajar a través del SDK del dispositivo, el software en el dispositivo IoT puede transmitir un nuevo documento JSON que actualiza el estado informado en la sombra de dispositivo con sus datos más recientes. Por el contrario, un host o una aplicación de IoT basada en dispositivos móviles puede actualizar la sombra de dispositivo con los nuevos valores deseados. Por ejemplo, para un dispositivo IIoT que actualmente muestra un LED verde o luz verde en una pantalla, una aplicación puede actualizar la sombra de dispositivo para solicitar un cambio a rojo e incluso recibir un informe que muestra el delta entre los estados deseados e informados (Listado 2).
Copy { "state": { "desired": { "color": "RED", "state": "STOP" }, "reported": { "color": "GREEN", "engine": "ON" }, "delta": { "color": "RED", "state": "STOP" } }, "metadata": { "desired": { "color": { "timestamp": 12345 }, "state": { "timestamp": 12345 }, "reported": { "color": { "timestamp": 12345 }, "engine": { "timestamp": 12345 } }, "delta": { "color": { "timestamp": 12345 }, "state": { "timestamp": 12345 } } }, "version": 17, "timestamp": 123456789 } }
Listado 2: Una sombra de dispositivo AWS es un documento JSON que contiene metadatos y datos del dispositivo, incluidos los valores para los estados de dispositivo tanto informados como deseados, así como el delta entre los dos estados. (Código fuente: AWS)
Si bien los servicios como las sombras de dispositivos y los motores de reglas admiten la integración con aplicaciones y la plataforma AWS más amplia, una pieza central en el servicio AWS IoT es su integración de Amazon FreeRTOS. Este RTOS de código abierto extiende el popular núcleo FreeRTOS de código abierto con un amplio conjunto de bibliotecas. Junto con las bibliotecas para servicios comunes como el registro, Amazon FreeRTOS agrega bibliotecas para los servicios de AWS IoT. Estas bibliotecas incluyen los servicios Device Shadow para AWS IoT, AWS IoT Greengrass (gdd) y AWS IoT Device Defender para la supervisión de la seguridad del dispositivo. Además, Amazon mejora FreeRTOS con bibliotecas para muchos servicios de middleware, incluidos sockets seguros, Transport Layer Security (TLS), Public Key Cryptography Standard (PKCS) n.° 11, un agente OTA, Bluetooth, Wi-Fi e intercambio de mensajes MQTT.
Implementación sencilla
Renesas ayuda a los desarrolladores a ganar experiencia rápidamente con su kit en la nube y la conectividad con los servicios de AWS IoT. Después de configurar el conjunto de placas de kit en la nube, los usuarios deben instalar el entorno completo de desarrollo integrado (IDE) e2 basado en Eclipse Renesas y el compilador CC-RX de Renesas. Al utilizar el entorno e2 y el compilador CC-RX, los desarrolladores pueden importar y compilar rápidamente Amazon FreeRTOS, así como el código de muestra del kit de la nube RX65N del código abierto de Renesas.
Renesas proporciona documentación asociada que proporciona una descripción paso a paso de la configuración de AWS IoT y las credenciales de autenticación necesarias para realizar cualquier conexión a AWS. Después de este procedimiento de configuración relativamente rápido, el programa de demostración debe ejecutarse para monitorear los datos del sensor enviados por el dispositivo como mensajes MQTT y ver los mensajes utilizando un cliente de visualización MQTT disponible a través de la consola AWS IoT.
Desarrollo de software personalizado
Además de proporcionar una demostración inmediata de la integración de dispositivos IoT con AWS IoT, el código de muestra de Renesas también sirve como diseño de referencia para aplicaciones personalizadas. Sin embargo, incluso con la disponibilidad de este código, uno de los desafíos con los que se encontrarán los desarrolladores en sus proyectos personalizados es lidiar con la gran cantidad de configuraciones asociadas con Amazon FreeRTOS y los servicios relacionados a los AWS IoT. Cada servicio requiere la especificación de muchos parámetros asociados, como longitudes de cola y tamaños de mensajes.
Aunque el código de muestra de Renesas incluye configuraciones FreeRTOS preconstruidas para sus demostraciones, los desarrolladores de códigos personalizados deberán trabajar con las opciones de configuración para cada servicio, biblioteca y utilidad. Renesas desarrolló el Configurador inteligente para simplificar este proceso. Disponible como complemento de entorno e2 y como aplicación independiente, el configurador inteligente permite a los desarrolladores examinar y modificar la configuración de cada grupo de configuración a través de una interfaz gráfica de usuario (GUI) (Figura 4).
Figura 4: El Configurador inteligente de Renesas ofrece una interfaz gráfica de usuario (GUI) simple para examinar y modificar las numerosas configuraciones asociadas con las numerosas bibliotecas y servicios compatibles con Amazon FreeRTOS. (Fuente de la imagen: Renesas)
Para el código, los desarrolladores pueden aprovechar la fuente completa provista en el repositorio de código del kit de la nube de Renesas RX65N. Las rutinas de muestra incluidas en este repositorio demuestran patrones de diseño clave para trabajar con cada servicio de AWS IoT a través de los mecanismos de mensajería basados en MQTT.
Para demostrar el servicio Device Shadow para AWS IoT, por ejemplo, un módulo incluido (aws_shadow_lightbulb_on_off.c) y los archivos de cabecera asociados ilustran cómo el software que se ejecuta en el dispositivo IoT crea documentos JSON, inicializa las colas y envía mensajes de actualización del dispositivo al servicio Device Shadow. Aunque la arquitectura de software completa está bastante involucrada, este módulo de muestra presenta cómo se puede usar una estructura de datos básica y algunas líneas de código para cambiar el color de una luz (se reporta color verde en el documento JSON que se muestra en el Listado 1) configurando atributo de documento JSON del dispositivo de sombra apropiado para el nuevo color (color deseado rojo en el Listado 1). Después de inicializar la sombra de dispositivo, el código crea una tarea que alterna el color deseado entre dos estados (rojo y verde) mediante la emisión de una nueva solicitud de estado deseada utilizando la función prvGenerateDesiredJSON() para generar el nuevo documento JSON con el estado de color alternativo (Listado 3).
Copy #define shadowDemoDESIRED_JSON \ "{" \ "\"state\":{" \ "\"desired\":{" \ "\"%s\":\"%s\"" \ "}" \ "}," \ "\"clientToken\": \"token-%d\"" \ "}" ...
static uint32_t prvGenerateDesiredJSON( ShadowQueueData_t * const pxShadowQueueData, const char * const pcTaskName, uint8_t ucBulbState ) { /* Map cBulbState to strings. */ static const char * const pColors[ 2 ] = { "green", "red" }; /* Generate JSON. */ return ( uint32_t ) snprintf( ( char * ) pxShadowQueueData->pcUpdateBuffer, shadowDemoBUFFER_LENGTH, shadowDemoDESIRED_JSON, pcTaskName, pColors[ ucBulbState ], ( int ) xTaskGetTickCount() ); } ...
/* Keep changing the desired state of light bulb periodically. */ for( ; ; ) { configPRINTF( ( "%s changing desired state.\r\n", pxShadowTaskParam->cTaskName ) ); /* Toggle the desired state and generate a new JSON document. */ ucBulbState = !( ucBulbState ); xShadowQueueData.ulDataLength = prvGenerateDesiredJSON( &xShadowQueueData, pxShadowTaskParam->cTaskName, ucBulbState ); /* Add the new desired state to the update queue. */ if( xQueueSendToBack( xUpdateQueue, &xShadowQueueData, shadowDemoSEND_QUEUE_WAIT_TICKS ) == pdTRUE ) { /* If the new desired state was successfully added, wait for notification that the update completed. */ configASSERT( ulTaskNotifyTake( pdTRUE, shadowDemoNOTIFY_WAIT_MS ) == 1 ); configPRINTF( ( "%s done changing desired state.\r\n", pxShadowTaskParam->cTaskName ) ); } else { configPRINTF( ( "Update queue full, deferring desired state change.\r\n" ) ); } vTaskDelayUntil( &xLastWakeTime, shadowDemoSEND_UPDATE_MS ); }
Listado 3: Este fragmento de código de muestra en el repositorio de código del kit de nube de Renesas RX65N presenta el patrón de diseño básico para usar un documento JSON definido en shadowDemoDESIRED_JSON e instanciado por la función prvGenerateDesiredJSON() para modificar el estado deseado de una sombra de dispositivo usando una cola de actualización. (Código fuente: Renesas)
Conclusión
Con su amplio conjunto de ofertas, un servicio comercial en la nube como AWS es una plataforma atractiva para los desarrolladores que crean aplicaciones IIoT a gran escala, particularmente aquellos que necesitan trabajar con otras aplicaciones empresariales. Sin embargo, para los desarrolladores, lidiar con el diseño de dispositivos IoT y con los desafíos de integración en la nube a menudo lleva a retrasos inesperados en el desarrollo y la implementación.
Basado en el microcontrolador Renesas RX65N, el kit de la nube de Renesas RX65N proporciona un dispositivo sensor IIoT completo y un diseño de referencia. Se utiliza en combinación con su paquete de software asociado, el kit de la nube de Renesas proporciona una plataforma de desarrollo flexible y rápida para implementar dispositivos IIoT basados en sensores para la integración con AWS.
Descargo de responsabilidad: Las opiniones, creencias y puntos de vista expresados por los autores o participantes del foro de este sitio web no reflejan necesariamente las opiniones, las creencias y los puntos de vista de DigiKey o de las políticas oficiales de DigiKey.




