Scenari di utilizzo di C SDK C e Embedded C SDK

Microsoft offre SDK e middleware per dispositivi IoT di Azure per scenari di dispositivi incorporati e vincolati. Questo articolo aiuta gli sviluppatori di dispositivi a decidere quale usare per l'applicazione.

Il diagramma seguente illustra quattro scenari comuni in cui i clienti connettono i dispositivi ad Azure IoT, usando un SDK basato su C (C99). Il resto di questo articolo fornisce altri dettagli su ogni scenario.

Diagramma degli scenari SDK comuni.

Scenario 1: Azure IoT C SDK (per Linux e Windows)

A partire dal 2015, Azure IoT C SDK è stato il primo SDK di Azure creato per connettere i dispositivi ai servizi IoT. Si tratta di una piattaforma stabile creata per fornire le funzionalità seguenti per la connessione dei dispositivi ad Azure IoT:

  • servizi hub IoT
  • Client del servizio Device Provisioning
  • Tre opzioni di trasporto di comunicazione (MQTT, AMQP e HTTP), create e gestite da Microsoft
  • Più scelte di stack TLS comuni (OpenSSL, Schannel e Bed TLS in base alla piattaforma di destinazione)
  • Socket TCP (Win32, Berkeley o Mbed)

La fornitura di trasporto di comunicazione, l'astrazione TLS e socket ha un costo delle prestazioni. Molti percorsi richiedono e memcpy chiamano malloc tra i vari livelli di astrazione. Questo costo delle prestazioni è ridotto rispetto a un dispositivo Desktop o Raspberry Pi. Tuttavia, in un dispositivo veramente vincolato, il costo diventa un sovraccarico significativo con la possibilità di frammentazione della memoria. Il livello di trasporto delle comunicazioni richiede anche una doWork funzione da chiamare almeno ogni 100 millisecondi. Queste chiamate frequenti rendono più difficile ottimizzare l'SDK per i dispositivi a batteria. L'esistenza di più livelli di astrazione rende difficile anche ai clienti usare o modificare qualsiasi libreria specifica.

Lo scenario 1 è consigliato per i dispositivi Windows o Linux, che in genere sono meno sensibili all'utilizzo della memoria o al consumo energetico. Tuttavia, i dispositivi basati su Windows e Linux possono anche usare Embedded C SDK, come illustrato nello scenario 2. Altre opzioni per i dispositivi windows e basati su Linux includono gli altri SDK per dispositivi Azure IoT: Java SDK, .NET SDK, Node SDK e Python SDK.

Scenario 2 : Embedded C SDK (per scenari Bare Metal e micro-controller)

Nel 2020 Microsoft ha rilasciato Azure SDK per Embedded C (noto anche come Embedded C SDK). Questo SDK è stato creato in base al feedback dei clienti e a una crescente necessità di supportare dispositivi micro-controller vincolati.This SDK was built based on customers feedback and a growing need to support constrained micro-controller devices. In genere, i micro controller vincolati hanno una potenza di elaborazione e memoria ridotta.

Embedded C SDK presenta le caratteristiche chiave seguenti:

  • Nessuna allocazione dinamica della memoria. I clienti devono allocare strutture di dati in cui desiderano, ad esempio nella memoria globale, in un heap o in uno stack. Devono quindi passare l'indirizzo della struttura allocata nelle funzioni SDK per inizializzare ed eseguire varie operazioni.
  • Solo MQTT. L'utilizzo solo MQTT è ideale per i dispositivi vincolati perché è un protocollo di rete efficiente e leggero. Attualmente è supportato solo MQTT v3.1.1.
  • Usare uno stack di rete personalizzato. Embedded C SDK non esegue operazioni di I/O. Questo approccio consente ai clienti di selezionare i client MQTT, TLS e Socket più adatti alla piattaforma di destinazione.
  • Set di funzionalità simile a C SDK. Embedded C SDK offre funzionalità simili a quella di Azure IoT C SDK, con le eccezioni seguenti che Embedded C SDK non fornisce:
    • Caricare nel BLOB
    • Possibilità di eseguire come modulo IoT Edge
    • Funzionalità basate su AMQP, ad esempio l'invio in batch di messaggi di contenuto e il multiplexing dei dispositivi
  • Footprint complessivo più piccolo. Embedded C SDK, come illustrato in un esempio che mostra come connettersi a hub IoT, può richiedere fino a 74 KB di ROM e 8,26 KB di RAM.

Embedded C SDK supporta micro-controller senza sistema operativo, micro-controller con un sistema operativo in tempo reale (ad esempio Eclipse ThreadX), Linux e Windows. I clienti possono implementare livelli di piattaforma personalizzati per usare l'SDK nei dispositivi personalizzati. L'SDK fornisce anche alcuni livelli della piattaforma, ad esempio Arduino e Swift. Microsoft incoraggia la community a inviare altri livelli di piattaforma per aumentare le piattaforme supportate predefinite. Wind River VxWorks è un esempio di livello piattaforma inviato dalla community.

Embedded C SDK offre alcuni vantaggi di programmazione grazie alla flessibilità rispetto ad Azure IoT C SDK. In particolare, le applicazioni che usano dispositivi vincolati trarranno vantaggio da enormi risparmi di risorse e un maggiore controllo a livello di codice. In confronto, se si usa Eclipse ThreadX o FreeRTOS, è possibile avere questi stessi vantaggi insieme ad altre funzionalità per ogni implementazione di RTOS.

