Cenários de uso do SDK do C e do SDK do C inserido

A Microsoft fornece SDKs do dispositivo IoT do Azure e middleware para cenários de dispositivo inserido e restrito. Este artigo ajuda os desenvolvedores de dispositivos a decidir qual deles usar para seu aplicativo.

O diagrama a seguir mostra quatro cenários comuns em que os clientes conectam dispositivos com a Internet das Coisas do Azure, usando um SDK baseado em C (C99). O restante deste artigo fornece mais detalhes sobre cada cenário.

Diagrama de cenários comuns do SDK.

Cenário 1 – SDK do C da Internet das Coisas do Azure (para Linux e Windows)

A partir de 2015, o SDK do C da Internet das Coisas do Azure foi o primeiro SDK do Azure criado para conectar dispositivos aos serviços IoT. É uma plataforma estável que foi criada para fornecer os seguintes recursos para conectar dispositivos com a Internet das Coisas do Azure:

  • Serviços Hub IoT
  • Clientes do serviço de provisionamento de dispositivos
  • Três opções de transporte de comunicação (MQTT, AMQP e HTTP), que são criadas e mantidas pela Microsoft
  • Várias opções de pilhas TLS comuns (OpenSSL, Schannel e Bed TLS, de acordo com a plataforma de destino)
  • Soquetes TCP (Win32, Berkeley ou Mbed)

Fornecer transporte de comunicação, TLS e abstração de soquete tem um custo de desempenho. Muitos caminhos exigem chamadas malloc e memcpy entre as várias camadas de abstração. Esse custo de desempenho é pequeno em comparação com uma área de trabalho ou um dispositivo Raspberry Pi. No entanto, em um dispositivo verdadeiramente restrito, o custo se torna uma sobrecarga significativa com a possibilidade de fragmentação de memória. A camada de transporte de comunicação também requer que uma função doWork seja chamada pelo menos a cada 100 milissegundos. Essas chamadas frequentes dificultam a otimização do SDK para dispositivos movidos a bateria. A existência de várias camadas de abstração também dificulta o uso ou a alteração dos clientes em qualquer biblioteca específica.

O cenário 1 é recomendado para dispositivos Windows ou Linux, que normalmente são menos sensíveis ao uso de memória ou consumo de energia. No entanto, dispositivos baseados em Windows e Linux também podem usar o SDK do C Inserido, conforme mostrado no Cenário 2. Outras opções para dispositivos baseados em Windows e Linux incluem os outros SDKs de dispositivo IoT do Azure: SDK do Java, SDK do .NET, SDK do Nó e SDK do Python.

Cenário 2 – SDK do C inserido (para cenários de computador bare-metal e micro controladores)

Em 2020, a Microsoft lançou o SDK do Azure para C Inserido (também conhecido como SDK do C Inserido). Esse SDK foi criado com base nos comentários dos clientes e em uma necessidade crescente de dar suporte a dispositivos de microcontrolador restritos. Normalmente, os microcontroladores restritos têm memória e poder de processamento reduzidos.

O SDK do C Inserido tem as seguintes características principais:

  • Nenhuma alocação de memória dinâmica. Os clientes devem alocar estruturas de dados onde desejarem, como na memória global, em um heap ou em uma pilha. Em seguida, eles devem passar o endereço da estrutura alocada para as funções do SDK para inicializar e executar várias operações.
  • Somente MQTT. O uso de somente MQTT é ideal para dispositivos restritos porque é um protocolo de rede leve e eficiente. Atualmente, há suporte apenas para MQTT v3.1.1.
  • Traga sua própria pilha de rede. O SDK do C Inserido não executa nenhuma operação de E/S. Essa abordagem permite que os clientes selecionem os clientes MQTT, TLS e de Soquete que têm o melhor ajuste para sua plataforma de destino.
  • Conjunto de recursos semelhante ao SDK do C. O SDK do C Inserido fornece recursos semelhantes ao SDK do C da Internet das Coisas do Azure, com as seguintes exceções que o SDK do C Inserido não fornece:
    • Carregar no blob
    • A capacidade de executar como um módulo do IoT Edge
    • Recursos baseados em AMQP, como envio em lote de mensagens de conteúdo e multiplexação de dispositivo
  • Menor volume geral. O SDK do C Inserido, como visto em um exemplo que mostra como se conectar o Hub IoT, pode levar apenas 74 KB de ROM e 8,26 KB de RAM.

O SDK do C Inserido dá suporte a microcontroladores sem sistema operacional, microcontroladores com um sistema operacional em tempo real (como Eclipse ThreadX), Linux e Windows. Os clientes podem implementar camadas de plataforma personalizadas para usar nosso SDK em dispositivos personalizados. O SDK também fornece algumas camadas de plataforma, como Arduino e Swift. A Microsoft incentiva a comunidade a enviar outras camadas de plataforma para aumentar as plataformas com suporte prontas para uso. Wind River VxWorks é um exemplo de uma camada de plataforma enviada pela comunidade.

O SDK do C Inserido adiciona alguns benefícios de programação devido à sua flexibilidade em comparação com o SDK do C da Internet das Coisas do Azure. Em particular, os aplicativos que usam dispositivos restritos se beneficiarão de enormes economias de recursos e maior controle programático. Em comparação, se você usar o Eclipse ThreadX ou o FreeRTOS, poderá ter esses mesmos benefícios junto com outros recursos por implementação do RTOS.

Cenário 3 – Eclipse ThreadX com middleware da Internet das Coisas do Azure (para projetos baseados no Eclipse ThreadX)

