- Bluetooth client programming on windows
- Интерфейс
- Как подключить Блютуз
- Как включается Блютуз
- Bluetooth Low Energy sample
- Client
- Server
- More Details
- Клиент Bluetooth GATT Bluetooth GATT Client
- Обзор Overview
- Примеры Examples
- Отправка запросов для ближайших устройств Query for nearby devices
- Подключение к устройству Connecting to the device
- Перечисление поддерживаемых служб и характеристик Enumerating supported services and characteristics
- Выполнение операций чтения и записи с характеристикой Perform Read/Write operations on a characteristic
- Подписка на уведомления Subscribing for notifications
Bluetooth client programming on windows
Блютуз используется для передачи информации и звука между совместимыми устройствами. Драйвера и необходимое программное обеспечение поставляются в комплекте с оборудованием, но часто их нет. В таком случае рекомендуем скачать Блютуз на компьютер или ноутбук для Windows 7, 8, 8.1, 10 и XP внизу данной страницы https://bluetooth.ru.com/download без регистрации и SMS. Отдельного упоминания заслуживает совместимость Bluetooth 4.0+ и 5.0+ версий с Windows 10. Совместимые драйверы Bluetooth также возможно получить у производителей оборудования, или установить, используя Windows Update.
Существуют программно-аппаратные Bluetooth решения для стационарных компьютеров, ноутбуков, нетбуков, планшетов, мобильных телефонов, электронных помощников, принтеров, сканеров, цифровых фотоаппаратов, мышек, клавиатур, датчиков, маячков и других устройств. Когда на компьютере или ноутбуке не работает Bluetooth, часто проблема заключается не в «железе». Можно, конечно, купить Блютуз плату расширения или новый USB-адаптер, но торопиться с этим не стоит. Вопрос решается бесплатно, если сначала скачать драйвер Bluetooth на этом русском сайте.
Интерфейс
Интуитивно понятный интерфейс позволяет каждому пользователю не испытывать затруднений при налаживании беспроводного соединения. Для найденных в непосредственной близости беспроводных девайсов программа автоматически предложит действия, которые поддерживаются тем или иным оборудованием. Например, для телефона, возможны синхронизация, резервное копирование, передача файлов, редактирование записной книжки и другие операции.
Как подключить Блютуз
Если Bluetooth в каком-либо гаджете не был интегрирован изначально, то чтобы использовать беспроводное соединение, необходимо установить USB Блютуз-адаптер или плату расширения. Далее потребуется драйверы Broadcom Bluetooth скачать бесплатно на странице https://bluetooth.ru.com/download без регистрации и SMS. После установки программного обеспечения пользователь получит возможность подключать к компьютеру без USB-кабеля или других проводов свой мобильный телефон, смартфон, планшет и другие устройства. Это позволит удобно и быстро загружать, скачивать и синхронизировать видео файлы, кинофильмы, музыку, игры, фотографии, изображения, мелодии, рингтоны, иконки, контакты, документы и другие файлы.
Как включается Блютуз
Инсталляция программного обеспечения длится определенное время, но проходит без проблем в автоматическом режиме, если на первом этапе удалось бесплатно скачать драйвер Bluetooth для Windows 7, 8, 8.1, 10 и XP без обрывов связи, сбоев, докачек, приводящих к повреждению файла. После запуска инсталлятора WIDCOMM распознает тип Bluetooth-адаптера и для него дозагружаются необходимые файлы. Поэтому в процессе установки необходимо рабочее соединение с Интернетом, желательно высокоскоростное. После установки, возможно, потребуется перезагрузка компьютера.
После запуска программы WIDCOMM Bluetooth для Windows автоматически происходит поиск доступных устройств. Пользователю остается выбрать из списка нужное устройство и подключиться к нему. Подключение происходит с использованием пароля. Пассивное оборудование имеет встроенный пароль, обычно это четыре цифры 1111 или 1234.
Bluetooth Low Energy sample
Shows how to use the Windows Bluetooth LE APIs to act either as a BLE client or server.
Note: This sample is part of a large collection of UWP feature samples. You can download this sample as a standalone ZIP file from docs.microsoft.com, or you can download the entire collection as a single ZIP file, but be sure to unzip everything to access shared dependencies. For more info on working with the ZIP file, the samples collection, and GitHub, see Get the UWP samples from GitHub. For more samples, see the Samples portal on the Windows Dev Center.
Client
Shows how to act as a client to communicate with a Bluetooth Low Energy (LE) device using the Bluetooth GATT protocol. Acts as a GATT client to access nearby GATT servers like heart rate sensors or temperature sensors.
Specifically, this sample shows how to:
- Enumerate nearby Bluetooth LE devices
- Query for supported services
- Query for supported characteristics
- Read and write data
- Subscribe to indicate and notify events
Server
As of build 15003 and above, Bluetooth LE GATT Server APIs are available. This sample can be used to advertise support for CalcService — a custom service that allows a remote client to write to two operand characteristics and an operator and read the result.
This samples shows how to:
- Initialize and publish a custom service/characteristic hierarchy
- Implement event handlers to handle incoming read/write requests
- Notify connected clients of a characteristic value change
More Details
Search for «BT_Code» to find the portions of the sample that are particularly relevant to Bluetooth. Note in particular the «bluetooth» capability declaration in the manifest.
Note The Windows universal samples require Visual Studio to build and Windows 10 to execute.
To obtain information about Windows 10 development, go to the Windows Dev Center
To obtain information about Microsoft Visual Studio and the tools for developing Windows apps, go to Visual Studio
Клиент Bluetooth GATT Bluetooth GATT Client
В этой статье описывается использование API-интерфейсов клиента Bluetooth Generic Attribute (GATT) для приложений универсальной платформы Windows (UWP) и приводится пример кода для основных задач клиента GATT. This article demonstrates usage of the Bluetooth Generic Attribute (GATT) Client APIs for Universal Windows Platform (UWP) apps, along with sample code for common GATT client tasks:
- Отправка запросов для ближайших устройств Query for nearby devices
- Подключение к устройству Connect to device
- Перечисление поддерживаемых служб и характеристик устройства Enumerate the supported services and characteristics of the device
- Чтение и запись в характеристику Read and write to a characteristic
- Подписка на уведомления об изменении значения характеристики Subscribe for notifications when characteristic value changes
В Package. appxmanifest необходимо объявить возможность «Bluetooth». You must declare the «bluetooth» capability in Package.appxmanifest .
Важные API Important APIs
Обзор Overview
С помощью API-интерфейсов в пространстве имен Windows.Devices.Bluetooth.GenericAttributeProfile разработчики получают доступ к устройствам Bluetooth с низким энергопотреблением. Developers can use the APIs in the Windows.Devices.Bluetooth.GenericAttributeProfile namespace to access Bluetooth LE devices. Функции устройств Bluetooth с низким энергопотреблением обеспечиваются коллекцией следующих элементов: Bluetooth LE devices expose their functionality through a collection of:
- Службы Services
- Характеристики Characteristics
- Дескрипторы Descriptors
Службы определяют функциональный контракт устройства с низким энергопотреблением и содержат набор характеристик, определяющих службу. Services define the functional contract of the LE device and contain a collection of characteristics that define the service. Характеристики в свою очередь содержат описывающие их дескрипторы. Those characteristics, in turn, contain descriptors that describe the characteristics. Эти 3 элемента, как правило, называют атрибутами устройства. These 3 terms are generically known as the attributes of a device.
API-интерфейсы Bluetooth GATT для устройств с низким энергопотреблением предоставляют доступ к объектам и функциям, а не собственно к механизмам передачи. The Bluetooth LE GATT APIs expose objects and functions, rather than access to the raw transport. Кроме того, API-интерфейсы Bluetooth GATT позволяют разработчикам работать с устройствами Bluetooth с низким энергопотреблением и выполнять следующие задачи: The GATT APIs also enable developers to work with Bluetooth LE devices with the ability to perform the following tasks:
- Обнаружение атрибутов Perform attribute discovery
- Чтение и запись значений атрибутов Read and Write attribute values
- Регистрация обратного вызова для события Characteristic ValueChanged Register a callback for Characteristic ValueChanged event
Для эффективной реализации разработчик должен иметь представление о службах и характеристиках GATT, которые будет обрабатывать приложение. Он должен уметь преобразовывать значения отдельных характеристик, например двоичных данных, предоставляемых API-интерфейсами, в полезные данные, отображаемые для пользователей. To create a useful implementation a developer must have prior knowledge of the GATT services and characteristics the application intends to consume and to process the specific characteristic values such that the binary data provided by the API is transformed into useful data before being presented to the user. API Bluetooth GATT предоставляют только основные примитивы, необходимые для взаимодействия с устройством Bluetooth с низким энергопотреблением. The Bluetooth GATT APIs expose only the basic primitives required to communicate with a Bluetooth LE device. Для интерпретации данных необходимо определить профиль приложения. Для этого используется либо стандартный профиль Bluetooth SIG, либо настраиваемый профиль, реализованный поставщиком устройства. To interpret the data, an application profile must be defined, either by a Bluetooth SIG standard profile, or a custom profile implemented by a device vendor. Профиль создает контракт привязки между приложением и устройством в отношении содержимого передаваемых данных и их интерпретации. A profile creates a binding contract between the application and the device, as to what the exchanged data represents and how to interpret it.
Для удобства Bluetooth SIG ведет список доступных общих профилей. For convenience the Bluetooth SIG maintains a list of public profiles available.
Примеры Examples
Отправка запросов для ближайших устройств Query for nearby devices
Существует два основных метода отправки запросов для ближайших устройств: There are two main methods to query for nearby devices:
- DeviceWatcher в Windows.Devices.Enumeration DeviceWatcher in Windows.Devices.Enumeration
- AdvertisementWatcher в Windows.Devices.Bluetooth.Advertisement AdvertisementWatcher in Windows.Devices.Bluetooth.Advertisement
Второй метод подробно рассматривается в документации по классу Advertisement, поэтому здесь упоминается только основной принцип — поиск адресов ближайших устройств Bluetooth, соответствующих критериям конкретного фильтра объявления. The 2nd method is discussed at length in the Advertisement documentation so it won’t be discussed much here but the basic idea is to find the Bluetooth address of nearby devices that satisfy the particular Advertisement Filter. Когда адрес найден, можно вызвать BluetoothLEDevice.FromBluetoothAddressAsync для получения ссылки на устройство. Once you have the address, you can call BluetoothLEDevice.FromBluetoothAddressAsync to get a reference to the device.
Вернемся к методу DeviceWatcher. Now, back to the DeviceWatcher method. Устройство Bluetooth с низким энергопотреблением ничем не отличается от любых других устройств в Windows. Запрос к этому устройству можно отправить с помощью API-интерфейсов перечисления. A Bluetooth LE device is just like any other device in Windows and can be queried using the Enumeration APIs. Используйте класс DeviceWatcher, чтобы передать строку запроса с указанием искомых устройств: Use the DeviceWatcher class and pass a query string specifying the devices to look for:
После запуска DeviceWatcher вы получите DeviceInformation для каждого устройства, соответствующего критериям запроса, в обработчике события Added для соответствующих устройств. Once you’ve started the DeviceWatcher, you will receive DeviceInformation for each device that satisfies the query in the handler for the Added event for the devices in question. Чтобы получить более полное представление о методе DeviceWatcher, см. полный пример кода на Github. For a more detailed look at DeviceWatcher see the complete sample on Github.
Подключение к устройству Connecting to the device
После обнаружения нужного устройства используйте DeviceInformation.Id, чтобы получить объект BluetoothLEDevice для соответствующего устройства: Once a desired device is discovered, use the DeviceInformation.Id to get the Bluetooth LE Device object for the device in question:
С другой стороны, при удалении всех ссылок на объект BluetoothLEDevice инициируется автоматическое отключение от устройства после короткого периода ожидания (если на это устройство не ссылаются другие приложения в системе). On the other hand, disposing of all references to a BluetoothLEDevice object for a device (and if no other app on the system has a reference to the device) will trigger an automatic disconnect after a small timeout period.
Если приложению снова потребуется доступ к устройству, создайте объект устройства заново и предоставьте доступ к характеристике (см. следующий раздел). После этого операционная система будет инициировать повторное подключение по требованию. If the app needs to access the device again, simply re-creating the device object and accessing a characteristic (discussed in the next section) will trigger the OS to re-connect when necessary. Если устройство находится поблизости, вы получите доступ к нему. В противном случае будет получен ответ с ошибкой DeviceUnreachable. If the device is nearby, you’ll get access to the device otherwise it will return w/ a DeviceUnreachable error.
Создание объекта блуетуследевице путем вызова только этого метода не (обязательно) инициирует соединение. Creating a BluetoothLEDevice object by calling this method alone doesn’t (necessarily) initiate a connection. Чтобы инициировать подключение, задайте гаттсессион. маинтаинконнектион для true или вызовите некэшированный метод обнаружения службы для блуетуследевице или выполните операцию чтения и записи на устройстве. To initiate a connection, set GattSession.MaintainConnection to true , or call an uncached service discovery method on BluetoothLEDevice , or perform a read/write operation against the device.
- Если гаттсессион. маинтаинконнектион имеет значение true, система ждет подключения и будет подключаться, когда устройство станет доступным. If GattSession.MaintainConnection is set to true, then the system waits indefinitely for a connection, and it will connect when the device is available. Нет ничего ждать в приложении, так как гаттсессион. маинтаинконнектион является свойством. There’s nothing for your application to wait on, since GattSession.MaintainConnection is a property.
- При обнаружении служб и операциях чтения и записи в GATT система ждет конечного, но переменного времени. For service discovery and read/write operations in GATT, the system waits a finite but variable time. Что угодно — от мгновенного к минутам. Anything from instantaneous to a matter of minutes. Факторы, которые применяют трафик в стеке и порядок постановки запроса в очередь. Factors inclue the traffic on the stack, and how queued up the request is. Если нет других ожидающих запросов, а удаленное устройство недоступно, система будет ожидать 7 (7) секунд до истечения времени ожидания. Если имеются другие ожидающие запросы, то для обработки каждого из запросов в очереди может потребоваться семь (7) секунд, поэтому дальнейшие действия выполняются в конце очереди, чем дольше вы ждет. If there are no other pending request, and the remote device is unreachable, then the system will wait for seven (7) seconds before it times out. If there are other pending requests, then each of the requests in the queue can take seven (7) seconds to process, so the further yours is toward the back of the queue, the longer you’ll wait.
В настоящее время невозможно отменить процесс подключения. Currently, you can’t cancel the connection process.
Перечисление поддерживаемых служб и характеристик Enumerating supported services and characteristics
Теперь, когда у вас есть объект BluetoothLEDevice, можно перейти к следующему шагу — обнаружению данных, предоставляемых устройством. Now that you have a BluetoothLEDevice object, the next step is to discover what data the device exposes. Сначала необходимо запросить службы: The first step to do this is to query for services:
После определения нужных служб необходимо запросить характеристики. Once the service of interest has been identified, the next step is to query for characteristics.
Операционная система возвращает список ReadOnly, где перечислены объекты GattCharacteristic, с которыми можно выполнять операции. The OS returns a ReadOnly list of GattCharacteristic objects that you can then perform operations on.
Выполнение операций чтения и записи с характеристикой Perform Read/Write operations on a characteristic
Характеристика — неотъемлемая часть обмена данными с использованием GATT. The characteristic is the fundamental unit of GATT based communication. Она содержит значение, представляющее уникальный фрагмент данных на устройстве. It contains a value that represents a distinct piece of data on the device. Например, характеристика Battery Level содержит значение, представляющее уровень заряда аккумулятора устройства. For example, the battery level characteristic has a value that represents the battery level of the device.
Изучите свойства характеристики, чтобы определить поддерживаемые операции: Read the characteristic properties to determine what operations are supported:
Если поддерживается чтение, можно прочитать значение: If read is supported, you can read the value:
Запись в характеристику выполняется по аналогичному шаблону: Writing to a characteristic follows a similar pattern:
Совет . DataReader и незаменимым используются при работе с необработанными буферами , полученными из многих API-интерфейсов Bluetooth. Tip : DataReader and DataWriter are indispensible when working with the raw buffers you get from many of the Bluetooth APIs.
Подписка на уведомления Subscribing for notifications
Проверьте свойства характеристики и убедитесь, что характеристика поддерживает операцию Indicate или Notify. Make sure the characteristic supports either Indicate or Notify (check the characteristic properties to make sure).
Примечание . Операция Indicate считается более надежной, поскольку каждое событие изменения значения подтверждается клиентским устройством. Aside : Indicate is considered more reliable because each value changed event is coupled with an acknowledgement from the client device. Операция Notify используется чаще, так как большинство транзакций GATT обеспечивает экономию энергии, а не высочайший уровень надежности. Notify is more prevalent because most GATT transactions would rather conserve power rather than be extremely reliable. Так или иначе, все эти операции обрабатываются на уровне контроллера без участия приложения. In any case, all of that is handled at the controller layer so the app does not get involved. В дальнейшем для этих операций будет использоваться собирательный термин «уведомления». We’ll collectively refer to them as simply «notifications» but now you know.
Перед получением уведомлений необходимо обеспечить выполнение двух условий: There are two things to take care of before getting notifications:
- Запись в дескриптор конфигурации характеристик клиента (Client Characteristic Configuration, CCCD) Write to Client Characteristic Configuration Descriptor (CCCD)
- Обработка события Characteristic.ValueChanged Handle the Characteristic.ValueChanged event
Запись в CCCD сообщает серверу, что данный клиент должен получать оповещение каждый раз, когда меняется значение определенной характеристики. Writing to the CCCD tells the Server device that this client wants to know each time that particular characteristic value changes. Выполните указанные ниже действия. To do this:
Теперь событие ValueChanged для GattCharacteristic будет вызываться при каждом изменении значения на удаленном устройстве. Now, the GattCharacteristic’s ValueChanged event will get called each time the value gets changed on the remote device. Осталось только реализовать обработчик: All that’s left is to implement the handler: