Разработка Qt приложений для BLE систем

BLE популярен, так как подходит для интеллектуальных персональных устройств. Используя возможности фреймворка Qt, разработчики могут проектировать BLE-приложения различной сложности.
Технический директор
Андрей Соловьев
Программное обеспечение для управления и обмена данными между устройствами может быть создано с использованием различных инструментов. В этой статье мы расскажем об использовании Qt для создания приложений для устройств с поддержкой BLE, дадим советы по разработке, расскажем о частых проблемах и методах их разрешения.

Причины популярности BLE

Bluetooth Low Energy, также известный как BLE, Bluetooth LE, Bluetooth Smart, — это вариант беспроводной технологии PAN для передачи данных между устройствами с помощью радиоволн.

Бурный рост рынка подключенной бытовой электроники и выпуск LE Audio приведет в следующие пять лет к увеличению ежегодных поставок Bluetooth LE устройств.

Согласно отчету Bluetooth 2022 Market Update report, к 2026 году ежегодные поставки устройств с поддержкой Bluetooth достигнут 7 миллиардов единиц.
График демонстрирует рост поставок Bluetooth-устройств
Поставки Bluetooth-платформ и периферийных устройств 2017-2026 гг.
Поскольку многие устройства IoT используют небольшие процессоры и датчики, BLE стал наиболее часто используемым протоколом связи (по сравнению с Bluetooth Classic) в приложениях IoT.

BLE лучше всего подходит для приложений с небольшой дальностью передачи и для данных, передаваемых нечасто и в небольших объемах.

При всем разнообразии BLE-устройства имеют общие характеристики:

  • Меньшее энергопотребление по сравнению с Bluetooth-устройствами;
  • Связь осуществляется на короткие расстояния;
  • В приоритете время работы устройства без замены аккумулятора, а не скорость передачи данных;
  • Небольшой размер;
  • Простота взаимодействия с различными мобильными платформами.

Компания КЕДР Solutions неоднократно становилась лидером IoT и BLE разработки в рейтингах исследовательских организаций и агентств.

Если вы ищете аутсорсинговую компанию по разработке аппаратного и программного обеспечения с поддержкой BLE, КЕДР Solutions может предоставить вам полный спектр услуг.

Что нужно знать, приступая к Qt BLE разработке

Архитектура Bluetooth состоит из нескольких блоков.

  • Приложение реализует полезную для конечного пользователя логику работы;
  • Верхние уровни стека протоколов Bluetooth предоставляются узлом сети (хостом).
  • Контроллер Bluetooth взаимодействует с нижними уровнями Bluetooth.

Стек протокола Bluetooth с низким энергопотреблением построен на нескольких уровнях, необходимых для обмена информацией.
Структура стека протоколов Bluetooth Low Energy
Стек протоколов BLE
PHY — физический уровень, который отвечает за фактическую передачу и получение информации по воздуху с помощью радиоволн.

BLE передает данные в безлицензионном диапазоне 2,4 ГГц со скоростью 1 Мбит/с. Информация передается с использованием гауссовой частотной манипуляции (GFSK) посредством дискретных изменений частоты несущего сигнала.

Эта форма модуляции позволяет экономить заряд батареи, так как предполагает использование радио усилителей мощности.

GFSK также предусматривает использование более дешевых и менее точных компонентов передачи, поскольку схема не требует значительной внеканальной фильтрации.

Канальный уровень (LL) — это интерфейс для физического уровня. Он занимается мониторингом состояния RF (радиочастоты) устройства, а также отвечает за формирование точек привязки, включение физического канала и длину пакетов.

LL имеет два типа пакетов: пакеты объявлений (рекламные) и пакеты данных. Рекламный пакет передается по 3 рекламным каналам, а пакет данных по 37 каналам данных.

HCI (Host Controller Interface) обеспечивает связь между хостом и контроллером. HCI реализуется либо через программный API, либо через аппаратный интерфейс (UART, SPI или USB).

Все профили и приложения работают поверх уровней GAP и GATT.

