Поделиться через


Сценарии использования пакета SDK для C и внедренного пакета C SDK

Корпорация Майкрософт предоставляет пакеты SDK для устройств Интернета вещей Azure и ПО промежуточного слоя для внедренных и ограниченных сценариев устройств. Эта статья помогает разработчикам устройств выбрать, что использовать для вашего приложения.

На следующей схеме показаны четыре распространенных сценария, в которых клиенты подключают устройства к Azure IoT с помощью пакета SDK на основе C (C99). Остальная часть этой статьи содержит дополнительные сведения о каждом сценарии.

Схема распространенных сценариев пакета SDK.

Сценарий 1. Пакет SDK Azure IoT C (для Linux и Windows)

Начиная с 2015 года, Azure IoT C SDK стал первым SDK Azure, созданным для подключения устройств к IoT-сервисам. Это стабильная платформа, созданная для предоставления следующих возможностей для подключения устройств к Azure IoT:

  • Службы Центра Интернета вещей
  • Клиенты службы подготовки устройств
  • Три варианта транспорта связи (MQTT, AMQP и HTTP), которые создаются и поддерживаются корпорацией Майкрософт
  • Несколько вариантов распространенных стеков TLS (OpenSSL, Schannel и Bed TLS в соответствии с целевой платформой)
  • Сокеты TCP (Win32, Berkeley или Mbed)

Предоставление коммуникационного транспорта, абстракции TLS и сокета ведет к затратам на производительность. Для многих путей требуются malloc и memcpy вызовы между различными уровнями абстракции. Эта стоимость производительности невелика по сравнению с настольным компьютером или устройством Raspberry Pi. Тем не менее на действительно ограниченном устройстве накладные расходы становятся значительными с вероятностью фрагментации памяти. Уровень транспорта связи также требует doWork вызов функции по крайней мере каждые 100 миллисекунд. Эти частые вызовы затрудняют оптимизацию пакета SDK для устройств с питанием от батареи. Существование нескольких уровней абстракции также затрудняет использование или изменение любой библиотеки клиентами.

Сценарий 1 рекомендуется использовать для устройств Windows или Linux, которые обычно менее чувствительны к использованию памяти или потреблению энергии. Однако устройства под управлением Windows и Linux также могут использовать внедренный пакет SDK для C, как показано в сценарии 2. Другие варианты устройств под управлением Windows и Linux включают такие пакеты SDK для устройств Интернета вещей Azure, как Java SDK, .NET SDK, Node.js SDK и Python SDK.

Сценарий 2 — встроенный SDK C (для сценариев без операционной системы и микроконтроллеров)

В 2020 году компания Майкрософт выпустила Azure SDK для интегрированного C (также известный как SDK для интегрированного C). Этот пакет SDK был создан на основе отзывов клиентов и растущей необходимости поддерживать ограниченные устройства микро-контроллера. Как правило, ограниченные микро-контроллеры снижают объем памяти и мощность обработки.

Внедренный пакет SDK C имеет следующие ключевые характеристики:

  • Не выделяется динамическая память. Клиенты должны выделять структуры данных, в которых они хотят, например в глобальной памяти, куче или стеке. Затем они должны передать адрес выделенной структуры в функции SDK для инициализации и выполнения различных операций.
  • Только MQTT. Использование только MQTT идеально подходит для ограниченных устройств, так как это эффективный упрощенный сетевой протокол. В настоящее время поддерживается только MQTT версии 3.1.1.
  • Принесите свой собственный сетевой стек. Внедренный пакет SDK для C не выполняет операции ввода-вывода. Этот подход позволяет клиентам выбирать клиенты MQTT, TLS и Socket, которые лучше всего подходят для целевой платформы.
  • Похожий набор функций, как в C SDK. Пакет SDK Embedded C предоставляет аналогичные функции, как пакет SDK для Azure IoT C, за исключением следующих функций, которые не предоставляются в пакете SDK Embedded C:
    • Загрузка в Blob
    • Возможность запуска в качестве модуля IoT Edge
    • Функции на основе AMQP, такие как пакетная обработка сообщений содержимого и мультиплексирование устройств
  • Меньшая общая площадь. Внедренный пакет SDK для C, как показано в примере, где показано, как подключиться к Центру Интернета вещей, может занять не более 74 КБ РОМ и 8,26 КБ ОЗУ.

Встроенный пакет SDK для C поддерживает микро контроллеры без операционной системы, микро-контроллеры с операционной системой в режиме реального времени (например, Eclipse ThreadX), Linux и Windows. Клиенты могут реализовать пользовательские слои платформы для использования пакета SDK на пользовательских устройствах. Пакет SDK также предоставляет некоторые уровни платформы, такие как Arduino и Swift. Корпорация Майкрософт призывает сообщество предоставлять другие слои платформы, чтобы увеличить количество поддерживаемых из коробки платформ. Wind River VxWorks является примером платформенного слоя, отправленного сообществом.

Пакет SDK для Embedded C добавляет некоторые преимущества программирования из-за гибкости по сравнению с пакетом SDK для Azure IoT C. В частности, приложения, использующие ограниченные устройства, будут воспользоваться огромными экономией ресурсов и большим программным контролем. Для сравнения, если вы используете Eclipse ThreadX или FreeRTOS, вы можете иметь те же преимущества вместе с некоторыми функциями, характерными для конкретной реализации ОСРВ.

Сценарий 3. Eclipse ThreadX со средой Azure IoT (для проектов на основе Eclipse ThreadX)

