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

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

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

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

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

Начиная с 2015 года пакет SDK Для Интернета вещей Azure был первым пакетом SDK Azure для подключения устройств к службам Интернета вещей. Это стабильная платформа, созданная для предоставления следующих возможностей для подключения устройств к 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: пакет SDK для Java, пакет SDK для .NET, пакет SDK для узлов и пакет SDK для Python.

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

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

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

  • Не выделяется динамическая память. Клиенты должны выделять структуры данных, в которых они хотят, например в глобальной памяти, куче или стеке. Затем они должны передать адрес выделенной структуры в функции SDK для инициализации и выполнения различных операций.
  • Только MQTT. Использование только MQTT идеально подходит для ограниченных устройств, так как это эффективный упрощенный сетевой протокол. В настоящее время поддерживается только MQTT версии 3.1.1.
  • Создание собственного сетевого стека. Внедренный пакет SDK для C не выполняет операции ввода-вывода. Этот подход позволяет клиентам выбирать клиенты MQTT, TLS и Socket, которые лучше всего подходят для целевой платформы.
  • Аналогичная функция, заданная как пакет SDK для C. Пакет SDK embedded C предоставляет аналогичные функции, как пакет SDK Для Azure IoT C, при этом следующие исключения не предоставляются в пакете SDK Embedded C:
    • Отправка в большой двоичный объект
    • Возможность запуска в качестве модуля 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 (для проектов на основе 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 для 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 В основном динамическая Unrestricted. Может охватывать
до 1 МБ или более в ОЗУ.
AMQP
HTTP
MQTT версии 3.1.1
Системы на основе микропроцессора
Microsoft Windows
Linux
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)
Да No No No
Отправка в BLOB-объект Azure Да No No No
Автоматическая интеграция в
Размещенные контейнеры IoT Edge
Да No No No

Следующие шаги

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