Scenario 3: Eclipse ThreadX con middleware IoT di Azure (per i progetti basati su Eclipse ThreadX)

Lo scenario 3 prevede l'uso di Eclipse ThreadX e del middleware IoT di Azure. Eclipse ThreadX si basa su Embedded C SDK e aggiunge il supporto MQTT e TLS. Il middleware per Eclipse ThreadX espone le API per l'applicazione simili alle API ThreadX eclipse native. Questo approccio semplifica agli sviluppatori l'uso delle API e la connessione dei dispositivi basati su Eclipse ThreadX ad Azure IoT. Eclipse ThreadX è una piattaforma incorporata completamente integrata, efficiente e in tempo reale, che offre tutte le funzionalità di rete e IoT necessarie per la soluzione.

Sono disponibili esempi per diversi kit di sviluppo popolari di ST, NXP, Renesas e Microprocessor. Questi esempi funzionano con hub IoT di Azure o Azure IoT Central e sono disponibili come progetti IDE IAR Workbench o semiconduttori in GitHub.

Poiché si basa su Embedded C SDK, il middleware IoT di Azure per Eclipse ThreadX non viene allocato in memoria. I clienti devono allocare strutture di dati SDK in memoria globale, un heap o uno stack. Dopo che i clienti allocano una struttura di dati, devono passare l'indirizzo della struttura nelle funzioni SDK per inizializzare ed eseguire varie operazioni.

Scenario 4: FreeRTOS con middleware FreeRTOS (da usare con progetti basati su FreeRTOS)

Lo scenario 4 introduce il middleware C incorporato in FreeRTOS. Il middleware C incorporato si basa su Embedded C SDK e aggiunge il supporto MQTT tramite la libreria coreMQTT open source. Questo middleware per FreeRTOS opera a livello MQTT. Stabilisce la connessione MQTT, sottoscrive e annulla la sottoscrizione agli argomenti e invia e riceve messaggi. Le disconnessioni vengono gestite dal cliente tramite API middleware.

I clienti controllano la configurazione e la connessione TLS/TCP all'endpoint. Questo approccio consente la flessibilità tra implementazioni software o hardware di uno stack. Nessuna attività in background viene creata dal middleware IoT di Azure per FreeRTOS. I messaggi vengono inviati e ricevuti in modo sincrono.

L'implementazione principale viene fornita in questo repository GitHub. Sono disponibili esempi per diversi kit di sviluppo più diffusi, tra cui il NXP1060, STM32 ed ESP32. Gli esempi funzionano con hub IoT di Azure, Azure IoT Central e il servizio Device Provisioning di Azure e sono disponibili in questo repository GitHub.

Poiché si basa su Azure Embedded C SDK, il middleware IoT di Azure per FreeRTOS è anche l'allocazione non in memoria. I clienti devono allocare strutture di dati SDK in memoria globale, un heap o uno stack. Dopo che i clienti allocano una struttura di dati, devono passare l'indirizzo delle strutture allocate nelle funzioni SDK per inizializzare ed eseguire varie operazioni.

Scenari di utilizzo tecnico dell'SDK basati su C

Il diagramma seguente riepiloga le opzioni tecniche per ogni scenario di utilizzo dell'SDK descritto in questo articolo.

Diagramma con i dettagli dello sviluppatore per i quattro scenari di utilizzo di C SDK.

Confronto dell'SDK basato su C per memoria e protocolli

La tabella seguente confronta i quattro scenari di sviluppo di SDK per dispositivi in base all'utilizzo della memoria e del protocollo.

  Memoria
Allocazione
Memoria
Utilizzo
Protocolli
Supportati
Consigliato per
Azure IoT C SDK Principalmente dinamico Unrestricted. Può estendersi
fino a 1 MB o più di RAM.
AMQP
HTTP
MQTT v3.1.1
Sistemi basati su microprocessore
Microsoft Windows
Linux
Apple OS X
Azure SDK per Embedded C Solo statico Limitato in base alla quantità di
l'applicazione dati alloca.
MQTT v3.1.1 Micro-controller
Implementazioni bare metal
Implementazioni basate su RTOS
Middleware di Azure IoT per Eclipse ThreadX Solo statico Limitata MQTT v3.1.1 Micro-controller
Implementazioni basate su RTOS
Middleware IoT di Azure per FreeRTOS Solo statico Limitata MQTT v3.1.1 Micro-controller
Implementazioni basate su RTOS

Funzionalità di Azure IoT supportate da ogni SDK

La tabella seguente confronta i quattro scenari di sviluppo di SDK per dispositivi in base al supporto per le funzionalità di Azure IoT.

  Azure IoT C SDK Azure SDK per
C incorporato
Azure IoT
middleware per
Eclipse ThreadX
Azure IoT
middleware per
FreeRTOS
Autenticazione client di firma di accesso condiviso
Autenticazione client x509
Provisioning dei dispositivi
Telemetria
Messaggi da cloud a dispositivo
Metodi diretti
Dispositivo gemello
IoT Plug-And-Play
Invio in batch di dati di telemetria
(AMQP, HTTP)
No No No
Caricamenti nel BLOB di Azure No No No
Integrazione automatica in
Contenitori ospitati in IoT Edge
No No No

Passaggi successivi

Per altre informazioni sullo sviluppo di dispositivi e sugli SDK disponibili per Azure IoT, vedere la tabella seguente.