Сценарий 3 включает использование Eclipse ThreadX и ПО промежуточного слоя Интернета вещей Azure. Eclipse ThreadX построен на основе встроенного пакета SDK для C и добавляет поддержку MQTT и TLS. ПО для промежуточного слоя Eclipse ThreadX предоставляет для приложения интерфейсы API, аналогичные собственным API Eclipse ThreadX. Этот подход упрощает использование API-интерфейсов и подключение устройств Eclipse ThreadX к Azure IoT. Eclipse ThreadX — это полностью интегрированная, эффективная, встроенная платформа в режиме реального времени, которая предоставляет все сетевые возможности и функции Интернета вещей, необходимые для вашего решения.

Доступны примеры для нескольких популярных комплектов разработчиков из ST, NXP, Renesas и Microchip. Эти примеры работают с Центром Интернета вещей Azure или Azure IoT Central и доступны как проекты IAR Workbench или полупроводниковой интегрированной среды разработки на сайте GitHub.

Так как оно основано на встроенном пакете SDK для C, посредническое ПО Azure для Eclipse ThreadX не использует выделение памяти. Клиенты должны выделять структуры данных SDK в глобальной памяти, куче или стеке. После выделения структуры данных клиенты должны передать адрес этой структуры в функции SDK для инициализации и выполнения различных операций.

Сценарий 4. FreeRTOS с ПО промежуточного слоя FreeRTOS (для использования с проектами на основе FreeRTOS)

Сценарий 4 добавляет встроенное C-промежуточное ПО в FreeRTOS. Встроенное ПО промежуточного слоя C построено на основе встроенного пакета SDK для C и добавляет поддержку MQTT через библиотеку coreMQTT с открытым исходным кодом. Это ПО промежуточного слоя для FreeRTOS работает на уровне MQTT. Он устанавливает соединение MQTT, подписывается на темы, отменяет подписку и отправляет, и получает сообщения. Отключения обрабатываются клиентом через API промежуточного слоя.

Клиенты управляют конфигурацией TLS/TCP и подключением к конечной точке. Такой подход обеспечивает гибкость между реализациями программного обеспечения или оборудования любого стека. Фоновые задачи не создаются в составе промежуточного ПО Azure IoT для FreeRTOS. Сообщения отправляются и получаются синхронно.

Базовая реализация предоставляется в этом репозитории GitHub. Доступны примеры для нескольких популярных комплектов разработчиков, включая NXP1060, STM32 и ESP32. Примеры работают с Центром Интернета вещей Azure, Azure IoT Central и службой подготовки устройств Azure и доступны в этом репозитории GitHub.

Так как он основан на пакете SDK для Azure Embedded C, ПО промежуточного слоя Azure IoT для FreeRTOS также не выделяет память. Клиенты должны выделять структуры данных SDK в глобальной памяти, куче или стеке. После того как клиенты выделяют структуру данных, они должны передать адрес выделенных структур в функции ПАКЕТА SDK для инициализации и выполнения различных операций.

Сценарии технического использования пакета SDK на основе C

На следующей схеме приведены технические параметры для каждого сценария использования пакета SDK, описанного в этой статье.

Схема с подробными сведениями о разработчике для четырех сценариев использования пакета SDK для C.

Сравнение пакета SDK на основе C по памяти и протоколам

В следующей таблице сравниваются четыре сценария разработки пакета SDK для устройств на основе использования памяти и протокола.

  Память
распределение
Память
употребление
Протоколы
поддерживается
Рекомендуется для
Azure IoT C SDK В основном динамическая Неограниченный. Может охватывать
до 1 МБ или более в ОЗУ.
AMQP
HTTP
MQTT версии 3.1.1
Системы на основе микропроцессора
Microsoft Windows
Линукс
Apple OS X
Пакет SDK Azure для Embedded C Только статические Ограничено количеством
Приложение данных выделяет.
MQTT версии 3.1.1 Микро-контроллеры
Реализации без операционной системы
Реализации на основе ОСРВ
Промежуточная платформа Azure IoT для Eclipse ThreadX Только статические С ограниченным доступом MQTT версии 3.1.1 Микро-контроллеры
Реализации на основе ОСРВ
ПО промежуточного слоя Интернета вещей Azure для FreeRTOS Только статично С ограниченным доступом MQTT версии 3.1.1 Микро-контроллеры
Реализации на основе ОСРВ

Функции Интернета вещей Azure, поддерживаемые каждым пакетом SDK

В следующей таблице сравниваются четыре сценария разработки пакета SDK для устройств на основе поддержки функций Интернета вещей Azure.

  Azure IoT C SDK Пакет SDK Azure для
Встроенный C
Azure IoT
промежуточное ПО для
Eclipse ThreadX
Azure IoT
Промежуточное программное обеспечение для
FreeRTOS
Проверка подлинности клиента SAS Да Да Да Да
Проверка подлинности клиента x509 Да Да Да Да
Подготовка устройств Да Да Да Да
Телеметрия Да Да Да Да
Сообщения из облака на устройство Да Да Да Да
Прямые методы Да Да Да Да
Цифровой двойник устройства Да Да Да Да
IoT Plug-And-Play Да Да Да Да
Пакетная обработка телеметрии
(AMQP, HTTP)
Да нет нет нет
Загрузка в Azure Blob Да нет нет нет
Автоматическая интеграция в
Контейнеры, размещенные на IoT Edge
Да нет нет нет

Дальнейшие действия

Дополнительные сведения о разработке устройств и доступных пакетах SDK для Интернета вещей Azure см. в следующей таблице.