O cenário 3 envolve o uso do Eclipse ThreadX e o middleware da Internet das Coisas do Azure. O Eclipse ThreadX é baseado no SDK do C Inserido e adiciona suporte ao MQTT e ao TLS. O middleware do Eclipse ThreadX expõe APIs para o aplicativo que são semelhantes às APIs nativas do Eclipse ThreadX. Essa abordagem simplifica para os desenvolvedores usar as APIs e conectar os dispositivos baseados no Eclipse ThreadX à Internet das Coisas do Azure. O Eclipse ThreadX é uma plataforma eficiente, totalmente integrada e inserida em tempo real que fornece todos os recursos de rede e IoT necessários para sua solução.

Exemplos de vários kits de desenvolvedor populares de ST, NXP, Renesas e Microchip estão disponíveis. Esses exemplos funcionam com o Hub IoT do Azure ou o Azure IoT Central e estão disponíveis como projetos do IAR Workbench ou IDE de semicondutores no GitHub.

Como ele se baseia no SDK do C Inserido, o middleware da Internet das Coisas do Azure para Eclipse ThreadX não é alocado na memória. Os clientes devem alocar estruturas de dados do SDK na memória global, em um heap ou em uma pilha. Depois que os clientes alocam uma estrutura de dados, eles devem passar o endereço da estrutura para as funções do SDK para inicializar e executar várias operações.

Cenário 4 – FreeRTOS com o middleware FreeRTOS (para uso com projetos baseados em FreeRTOS)

O Cenário 4 traz o middleware C inserido para FreeRTOS. O middleware C inserido é criado sobre o SDK do C Inserido e adiciona suporte a MQTT por meio da biblioteca de código aberto coreMQTT. Esse middleware para FreeRTOS opera no nível do MQTT. Ele estabelece a conexão MQTT, assina e cancela assinaturas de tópicos e envia e recebe mensagens. As desconexões são manipuladas pelo cliente por meio de APIs de middleware.

Os clientes controlam a configuração TLS/TCP e a conexão com o ponto de extremidade. Essa abordagem permite flexibilidade entre implementações de software ou hardware de qualquer pilha. Nenhuma tarefa em segundo plano é criada pelo middleware da Internet das Coisas do Azure para FreeRTOS. As mensagens são enviadas e recebidas de forma síncrona.

A implementação principal é fornecida neste repositório GitHub. Exemplos de vários kits de desenvolvedor populares estão disponíveis, incluindo NXP1060, STM32 e ESP32. Os exemplos funcionam com o Hub IoT do Azure, o Azure IoT Central e o Serviço de Provisionamento de Dispositivos do Azure e estão disponíveis neste repositório GitHub.

Como ele se baseia no SDK do C inserido no Azure, o middleware da Internet das Coisas do Azure para FreeRTOS também não tem alocação de memória. Os clientes devem alocar estruturas de dados do SDK na memória global, em um heap ou em uma pilha. Depois que os clientes alocam uma estrutura de dados, eles devem passar o endereço das estruturas alocadas para as funções do SDK para inicializar e executar várias operações.

Cenários de uso técnico do SDK baseado em C

O diagrama a seguir resume as opções técnicas para cada cenário de uso do SDK descrito neste artigo.

Diagrama com detalhes do desenvolvedor para os quatro cenários de uso do SDK C.

Comparação do SDK baseado em C por memória e protocolos

A tabela a seguir compara os quatro cenários de desenvolvimento do SDK do dispositivo com base no uso de protocolo e memória.

  Memória
alocação
Memória
uso
Protocolos
com suporte
Recomendado para
SDK do Azure IoT para C Principalmente Dinâmico Unrestricted. Pode abranger
1 MB ou mais em RAM.
AMQP
HTTP
MQTT v3.1.1
Sistemas baseados em microprocessador
Microsoft Windows
Linux
Apple OS X
SDK do Azure para C inserido Somente estático Restrito por quantidade de
dados que o aplicativo aloca.
MQTT v3.1.1 Microcontroladores
Implementações bare-metal
Implementações baseadas em RTOS
Middleware da Internet das Coisas do Azure para Eclipse ThreadX Somente estático Restritos MQTT v3.1.1 Microcontroladores
Implementações baseadas em RTOS
Middleware da Internet das Coisas do Azure para FreeRTOS Somente estático Restritos MQTT v3.1.1 Microcontroladores
Implementações baseadas em RTOS

Recursos da Internet das Coisas do Azure com suporte para cada SDK

A tabela a seguir compara os quatro cenários de desenvolvimento do SDK do dispositivo com base nos recursos da Internet das Coisas do Azure.

  SDK do Azure IoT para C Azure SDK para
C Inserido
Azure IoT
middleware para
Eclipse ThreadX
Azure IoT
middleware para
FreeRTOS
Autenticação de cliente SAS Sim Sim Sim Yes
Autenticação de cliente x509 Sim Sim Sim Yes
Provisionamento de Dispositivo Sim Sim Sim Yes
Telemetria Sim Sim Sim Yes
Mensagens de nuvem para dispositivo Sim Sim Sim Yes
Métodos diretos Sim Sim Sim Yes
Dispositivo gêmeo Sim Sim Sim Yes
IoT Plug-And-Play Sim Sim Sim Yes
Envio em lote de telemetria
(AMQP, HTTP)
Sim Não Não Não
Carrega no Blob do Azure Sim Não Não Não
Integração automática nos
contêineres hospedados do IoT Edge
Sim Não Não Não

Próximas etapas

Para saber mais sobre o desenvolvimento de dispositivos e os SDKs disponíveis para o Azure IoT, confira a tabela a seguir.