Share via


Escenarios de uso del SDK de C y del SDK de C insertado

Microsoft proporciona middleware y SDK de dispositivo IoT de Azure para escenarios de dispositivos insertados y restringidos. Este artículo ayuda a los desarrolladores de dispositivos a decidir cuál debe usarse para la aplicación.

En el diagrama siguiente se muestran cuatro escenarios comunes en los que los clientes conectan dispositivos a Azure IoT mediante un SDK basado en C (C99). El resto de este artículo contiene más detalles sobre cada escenario.

Diagrama de escenarios comunes del SDK.

Escenario 1: SDK de C de Azure IoT (para Linux y Windows)

A fecha de 2015, el SDK de C de Azure IoT fue el primer SDK de Azure creado para conectar dispositivos a servicios de IoT. Se trata de una plataforma estable que se creó para proporcionar las siguientes funcionalidades con el fin de conectar dispositivos a Azure IoT:

  • Servicios de IoT Hub.
  • Clientes de Device Provisioning Service.
  • Tres opciones de transporte de comunicación (MQTT, AMQP y HTTP), que Microsoft crea y mantiene.
  • Varias opciones de pilas de TLS comunes (OpenSSL, Schannel y Bed TLS, según la plataforma de destino).
  • Sockets TCP (Win32, Berkeley o Mbed).

El hecho de proporcionar transporte de comunicación, TLS y abstracción de sockets tiene un coste de rendimiento. Muchas rutas de acceso requieren llamadas a malloc y memcpy entre las distintas capas de abstracción. Este coste de rendimiento es pequeño en comparación con un dispositivo de escritorio o Raspberry Pi. En cambio, en un dispositivo realmente restringido, el coste se convierte en una sobrecarga considerable con la posibilidad de fragmentación de memoria. La capa de transporte de comunicación también requiere que se llame a una función doWork al menos cada 100 milisegundos. Estas llamadas frecuentes dificultan la optimización del SDK para dispositivos con batería. La existencia de varias capas de abstracción también dificulta a los clientes usar una biblioteca determinada o cambiar a ella.

El escenario 1 está recomendado para dispositivos Windows o Linux, que normalmente son menos sensibles al uso de memoria o al consumo de energía. Aun así, los dispositivos basados en Windows y Linux también pueden usar el SDK de C insertado, como se muestra en el escenario 2. Otras opciones para dispositivos basados en Windows y Linux incluyen los otros SDK de dispositivo IoT de Azure: SDK de Java, SDK de .NET, SDK de Node y SDK de Python.

Escenario 2: SDK de C insertado (para escenarios de equipos sin sistema operativo y microcontroladores)

En 2020, Microsoft publicó el SDK de Azure para C insertado (también conocido como SDK de C insertado). Este SDK se creó en función de los comentarios de los clientes y de una creciente necesidad de admitir dispositivos microcontroladores restringidos. Normalmente, los microcontroladores restringidos tienen menos memoria y potencia de procesamiento.

El SDK de C insertado tiene las siguientes características clave:

  • Sin asignación de memoria dinámica. Los clientes deben asignar estructuras de datos donde ellos quieran, como en la memoria global, un montón o una pila. Después, tienen que pasar la dirección de la estructura asignada a funciones del SDK para inicializar y realizar varias operaciones.
  • Solo MQTT. El uso de solo MQTT es ideal para dispositivos restringidos porque es un protocolo de red eficaz y ligero. Actualmente solo se admite MQTT v3.1.1.
  • Traiga su propia pila de red. El SDK de C insertado no realiza ninguna operación de E/S. Este enfoque permite a los usuarios seleccionar los clientes de MQTT, TLS y socket que sean más adecuados para su plataforma de destino.
  • Conjunto de características similar al del SDK de C. El SDK de C insertado proporciona unas características similares a las del SDK de C de Azure IoT, con la única diferencia de que el SDK de C insertado no proporciona lo siguiente:
    • Carga en un blob.
    • Capacidad de ejecutarse como un módulo de IoT Edge.
    • Características basadas en AMQP, como el procesamiento por lotes de mensajes de contenido y la multiplexación de dispositivos.
  • Superficie de memoria total más pequeña. El SDK de C insertado, como puede verse en un ejemplo en el que se muestra cómo conectarse a IoT Hub, puede tomar tan solo 74 KB de ROM y 8,26 KB de RAM.

El SDK de C insertado admite microcontroladores sin sistema operativo, microcontroladores con un sistema operativo en tiempo real (como Eclipse ThreadX), Linux y Windows. Los clientes pueden implementar niveles de plataforma personalizados para usar el SDK en dispositivos personalizados. El SDK también proporciona algunos niveles de plataforma como Arduino y Swift. Microsoft anima a la comunidad a enviar otros niveles de plataforma para aumentar las plataformas compatibles integradas. VxWorks de Wind River es un ejemplo de nivel de plataforma enviado por la comunidad.

El SDK de C insertado agrega algunas ventajas de programación debido a su flexibilidad en comparación con el SDK de C de Azure IoT. En concreto, las aplicaciones que usan dispositivos restringidos se beneficiarán de un enorme ahorro de recursos y un mayor control mediante programación. En comparación, si usa Eclipse ThreadX o FreeRTOS, puede tener estas mismas ventajas junto con otras características por implementación de RTOS.

