C SDK 및 포함된 C SDK 사용 시나리오
Microsoft는 포함된 디바이스 및 제한된 디바이스 시나리오를 위한 Azure IoT 디바이스 SDK 및 미들웨어를 제공합니다. 이 문서는 디바이스 개발자가 애플리케이션에 사용할 디바이스를 결정하는 데 도움이 됩니다.
다음 다이어그램에서는 고객이 C 기반(C99) SDK를 사용하여 디바이스를 Azure IoT에 연결하는 네 가지 일반적인 시나리오를 보여 줍니다. 이 문서의 나머지 부분에는 각 시나리오에 대한 자세한 내용이 제공됩니다.
시나리오 1 – Azure IoT C SDK(Linux 및 Windows용)
2015년에 도입된 Azure IoT C SDK는 디바이스를 IoT 서비스에 연결하기 위해 제작된 최초의 Azure SDK였습니다. 디바이스를 Azure IoT에 연결하는 데 필요한 다음 기능을 제공하도록 빌드된 안정적인 플랫폼입니다.
- IoT Hub 서비스
- Device Provisioning Service 클라이언트
- Microsoft에서 만들고 유지 관리하는 세 가지 통신 전송 옵션(MQTT, AMQP 및 HTTP)
- 일반적인 TLS 스택의 여러 옵션(대상 플랫폼에 따라 OpenSSL, Schannel 및 Bed TLS)
- TCP 소켓(Win32, Berkeley 또는 Mbed)
통신 전송, TLS 및 소켓 추상화를 제공하려면 성능 비용이 발생합니다. 많은 경로에는 다양한 추상화 계층 간 malloc
및 memcpy
호출이 필요합니다. 이 성능 비용은 데스크톱 또는 Raspberry Pi 디바이스보다 적습니다. 그러나 실제로 제한된 디바이스에서는 메모리 조각화 가능성과 함께 비용이 상당한 부담이 됩니다. 또한 통신 전송 계층에서는 최소 100밀리초마다 doWork
함수를 호출해야 합니다. 이러한 빈번한 호출로 인해 배터리 구동 디바이스에 대해 SDK를 최적화하기가 더 어렵습니다. 또한 여러 추상화 계층이 있으면 고객이 특정 라이브러리를 사용하거나 변경하기가 어렵습니다.
시나리오 1은 일반적으로 메모리 사용량 또는 전력 소비에 덜 민감한 Windows 또는 Linux 디바이스에 권장됩니다. 그러나 Windows 및 Linux 기반 디바이스는 시나리오 2와 같이 Embedded C SDK를 사용할 수도 있습니다. Windows 및 Linux 기반 디바이스에 대한 다른 옵션으로는 Java SDK, .NET SDK, Node SDK 및 Python SDK와 같은 다른 Azure IoT 디바이스 SDK가 있습니다.
시나리오 2 – Embedded C SDK(운영 체제 미설치 시나리오 및 마이크로 컨트롤러용)
2020년에 Microsoft Embedded C용 Azure SDK(Embedded C SDK라고도 함)를 출시했습니다. 이 SDK는 고객의 피드백과 제한된 마이크로 컨트롤러 디바이스를 지원해야 할 필요성이 증가함에 따라 빌드되었습니다. 일반적으로 제한된 마이크로 컨트롤러는 메모리 및 처리 능력을 감소시켰습니다.
Embedded C SDK에는 다음과 같은 주요 특성이 있습니다.
- 동적 메모리 할당 없음. 고객은 전역 메모리, 힙 또는 스택과 같은 원하는 데이터 구조를 할당해야 합니다. 그런 다음, 할당된 구조체의 주소를 SDK 함수에 전달하여 초기화하고 다양한 작업을 수행해야 합니다.
- MQTT 전용. MQTT 전용은 효율적이고 가벼운 네트워크 프로토콜이므로 제한된 디바이스에 이상적입니다. 현재 MQTT v3.1.1만 지원됩니다.
- 사용자 네트워크 스택 필요. Embedded C SDK는 I/O 작업을 수행하지 않습니다. 이 접근 방식은 고객이 대상 플랫폼에 가장 적합한 MQTT, TLS 및 소켓 클라이언트를 선택하게 해줍니다.
- C SDK와 유사한 기능 집합. Embedded C SDK는 Azure IoT C SDK와 유사한 기능을 제공하며, Embedded C SDK에서 제공하지 않는 예외는 다음과 같습니다.
- Blob에 업로드
- IoT Edge 모듈로 실행하는 기능
- 콘텐츠 메시지 일괄 처리 및 디바이스 멀티플렉싱과 같은 AMQP 기반 기능
- 전체 메모리 공간이 더 작음. IoT Hub에 연결하는 방법을 보여 주는 샘플에서 볼 수 있듯이, Embedded C SDK가 차지하는 메모리는 ROM 74KB, RAM 8.26KB 정도로 매우 적습니다.
Embedded C SDK는 운영 체제가 없는 마이크로 컨트롤러와 실시간 운영 체제(예: Eclipse ThreadX), Linux, Windows가 있는 마이크로 컨트롤러를 지원합니다. 고객은 사용자 지정 플랫폼 계층을 구현하여 사용자 지정 디바이스에서 SDK를 사용할 수 있습니다. 또한 SDK는 Arduino 및 Swift와 같은 일부 플랫폼 계층을 제공합니다. Microsoft는 기본적으로 지원되는 플랫폼을 늘리기 위해 커뮤니티에서 다른 플랫폼 계층을 제출하도록 장려합니다. Wind River VxWorks는 커뮤니티에서 제출한 플랫폼 계층의 예입니다.
Embedded C SDK는 유연하기 때문에 Azure IoT C SDK보다 프로그래밍 이점이 몇 개 더 많습니다. 특히 제한된 디바이스를 사용하는 애플리케이션은 막대한 리소스 절감과 더 세부적인 프로그래매틱 제어의 이점을 제공합니다. 반면 Eclipse ThreadX 또는 FreeRTOS를 사용하는 경우 RTOS 구현별로 다른 기능과 함께 동일한 이점을 제공합니다.
시나리오 3 - Azure IoT 미들웨어를 사용하는 Eclipse ThreadX(Eclipse ThreadX 기반 프로젝트용)
시나리오 3에서는 Eclipse ThreadX 및 Azure IoT 미들웨어를 사용합니다. Eclipse ThreadX는 Embedded C SDK를 기반으로 하며 MQTT 및 TLS 지원을 추가합니다. Eclipse ThreadX용 미들웨어는 원시 Eclipse ThreadX API와 유사한 애플리케이션용 API를 노출합니다. 이 접근 방식은 개발자가 더 간편하게 API를 사용하고 Eclipse ThreadX 기반 디바이스를 Azure IoT에 연결할 수 있게 해줍니다. Eclipse ThreadX는 완전히 통합되고 효율적인 실시간 포함된 플랫폼으로, 솔루션에 필요한 모든 네트워킹 및 IoT 기능을 제공합니다.
ST, NXP, Renesas 및 Microchip의 여러 주요 개발자 키트에 대한 샘플을 사용할 수 있습니다. 이러한 샘플은 Azure IoT Hub 또는 Azure IoT Central에서 작동하며, GitHub에서 IAR Workbench 또는 반도체 IDE 프로젝트로 제공됩니다.
Embedded C SDK를 기반으로 하므로 Eclipse ThreadX용 Azure IoT 미들웨어는 메모리를 할당하지 않습니다. 고객이 전역 메모리, 힙 또는 스택에 SDK 데이터 구조를 할당해야 합니다. 고객이 데이터 구조를 할당한 후 다양한 작업을 초기화하고 수행하려면 구조체의 주소를 SDK 함수에 전달해야 합니다.
시나리오 4 – FreeRTOS 미들웨어가 있는 FreeRTOS(FreeRTOS 기반 프로젝트에서 사용)
시나리오 4는 FreeRTOS에 Embedded C 미들웨어를 제공합니다. Embedded C 미들웨어는 Embedded C SDK를 기반으로 빌드되며, 오픈 소스 coreMQTT 라이브러리를 통해 MQTT 지원을 추가합니다. 이 FreeRTOS용 미들웨어는 MQTT 수준에서 작동합니다. MQTT 연결을 설정하고, 토픽에서 구독하고 구독을 취소하고, 메시지를 보내고 받습니다. 연결 끊김은 고객이 미들웨어 API를 통해 처리합니다.
고객은 TLS/TCP 구성 및 엔드포인트에 대한 연결을 제어합니다. 이 접근 방식은 두 스택의 소프트웨어 또는 하드웨어 구현 간에 유연성을 제공합니다. FreeRTOS용 Azure IoT 미들웨어는 백그라운드 작업을 만들지 않습니다. 메시지는 동기적으로 전송되고 수신됩니다.
핵심 구현은 이 GitHub 리포지토리에 제공됩니다. NXP1060, STM32 및 ESP32를 포함하여 여러 주요 개발자 키트에 대한 샘플을 사용할 수 있습니다. 샘플은 Azure IoT Hub, Azure IoT Central 및 Azure Device Provisioning Service에서 작동하며, 이 GitHub 리포지토리에서 사용할 수 있습니다.
Azure Embedded C SDK를 기반으로 하므로 FreeRTOS용 Azure IoT 미들웨어도 메모리를 할당하지 않습니다. 고객이 전역 메모리, 힙 또는 스택에 SDK 데이터 구조를 할당해야 합니다. 고객이 데이터 구조를 할당한 후 다양한 작업을 초기화하고 수행하려면 할당된 구조체의 주소를 SDK 함수에 전달해야 합니다.
C 기반 SDK 기술 사용 시나리오
다음 다이어그램에는 이 문서에 설명된 각 SDK 사용 시나리오의 기술 옵션이 요약되어 있습니다.
메모리 및 프로토콜별 C 기반 SDK 비교
다음 표는 메모리 및 프로토콜 사용량을 기준으로 4가지 디바이스 SDK 개발 시나리오를 비교한 것입니다.
메모리 할당 |
메모리 사용량 |
프로토콜 지원 |
권장 대상 | |
---|---|---|---|---|
Azure IoT C SDK | 대부분 동적 | Unrestricted. RAM 1MB 이상으로 범위를 확장할 수 있습니다. |
AMQP HTTP MQTT v3.1.1 |
마이크로프로세서 기반 시스템 Microsoft Windows Linux Apple OS X |
Embedded C용 Azure SDK | 정적 방식만 | 데이터 애플리케이션이 할당하는 양에 따라 제한됩니다. |
MQTT v3.1.1 | 마이크로 컨트롤러 운영 체제 미설치 구현 RTOS 기반 구현 |
Eclipse ThreadX용 Azure IoT 미들웨어 | 정적 방식만 | Restricted | MQTT v3.1.1 | 마이크로 컨트롤러 RTOS 기반 구현 |
FreeRTOS용 Azure IoT 미들웨어 | 정적 방식만 | Restricted | MQTT v3.1.1 | 마이크로 컨트롤러 RTOS 기반 구현 |
각 SDK에서 지원하는 Azure IoT 기능
다음 표는 Azure IoT 기능 지원을 기준으로 4가지 디바이스 SDK 개발 시나리오를 비교한 것입니다.
Azure IoT C SDK | Azure SDK 포함된 C |
Azure IoT FreeRTOS Eclipse ThreadX |
Azure IoT FreeRTOS 미들웨어 |
|
---|---|---|---|---|
SAS 클라이언트 인증 | 예 | 네 | 네 | 예 |
x509 클라이언트 인증 | 예 | 네 | 네 | 예 |
디바이스 프로비전 | 예 | 네 | 네 | 예 |
원격 | 예 | 네 | 네 | 예 |
클라우드-디바이스 메시지 | 예 | 네 | 네 | 예 |
직접 메서드 | 예 | 네 | 네 | 예 |
디바이스 쌍 | 예 | 네 | 네 | 예 |
IoT 플러그 앤 플레이 | 예 | 네 | 네 | 예 |
원격 분석 일괄 처리 (AMQP, HTTP) |
예 | 없음 | 없음 | 아니요 |
Azure Blob에 업로드 | 예 | 없음 | 없음 | 아니요 |
IoT Edge 호스트 컨테이너의 자동 통합 |
예 | 없음 | 없음 | 아니요 |
다음 단계
디바이스 개발 및 Azure IoT에 사용 가능한 SDK에 대한 자세한 내용은 다음 표를 참조하세요.