title | description | author | ms.author | ms.service | ms.topic | ms.date | ms.custom |
---|---|---|---|---|---|---|---|
Overview of Azure IoT device SDK options |
Learn which Azure IoT device SDK to use based on your development role and tasks. |
philmea |
philmea |
iot-develop |
overview |
02/11/2021 |
contperf-fy22q2 |
The Azure IoT device SDKs include a set of device client libraries, samples, and documentation. The device SDKs simplify the process of programmatically connecting devices to Azure IoT. The SDKs are available in various programming languages for and with support for multiple RTOSs for embedded devices.
The advantages of using an Azure IoT Device SDK over building a custom connection layer are outlined below:
Custom connection layer | Azure IoT Device SDKs | |
---|---|---|
Support | Need to support and document your solution | Access to Microsoft support (GitHub, Microsoft Q&A, Microsoft Docs, Customer Support teams) |
New Features | Need to manually add new Azure features | Can immediately take advantage of new features added |
Investment | Invest hundreds of hours of embedded development to design, build, test, and maintain a custom version | Can take advantage of free, open-source tools. The only cost associated with the SDKs is the learning curve. |
The main consideration in choosing an SDK is the device's own hardware. General computing devices like PCs and mobile phones, contain microprocessor units (MPUs) and have relatively greater compute and memory resources. A specialized class of devices, which are used as sensors or other special-purpose roles, contain microcontroller units (MCUs) and have relatively limited compute and memory resources. These resource-constrained devices require specialized development tools and SDKs. The following table summarizes the different classes of devices, and which SDKs to use for device development.
Device class | Description | Examples | SDKs |
---|---|---|---|
Embedded devices | Special-purpose MCU-based devices with compute and memory limitations | Sensors | Embedded device SDKs |
Other | Includes general purpose MPU-based devices with larger compute and memory resources | PC, smartphone, Raspberry Pi | Device SDKs |
Note
For more information on different device categories so you can choose the best SDK for your device, see Azure IoT Device Types.
These SDKs can run on a general MPU-based computing device such as a PC, tablet, smartphone, or Raspberry Pi. The SDKs support development in C and in modern managed languages including in C#, Node.JS, Python, and Java.
The SDKs are available in multiple languages providing the flexibility to choose which best suits your team and scenario.
Language | Package | Source | Quickstarts | Samples | Reference |
---|---|---|---|---|---|
.NET | NuGet | GitHub | IoT Hub / IoT Central | Samples | Reference |
Python | pip | GitHub | IoT Hub / IoT Central | Samples | Reference |
Node.js | npm | GitHub | IoT Hub / IoT Central | Samples | Reference |
Java | Maven | GitHub | IoT Hub / IoT Central | Samples | Reference |
C | packages | GitHub | IoT Hub / IoT Central | Samples | Reference |
Warning
The C SDK listed above is not suitable for embedded applications due to its memory management and threading model. For embedded devices, refer to the Embedded device SDKs.
These SDKs were designed and created to run on devices with limited compute and memory resources and are implemented using the C language.
The embedded device SDKs are available for multiple operating systems providing the flexibility to choose which best suits your team and scenario.
RTOS | SDK | Source | Samples | Reference |
---|---|---|---|---|
Azure RTOS | Azure RTOS Middleware | GitHub | Quickstarts | Reference |
FreeRTOS | FreeRTOS Middleware | GitHub | Samples | Reference |
Bare Metal | Azure SDK for Embedded C | GitHub | Samples | Reference |
To learn more about using the Azure IoT device SDKs to connect general, MPU-based devices, see the following articles:
To learn more about using the Azure IoT embedded device SDKs to connect resource-constrained, MCU-based devices, see the following article: