Использование 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 любой сложности.