GAP (Generic Access Profile) управляет подключениями и объявлениями.

Устройства могут обмениваться данными двумя способами: в режиме вещания (рекламы или объявлений) и в режиме соединений.

В BLE режиме объявлений периферийные устройства отправляют относительно небольшое количество информации через равные промежутки времени, не имея возможности получить какую-либо информацию в ответ. Так делают маячки в торговых точках и общественных местах.

Любое устройство с поддержкой BLE (смартфон, планшет) может получать информацию от ближайших BLE маячков. На экране смартфона появляются рекламные сообщения от торговых сетей. Этот метод связи не является безопасным, поскольку данные передаются любому приложению, которое знает UUID (универсальный уникальный идентификатор) маячка.

К особенностям этого способа связи также можно отнести малое энергопотребление периферийного устройства. Рекламный пакет рассылается через определенные промежутки времени, в остальное время подключение отсутствует. Таким образом, периферийное устройство не всегда находится в режиме ожидания, достигается значительная экономия заряда батареи.

Маячки BLE используются во многих областях: в рекламных целях, как часть BLE систем позиционирования и отслеживания местоположения, а также в качестве канала передачи данных между другими устройствами и сервером.
BLE режим объявлений с односторонней связью.
BLE-режим вещания (объявлений)
Использование сервисов и характеристик профиля GATT (Generic ATTribute Profile) возможно после установления связи между двумя объектами.

Подключенный режим позволяет двум устройствам общаться и в частном порядке обмениваться гораздо большим объемом данных. Два объекта могут обмениваться информацией в обоих направлениях.
BLE режим подключений с двусторонней связью
BLE-режим подключений
Протокол GAP определяет роли устройств во взаимодействии как центральные (клиенты) или периферийные устройства.

Этот метод используется, когда фитнес-трекер или смарт-часы связываются со смартфоном. После установления соединения начинается обмен данными.

К периферии чаще всего относятся маячки, смарт-часы, датчики, сенсоры, пульсометры, фитнес-трекеры и т. д.

Центральные устройства, как правило, обладают большей мощностью и памятью и могут обрабатывать информацию от нескольких устройств, чтобы предоставить ее пользователю в обобщенном виде. Обычно это планшеты, смартфоны и компьютеры.

GATT определяет процедуры и форматы передачи данных по BLE.

Все стандартные профили BLE основаны на GATT с унифицированной структурой, что обеспечивает взаимодействие между устройствами разных производителей.

GATT основан на атрибутивном протоколе, в котором данные организованы в сервисы.

Сервис (служба) — это определенная аппаратная функция Bluetooth устройства. Например, значения датчиков, связанные с температурой, или индикаторы батареи сгруппированы в отдельные сервисы.
Общая иерархия данных профиля GATT
Иерархия профилей GATT
Сервис имеет одну или несколько характеристик. Количество сервисов и характеристик определяется задачами устройства.

Характеристика отражает внутреннее состояние BLE-устройства. Она может иметь один или несколько дескрипторов.

Каждая служба, характеристика и дескриптор определяются универсальным уникальным идентификатором (UUID). Данные, относящиеся к услугам и характеристикам, хранят атрибуты.

Характеристики предоставляют разрешения центральному устройству взаимодействовать с ними, а именно читать, писать, уведомлять или указывать.

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

Эти разрешения не определяются протоколом атрибутов (ATT) и не могут быть прочитаны через него. Они определяются на верхнем уровне (GATT или прикладном уровне).

Разработчик приложения в основном взаимодействует с API, предоставляемым операционной системой, или с SDK, что позволяет абстрагироваться от многих вопросов, связанных с конфигурацией BLE.

Нативные и кроссплатформенные BLE приложения

Приложения, предназначенные для связи с периферийными BLE устройствами, могут быть

  • мобильными,
  • десктопными,
  • встроенными.

По принадлежности к ОС приложения для BLE-устройств делятся на нативные и кроссплатформенные.

Основные мобильные и десктопные платформы, такие как iOS, Android, Linux, macOS и Windows, поддерживают BLE. У каждой платформы есть наборы нативных инструментов и SDK для создания приложений с поддержкой BLE.

Наши разработчики имеют опыт создания нативных приложений BLE. Например, используя Android Studio и язык Java, мы создали Android-приложение для получения и отображения данных ЭКГ в режиме реального времени и написали специализированную прошивку для регистратора ЭКГ.

Данные поступают с носимого устройства, которое записывает электрокардиограмму пациента с помощью датчиков.
Приложение для отображения электрокардиограммы пациента и ЭКГ электроды
Даже при написании нативного Android приложения с поддержкой BLE могут возникнуть проблемы совместимости. Операционная система Android работает на устройствах разных производителей с разной конфигурацией оборудования и версиями BLE. Это создает определенные трудности при разработке мобильных приложений BLE, поскольку они должны одинаково работать на всех Android устройствах.

Использование нативных инструментов не так удобно и рентабельно, если разработчикам нужно сделать одно и то же приложение для нескольких операционных систем, например, iOS и Android.

Создав нативное приложение, не получится быстро портировать его на другую платформу.

Кроссплатформенный подход позволяет написать одно приложение и собрать его на разных платформах с небольшими изменениями.

Только десктопные и мобильные приложения могут существенно отличаться по дизайну интерфейса при одинаковой логике работы.

Особенности разработки Qt приложений с BLE

Разработчик программного обеспечения создает Qt приложение с поддержкой BLE.
Процесс разработки приложения с использованием Qt.
C++ — чрезвычайно удобный язык программирования для разработки приложений для встраиваемых систем и интеллектуальных устройств. Он предлагает высокую производительность, управляемость и длительную работу, что важно для маломощных устройств.

Qt — самый популярный кроссплатформенный C++ фреймворк для разработки приложений. Он поддерживает BLE либо из коробки, либо через плагины.

Qt имеет определенные функции для взаимодействия с BLE, которые можно использовать для создания приложений независимо от платформы. Qt Bluetooth Low Energy API предоставляется для разработки приложений BLE.

Фреймворк сочетает в себе преимущества C++ и декларативного языка QML, построенного поверх гибкого JavaScript. Графически насыщенные элементы пользовательского интерфейса, написанные на QML, можно интегрировать с логикой, написанной на C++.

QML делает разработку быстрой и легкой за счет сохранения кода. Выступая в качестве оболочки для создания Qt BLE, Bluetooth LE QML API позволяет быстро и легко создавать и интегрировать десктопные, мобильные или встроенные приложения в любое устройство с поддержкой BLE.

Qt Bluetooth поддерживает разработку программного обеспечения, связанного с BLE, на стороне клиента/центрального устройства.

Начиная с Qt 5.7, в качестве предварительной версии предоставляется дополнительный API для серверной/периферийной части.

КЕДР Solutions использует инструменты Qt для создания клиентских приложений для связи с периферийными BLE устройствами. Наши разработчики могут спроектировать аппаратную часть периферийных устройств с поддержкой BLE и написать прошивку.

Мы разработали Qt-приложение под iOS и Android для сбора информации с помощью BLE с многочисленных датчиков, установленных на сельхозтехнике и хранилищах. Передача данных через Интернет также была возможна, но не всегда осуществима из-за нестабильного соединения.

При разработке приложения, предполагающего использование нескольких коммуникационных протоколов, необходим специальный Qt класс. Этот класс служит буфером для приема данных, а внутренняя реализация создается отдельно для каждого протокола связи. Создание пользовательского класса — сложный и трудоемкий вариант реализации приложения.

Для полной реализации функционала кроссплатформенного приложения потребовалась регистрация дополнительных сервисов в протоколе GATT периферийных устройств BLE и присвоение каждому из объектов уникального номера для организации входящих данных.

Простой и интуитивно понятный интерфейс приложения позволяет визуализировать данные температуры, влажности и других показателей.
Разработанное КЕДР Solutions кроссплатформенное приложение для сбора и отображения данных с периферийных устройств иллюстрирует пример возможностей Qt Bluetooth.
Кроссплатформенное приложение с поддержкой BLE
На стороне клиента/центрального устройства API Qt BLE отвечает за подключение к периферийным устройствам, обнаружение их служб, а также чтение и запись характеристик и дескрипторов, хранящихся на устройстве.

На стороне сервера/периферии API предоставляет возможность настраивать и объявлять сервисы, а также получать уведомления, когда клиент создает характеристику.

Фреймворк предоставляет стандартную библиотеку Qt BLE, которая содержит необходимые инструменты для BLE-взаимодействия.

Некоторые периферийные BLE устройства, такие как мониторы сердечного ритма, датчики давления или влажности, имеют стандартизированный протокол связи, предоставляемый встроенной библиотекой Qt BLE.

Для спроектированных на заказ устройств в основном требуется написание протоколов общения в Qt. Помимо указания других моментов, протокол описывает, сколько байтов будет иметь заголовок и тело сообщения. Данные Qt BLE поступают во внутренний класс QByteArray, который управляет буферной памятью. Инструменты Qt позволяют комфортно работать с этим классом без преобразования данных.

Протоколы связи создаются для конкретных устройств. Один из наших проектов заключался в создании периферийного устройства — BLE-приемника, который перенаправляет по BLE данные, полученные от приложения, на устройство заказчика.

Особенность протокола заключалась в том, что по BLE нужно было передать более сотни параметров. Наши Qt-разработчики с нуля создали кроссплатформенное мобильное приложение, BLE-приемник и протокол для связи между устройствами.

Приложение выступало в роли клиента, инициируя соединение и обмен данными.

В еще одном проекте для агросектора периферийным устройством транслируется небольшое количество функций, поэтому клиентское приложение получает данные в режиме вещания.

В этом случае периферийное устройство служит маяком BLE. В реализации протокола нет необходимости.

Небольшие фрагменты данных будут записываться периферийным устройством один за другим в массив и считываться приложением.

Широковещательный режим BLE подразумевает использование библиотеки Qt BLE без создания протокола связи.
В режиме вещания BLE периферийное устройство отправляет небольшой объем данных на центральное устройство, которое получает их без установления соединения.
Режим вещания BLE в проекте для агросектора
Наиболее трудоемкими этапами разработки приложения Qt являются создание протокола и реализация внутренней логики.

BLE, как транспортный уровень, не влияет на внутреннюю логику приложения, добавляя лишь этапы поиска и определения устройства и, возможно, GUI часть.

Как применять Qt BLE для создания приложений

Использование Qt Bluetooth Low Energy API предполагает стандартный алгоритм действий.

Установление соединения

Для поиска периферийного устройства используется класс QBluetoothDeviceDiscoveryAgent.

При фильтрации по типу устройства в принимающем слоте нужно выбрать маломощные устройства.

Для получения адреса QBluetoothAddress периферийного устройства используется QLowEnergyController класс. Теперь можно настроить обычные слоты и подключиться напрямую к устройству.

Сеанс поиска периферийного устройства не длится непрерывно, а заканчивается через 20-30 секунд, и не всегда объект находится с первого раза. Поиск можно перезапустить вручную.

Обнаружение сервиса

Выполняя процедуру обнаружения сервиса, клиент GATT узнает об атрибутах сервера. Как только соединение установлено, приложение использует QLowEnergyController для запуска процесса поиска сервиса.

Класс QLowEnergyService, созданный после обнаружения службы, обеспечивает доступ к информации о BLE службах. QLowEnergyService помогает быстро обнаружить и предоставить информацию о сервисе.

Он дает разрешение на чтение и запись данных и делает уведомления об изменениях данных. После завершения этой процедуры клиент может читать и вносить записи в атрибуты, находящиеся на сервере.

Взаимодействие с периферийным устройством

Приложение, в зависимости от специфики, может содержать уведомления об изменении некоторых стандартизированных характеристик.

Класс QLowEnergyCharacteristic предоставляет информацию о характеристиках Bluetooth Low Energy сервиса: имя, UUID, значение, свойства, дескрипторы.

