Dela via


Användningsscenarier för C SDK och Inbäddad C SDK

Microsoft tillhandahåller Azure IoT-enhets-SDK:er och mellanprogram för inbäddade och begränsade enhetsscenarier. Den här artikeln hjälper enhetsutvecklare att bestämma vilken som ska användas för ditt program.

Följande diagram visar fyra vanliga scenarier där kunder ansluter enheter till Azure IoT med hjälp av en C-baserad (C99) SDK. Resten av den här artikeln innehåller mer information om varje scenario.

Diagram över vanliga SDK-scenarier.

Scenario 1 – Azure IoT C SDK (för Linux och Windows)

Från och med 2015 var Azure IoT C SDK det första Azure SDK som skapades för att ansluta enheter till IoT-tjänster. Det är en stabil plattform som har skapats för att tillhandahålla följande funktioner för att ansluta enheter till Azure IoT:

  • IoT Hub-tjänster
  • Enhetsetableringstjänstklienter
  • Tre alternativ för kommunikationstransport (MQTT, AMQP och HTTP), som skapas och underhålls av Microsoft
  • Flera val av vanliga TLS-staplar (OpenSSL, Schannel och Bed TLS enligt målplattformen)
  • TCP-socketar (Win32, Berkeley eller Mbed)

Att tillhandahålla kommunikationstransport, TLS- och socketabstraktion har en prestandakostnad. Många sökvägar kräver malloc och memcpy anropar mellan de olika abstraktionsskikten. Den här prestandakostnaden är liten jämfört med ett skrivbord eller en Raspberry Pi-enhet. Men på en verkligt begränsad enhet blir kostnaden betydande omkostnader med möjlighet till minnesfragmentering. Kommunikationstransportlagret kräver också att en doWork funktion anropas minst var 100:e millisekunder. Dessa frekventa anrop gör det svårare att optimera SDK för batteridrivna enheter. Förekomsten av flera abstraktionslager gör det också svårt för kunder att använda eller ändra till ett visst bibliotek.

Scenario 1 rekommenderas för Windows- eller Linux-enheter, som normalt är mindre känsliga för minnesanvändning eller strömförbrukning. Windows- och Linux-baserade enheter kan dock också använda Embedded C SDK enligt scenario 2. Andra alternativ för Windows- och Linux-baserade enheter är de andra SDK:erna för Azure IoT-enheter: Java SDK, .NET SDK, Node SDK och Python SDK.

Scenario 2 – Inbäddad C SDK (för bare metal-scenarier och mikrostyrenheter)

År 2020 släppte Microsoft Azure SDK för Embedded C (även kallat Embedded C SDK). Denna SDK byggdes på kundernas feedback och ett växande behov av att stödja begränsade mikrostyrenhetsenheter. Vanligtvis har begränsade mikrostyrenheter mindre minne och processorkraft.

Embedded C SDK har följande viktiga egenskaper:

  • Ingen dynamisk minnesallokering. Kunder måste allokera datastrukturer där de önskar, till exempel i globalt minne, en heap eller en stack. Sedan måste de skicka adressen till den allokerade strukturen till SDK-funktioner för att initiera och utföra olika åtgärder.
  • Endast MQTT. Endast MQTT-användning är perfekt för begränsade enheter eftersom det är ett effektivt, lätt nätverksprotokoll. För närvarande stöds endast MQTT v3.1.1.
  • Ta med din egen nätverksstack. Embedded C SDK utför inga I/O-åtgärder. Med den här metoden kan kunderna välja de MQTT-, TLS- och Socket-klienter som passar bäst för målplattformen.
  • Liknande funktionsuppsättning som C SDK. Embedded C SDK innehåller liknande funktioner som Azure IoT C SDK, med följande undantag som Embedded C SDK inte tillhandahåller:
    • Ladda upp till blob
    • Möjligheten att köra som en IoT Edge-modul
    • AMQP-baserade funktioner som batchbearbetning av innehållsmeddelanden och enhetsmultering
  • Mindre övergripande fotavtryck. Embedded C SDK, som du ser i ett exempel som visar hur du ansluter till IoT Hub, kan ta så lite som 74 KB ROM och 8,26 KB RAM-minne.

Embedded C SDK stöder mikrostyrenheter utan operativsystem, mikrostyrenheter med ett realtidsoperativsystem (som Eclipse ThreadX), Linux och Windows. Kunder kan implementera anpassade plattformslager för att använda SDK på anpassade enheter. SDK:t innehåller även vissa plattformslager som Arduino och Swift. Microsoft uppmuntrar communityn att skicka in andra plattformslager för att öka de färdiga plattformar som stöds. Wind River VxWorks är ett exempel på ett plattformslager som skickas av communityn.

Embedded C SDK lägger till vissa programmeringsfördelar på grund av dess flexibilitet jämfört med Azure IoT C SDK. I synnerhet kommer program som använder begränsade enheter att dra nytta av enorma resursbesparingar och större programmatisk kontroll. Om du använder Eclipse ThreadX eller FreeRTOS kan du i jämförelse ha samma fördelar tillsammans med andra funktioner per RTOS-implementering.

Scenario 3 – Eclipse ThreadX med Azure IoT-mellanprogram (för Eclipse ThreadX-baserade projekt)

Scenario 3 omfattar användning av Eclipse ThreadX och Azure IoT-mellanprogrammet. Eclipse ThreadX bygger på Embedded C SDK och lägger till MQTT- och TLS-stöd. Mellanprogrammet för Eclipse ThreadX exponerar API:er för programmet som liknar de inbyggda Eclipse ThreadX-API:erna. Den här metoden gör det enklare för utvecklare att använda API:erna och ansluta sina Eclipse ThreadX-baserade enheter till Azure IoT. Eclipse ThreadX är en helt integrerad, effektiv inbäddad plattform i realtid som tillhandahåller alla nätverks- och IoT-funktioner som du behöver för din lösning.

Exempel för flera populära utvecklarpaket från ST, NXP, Renesas och Microchip finns tillgängliga. De här exemplen fungerar med Azure IoT Hub eller Azure IoT Central och är tillgängliga som IAR Workbench- eller halvledar-IDE-projekt på GitHub.

Eftersom den baseras på Embedded C SDK är Azure IoT-mellanprogrammet för Eclipse ThreadX inte minnesallokering. Kunder måste allokera SDK-datastrukturer i globalt minne, en heap eller en stack. När kunderna har allokerat en datastruktur måste de skicka strukturens adress till SDK-funktionerna för att initiera och utföra olika åtgärder.

Scenario 4 – FreeRTOS med FreeRTOS-mellanprogram (för användning med FreeRTOS-baserade projekt)

Scenario 4 tar det inbäddade C-mellanprogrammet till FreeRTOS. Det inbäddade C-mellanprogrammet bygger på Embedded C SDK och lägger till MQTT-stöd via coreMQTT-biblioteket med öppen källkod. Det här mellanprogrammet för FreeRTOS fungerar på MQTT-nivå. Den upprättar MQTT-anslutningen, prenumererar på och avbryter prenumerationer från ämnen och skickar och tar emot meddelanden. Frånkopplingar hanteras av kunden via mellanprogram-API:er.

Kunder styr TLS/TCP-konfigurationen och anslutningen till slutpunkten. Den här metoden ger flexibilitet mellan programvaru- eller maskinvaruimplementeringar av endera stacken. Inga bakgrundsuppgifter skapas av Azure IoT-mellanprogrammet för FreeRTOS. Meddelanden skickas och tas emot synkront.

Kärnimplementeringen tillhandahålls på den här GitHub-lagringsplatsen. Exempel för flera populära utvecklarpaket finns tillgängliga, inklusive NXP1060, STM32 och ESP32. Exemplen fungerar med Azure IoT Hub, Azure IoT Central och Azure Device Provisioning Service och är tillgängliga på den här GitHub-lagringsplatsen.

Eftersom den baseras på Azure Embedded C SDK är Azure IoT-mellanprogrammet för FreeRTOS även icke-minnesallokering. Kunder måste allokera SDK-datastrukturer i globalt minne, en heap eller en stack. När kunderna har allokerat en datastruktur måste de skicka adressen till de allokerade strukturerna till SDK-funktionerna för att initiera och utföra olika åtgärder.

Tekniska användningsscenarier för C-baserad SDK

Följande diagram sammanfattar tekniska alternativ för varje SDK-användningsscenario som beskrivs i den här artikeln.

Diagram med utvecklarinformation för de fyra C SDK-användningsscenarierna.

C-baserad SDK-jämförelse med minne och protokoll

I följande tabell jämförs de fyra scenarierna för enhets-SDK-utveckling baserat på minnes- och protokollanvändning.

  Minne
tilldelning
Minne
användning
Protokoll
stödd
Rekommenderas för
Azure IoT C SDK Mestadels dynamisk Obegränsad. Kan sträcka sig över
till 1 MB eller mer i RAM-minne.
AMQP
HTTP
MQTT v3.1.1
Mikroprocessorbaserade system
Microsoft Windows
Linux
Apple OS X
Azure SDK för Embedded C Endast statisk Begränsas av mängden
allokerar dataprogram.
MQTT v3.1.1 Mikrostyrenheter
Implementeringar utan operativsystem
RTOS-baserade implementeringar
Azure IoT Middleware för Eclipse ThreadX Endast statisk Begränsad MQTT v3.1.1 Mikrostyrenheter
RTOS-baserade implementeringar
Azure IoT Middleware för FreeRTOS Endast statisk Begränsad MQTT v3.1.1 Mikrostyrenheter
RTOS-baserade implementeringar

Azure IoT-funktioner som stöds av varje SDK

I följande tabell jämförs de fyra scenarierna för enhets-SDK-utveckling baserat på stöd för Azure IoT-funktioner.

  Azure IoT C SDK Azure SDK för
Inbäddad C
Azure IoT
mellanprogram för
Eclipse ThreadX
Azure IoT
mellanprogram för
FreeRTOS
SAS-klientautentisering Ja Ja Ja Ja
x509-klientautentisering Ja Ja Ja Ja
Enhetsetablering Ja Ja Ja Ja
Telemetri Ja Ja Ja Ja
Meddelanden från moln till enhet Ja Ja Ja Ja
Direktmetoder Ja Ja Ja Ja
Enhetstvilling Ja Ja Ja Ja
IoT Plug-And-Play Ja Ja Ja Ja
Batchbearbetning av telemetri
(AMQP, HTTP)
Ja Nej Nej Nej
Laddar upp till Azure Blob Ja Nej Nej Nej
Automatisk integrering i
IoT Edge-värdbaserade containrar
Ja Nej Nej Nej

Nästa steg

Mer information om enhetsutveckling och tillgängliga SDK:er för Azure IoT finns i följande tabell.