Escenario 3: Eclipse ThreadX con middleware de Azure IoT (para proyectos basados en Eclipse ThreadX)

El escenario 3 implica el uso de Eclipse ThreadX y el middleware de Azure IoT. Eclipse ThreadX se basa en el SDK de C insertado y agrega compatibilidad con MQTT y TLS. El middleware para Eclipse ThreadX expone las API de la aplicación que son similares a las API nativas de Eclipse ThreadX. Este enfoque facilita a los desarrolladores el uso de las API y la conexión de sus dispositivos basados en Eclipse ThreadX a Azure IoT. Eclipse ThreadX es una plataforma insertada totalmente integrada, eficaz y en tiempo real que proporciona todas las características de red e IoT que necesita para la solución.

Hay disponibles ejemplos para varios kits de desarrollo populares de ST, NXP, Renesas y Microchip. Estos ejemplos funcionan con Azure IoT Hub o Azure IoT Central y están disponibles como proyectos de IDE de semiconductor o IAR Workbench en GitHub.

Dado que se basa en el SDK de C insertado, el middleware de Azure IoT para Eclipse ThreadX no es una asignación de memoria. Los clientes deben asignar estructuras de datos del SDK en la memoria global, un montón o una pila. Después de que los clientes asignen una estructura de datos, deben pasar la dirección de la estructura a las funciones del SDK para inicializar y realizar varias operaciones.

Escenario 4: FreeRTOS con middleware de FreeRTOS (para su uso con proyectos basados en FreeRTOS)

El escenario 4 aplica el middleware de C insertado en FreeRTOS. El middleware de C insertado se basa en el SDK de C insertado y agrega compatibilidad con MQTT mediante la biblioteca coreMQTT de código abierto. Este middleware para FreeRTOS funciona en el nivel de MQTT. Establece la conexión de MQTT, inicia y cancela la suscripción a temas, y envía y recibe mensajes. El cliente controla las desconexiones mediante API de middleware.

Los clientes controlan la configuración de TLS/TCP y la conexión con el punto de conexión. Este enfoque permite flexibilidad entre las implementaciones de software o hardware de cualquiera de las pilas. El middleware de Azure IoT no crea ninguna tarea en segundo plano para FreeRTOS. Los mensajes se envían y reciben de forma sincrónica.

La implementación principal se proporciona en este repositorio de GitHub. Hay disponibles ejemplos para varios kits de desarrollo populares, incluidos NXP1060, STM32 y ESP32. Los ejemplos funcionan con Azure IoT Hub, Azure IoT Central y Azure Device Provisioning Service, y están disponibles en este repositorio de GitHub.

Dado que se basa en el SDK de C insertado de Azure, el middleware de Azure IoT para FreeRTOS tampoco asigna memoria. Los clientes deben asignar estructuras de datos del SDK en la memoria global, un montón o una pila. Después de que los clientes asignen una estructura de datos, deben pasar la dirección de las estructuras asignadas a las funciones del SDK para inicializar y realizar varias operaciones.

Escenarios de uso técnicos del SDK basado en C

En el diagrama siguiente se resumen las opciones técnicas de cada escenario de uso del SDK descrito en este artículo.

Diagrama con detalles para desarrolladores sobre los cuatro escenarios de uso del SDK de C.

Comparación del SDK basado en C por memoria y protocolos

En la tabla siguiente se comparan los cuatro escenarios de desarrollo del SDK de dispositivo en función del uso de memoria y el protocolo.

  Memoria
asignada
Memoria
usada
Protocolos
admitidos
Recomendado para
SDK de Azure IoT para C Principalmente dinámica Unrestricted. Puede ocupar
hasta 1 MB o más en RAM.
AMQP
HTTP
MQTT v3.1.1
Sistemas basados en microprocesador
Microsoft Windows
Linux
Apple OS X
SDK de Azure para C insertado Solo estática Restringido según la cantidad de
datos que asigna la aplicación.
MQTT v3.1.1 Microcontroladores
Implementaciones sin sistema operativo
Implementaciones basadas en RTOS
Middleware de Azure IoT para Eclipse ThreadX Solo estática Restringidos MQTT v3.1.1 Microcontroladores
Implementaciones basadas en RTOS
Middleware de Azure IoT para FreeRTOS Solo estática Restringidos MQTT v3.1.1 Microcontroladores
Implementaciones basadas en RTOS

Características de Azure IoT compatibles con cada SDK

En la tabla siguiente se comparan los cuatro escenarios de desarrollo del SDK de dispositivo en función de la compatibilidad con características de Azure IoT.

  SDK de Azure IoT para C SDK de Azure para
C insertado
Azure IoT
middleware para
Eclipse ThreadX
Azure IoT
middleware para
FreeRTOS
Autenticación de cliente de SAS
Autenticación de cliente x509
Aprovisionamiento de dispositivos
Telemetría
Mensajes de la nube al dispositivo
Métodos directos
Dispositivo gemelo
IoT Plug and Play
Procesamiento por lotes de telemetría
(AMQP, HTTP)
No N.º No
Cargas en un blob de Azure No N.º No
Integración automática en
contenedores hospedados en IoT Edge
No N.º No

Pasos siguientes

Para obtener más información sobre el desarrollo de dispositivos y los SDK disponibles para Azure IoT, consulte la tabla siguiente.