Чтобы получить такую информацию, нужно применить QLowEnergyService и QLowEnergyController для подключения к устройству. Значение характеристики обрабатывается в соответствии со стандартами Bluetooth Low Energy.

Объявления

При создании серверного приложения GATT на удаленном устройстве необходимо определить список сервисов, которые будут предлагаться и анонсироваться клиентам/центральным устройствам.

Класс QLowEnergyAdvertisingData передает набор данных, которые будут представлены клиентам либо в виде пакета рекламного сервиса, либо в виде пакета ответа на сканирование. После этого шага периферийные устройства доступны для подключения клиентов.

Создание сервиса на периферийном устройстве

Сначала нужно определить сервис вместе с его характеристиками и дескрипторами, используя классы QLowEnergyServiceData, QLowEnergyCharacteristicData и QLowEnergyDescriptorData. По сути, эти классы являются контейнерами для информации, которую необходимо указать.

Класс QLowEnergyDescriptorData нужен для получения данных GATT сервиса. Дескриптор, предлагаемый QLowEnergyDescriptorData должен быть добавлен в QLowEnergyCharacteristicData.

И QLowEnergyServiceData, и QLowEnergyAdvertisingData несут в себе схожую информацию, но служат разным целям.

Рекламная информация, отображаемая на устройствах, обычно краткая и ограничена по размеру. Класс QLowEnergyServiceData предоставляет полную информацию, доступную клиенту после установления соединения с обнаружением службы.

Такой же алгоритм подключения BLE-устройств используется для обновления характеристик и значений дескрипторов на удаленном устройстве.

Сложности Qt разработки приложений для Windows и Android

При создании клиентского BLE-приложения для Windows с использованием фреймворка Qt могут возникнуть определенные сложности.

Это связано с огромным разнообразием устройств и их производителей. Под каждую ОС пишется свой драйвер, SDK не контролируются производителем операционной системы.

Чтобы разработать на Qt приложение Bluetooth Low Energy для Windows, вам может потребоваться приобрести лицензионный пакет библиотек фреймворка, так как бесплатной версии может быть недостаточно.

Разработчики сталкиваются с аналогичными проблемами при создании с помощью Qt мобильных BLE приложений для Android.

Qt переводит код C++ в Java и вызывает нативные методы для разработки Android BLE приложений. Особенности операционной системы и тот факт, что Android-устройства производятся разными компаниями, иногда создают трудности со связью между устройствами.

Внутри Qt фреймворка реализована поддержка разных версий протоколов BLE и версий ОС, но иногда случаются баги. Разработчики фреймворка делают все возможное, чтобы оперативно и эффективно исправлять подобные ошибки.

У КЕДР Solutions есть команда Qt разработчиков, которая может создать мобильные и десктопные приложения BLE любой сложности.

Заключение

Bluetooth Low Energy как технология связи ближнего действия приобрела популярность и широко используется в портативных смарт-устройствах.

BLE можно использовать самостоятельно или в сочетании с другими методами передачи данных.

Bluetooth LE находит применение в здравоохранении, фитнесе, безопасности, сельском хозяйстве и развлечениях.

Тот факт, что все современные мобильные устройства имеют BLE-модули, открывает неограниченные возможности при создании программного обеспечения для BLE-коммуникации.

Приложения можно создавать как с помощью нативных инструментов для конкретной ОС, так и с использованием кроссплатформенных фреймворков.

Такие наборы инструментов позволяют создавать приложения, которые могут работать на разных платформах.

Qt — это универсальный набор инструментов для создания кроссплатформенных приложений. Он предоставляет библиотеку Qt BLE для быстрой реализации частей приложения, связанных с BLE.

Процесс использования такого универсального мультиплатформенного инструментария, как Qt, может иметь свою специфику и вызывать затруднения, часто зависящие больше от особенностей операционной системы, чем от самого фреймворка.

Доверив разработку программного обеспечения для BLE-коммуникаций опытной компании, такой как КЕДР Solutions, вы всегда можете быть уверены в отличном результате совместной работы.
Другие статьи