Android Bluetooth Low Energy (BLE) — готовим правильно, часть #1 (scanning)

An overview of the most important functions of the BLE Scanner App

The BLE Scanner App can be used stand-alone or in conjunction with a rapidM2M M2X or a myDatalogEASY IoT (with BLE variant).

In connection with a Microtronics product, a library, the ble-scanner-app-mt, including help and examples for the simple use of all BLE commands is available in the rapidM2M Studio.

Bluetooth Low Energy, or BLE for short, is a Bluetooth standard designed specifically for sensors and devices to transmit wireless data in the most energy-efficient way possible.There are various sensors with many different properties that perform corresponding tasks depending on the area of application.

Do you have any questions?

Table of Contents

Способов трансляции данных «по воздуху» создано и используется довольно много. Популярностью обзавелся протокол BLE, который внедрен в электронику различного типа и успешно используется и по сей день. Что из себя представляет данный протокол и в каких сферах применим — рассмотрено в этой статье.

Про мини ПК:  «Что такое считыватель электронных карт и как его выбрать, а также его важность для идентификации карт»

Android Bluetooth Low Energy (BLE) — готовим правильно, часть #1 (scanning)

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

Если у приемника и передатчика имеется батарейное питание, то наблюдаются проблемы со связью при разрыве постоянной передачи связи для экономии энергии, которые решили с новым протоколом передачи данных BlueTooth Low Energy (BLE).

BLE – это режим низкого энергопотребления, способствующий экономии заряда аккумулятора у сопряженных устройств.

Протокол стал частью Bluetooth 4.0. Операционная система Android поддерживает BLE с версии 4.3. В качестве пары, работающей с BLE, берется телефон с современной ОС, совместно с батарейной малой техникой (например, гарнитура). Но не исключены и взаимодействия иных гаджетов.

https://youtube.com/watch?v=NKjXgCVevLg%3Ffeature%3Doembed%26wmode%3Dopaque

Чтобы принимать и передавать данные в необходимом объеме беспроводным способом, в стандарт Bluetooth LE включена скорость передачи информации, равная 1 Мбит/сек. Постоянный обмен данными затрачивает энергию, тем самым расходуя ее запасы. Поэтому протокол подразумевает разрыв постоянного эфира для экономии. Поэтому в протоколе не только важна скорость, а и то, что гаджеты умеют синхронизироваться друг с другом тогда, когда это необходимо.

Около 99% всего времени гаджеты спят и экономят энергию. Потом просыпаются на короткий период для обмена данными и снова засыпают. Но чтобы пребывать в данном режиме, устройства сперва между собой необходимо синхронизировать. Этот режим и называется advertising.

No.1 Scanner Utility для устройств с низкой энергией Bluetooth, iBeacon и Eddystone.========================================

Более 650 000 загрузок==================

Помощь сообществу Bluetooth, разработчикам и пользователям.======================================

BLE Scanner был разработан с целью помочь сообществу Bluetooth, разработчикам, которые хотят создавать продукты и приложения BLE.

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

Основные характеристики Bluetooth-сканер=====================# Сканирование рядом с устройствами с низкой энергией Bluetooth, iBeacon и Eddystone.# Добавлен периферийный (рекламный) режим.# Создайте свое настраиваемое периферийное устройство, добавьте пользовательские сервисы и характеристики.# Рекламируйте свой телефон как UID, URI и TLM Eddystone.# Настроить конфигурацию Eddystone для UID, URI и TLM.# Найдите устройство BLE в непосредственной близости, используя радарный вид и уникальные цвета устройства.# Фильтровать устройства по имени, адресу Mac и RSSI.# История всех обнаруженных устройств. Узнайте, какое устройство было обнаружено при обнаружении времени.# Удалить параметры истории на вкладке истории.# Экспортировать данные истории в SD-карту.# RSSI Pool помогает выяснить, насколько далеко ваши устройства. Опустите номер, ближе к исходному, т. Е. -25 очень близко, и -80 находится далеко от ваших устройств BLE.# Избранное ваши устройства.# Исследуйте службы и характеристики подключенного устройства.# Выполнять чтение, запись, уведомление и указание.# Проверьте совместимость устройств для BLE.# Экспортировать данные истории в формате CSV.# Введите более 20 байтовых данных.# Добавить логическое имя вашего устройства.# Скопировать в буфер обмена MAC-адреса.# Найдите потерянное устройство Bluetooth или BLE.# Новый периферийный профиль Интегрированный, т. Е. Частота сердечных сокращений, артериальное давление# Встроенный сканер QR-кода.

Известная проблема: —

— Иногда, когда телефон Android рекламируется как периферийный, он не может подключиться к устройствам iOS. Но он легко подключается к другим устройствам Android.

Время на прочтение

Часть #1 (scanning), вы здесь.

Часть #2 (connecting/disconnecting).

Часть #3 (read/write)

Часть #4 (bonding)

Могу точно сказать – это было сложней, чем представлял, мне пришлось приложить немало усилий для стабильной работы под Android. Я изучил много статей в свободном доступе, некоторые оказались ошибочными, многие были очень полезными и помогли в деле. В этой серии статей я хочу описать свои выводы, чтобы вы не тратили уйму времени на поиски как я.

Особенности работы BLE под Android

Не претендую на то, что я решил все проблемы, но мне удалось выйти на «приемлемый» уровень. Начнем со сканирования.

Сканирование устройств

Перед подключением к устройству вам нужно его просканировать. Это делается при помощи класса BluetoothLeScanner:

Сканер пытается найти устройства в соответствии с настройками filters и scanSettings, при обнаружении устройства вызывается scanCallback:

В результате сканирования мы получаем экземпляр ScanResult , в котором есть объект BluetoothDevice, его используют для подключения к устройству. Но прежде чем начать подключаться, поговорим о сканировании подробнее, ScanResult содержит несколько полезных сведений об устройстве:

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

Настраиваем фильтр для сканирования

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

Сканирование устройств по UUID сервиса

Используется если вам необходимо найти устройства определенной категории, например мониторы артериального давления со стандартным сервисным UUID: 1810. При сканировании устройство может содержать в Advertisement data UUID сервис, который характеризует это устройство. На самом деле эти данные ненадежные, фактически сервисы могут не поддерживаться, или подделываться Advertisement data данные, в общем тут есть творческий момент.

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

Пример сканирования службы с артериальным давлением:

Обратите внимание на короткий UUID (например 1810), он называется 16-bit UUID и является частью длинного 128-bit UUID (в данном случае 00001810-000000-1000-8000-000-00805f9b34fb). Короткий UUID это BASE_PART длинного UUID, см. спецификацию здесь.

Сканирование устройств по имени

Поиск устройств использует точное совпадение имени устройства, обычно это применяется в двух случаях:

Сканирование устройств по MAC-адресам.

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

Вероятно вы уже поняли, что можно комбинировать в фильтре UUID, имя и MAC-адрес устройства. Выглядит неплохо, но на практике я не применял такое. Хотя может быть вам это пригодится.

Настройка ScanSettings

ScanSettings объясняют Android как сканировать устройства. Там есть ряд настроек, которые можно задать, ниже полный пример:

ScanSettings scanSettings = new ScanSettings.Builder()
.setScanMode(ScanSettings.SCAN_MODE_LOW_POWER)
.setCallbackType(ScanSettings.CALLBACK_TYPE_ALL_MATCHES)
.setMatchMode(ScanSettings.MATCH_MODE_AGGRESSIVE)
.setNumOfMatches(ScanSettings.MATCH_NUM_ONE_ADVERTISEMENT)
.setReportDelay(0L)
.build();

ScanMode

Безусловно, это самый важный параметр. Определяет метод и время сканирования в Bluetooth стеке. Такая операция требует много энергии и необходим контроль над этим процессом, чтобы не разрядить батарею телефона быстро. Есть 4 режима работы, в соответствии с руководством Nordics и официальной документацией:

Callback Type

Эта настройка контролирует как будет вызываться callback со ScanResult в соответствии с заданными фильтрами, есть 3 варианта:

В практике обычно используются настройка CALLBACK_TYPE_ALL_MATCHES или CALLBACK_TYPE_FIRST_MATCH. Правильный тип зависит от конкретного случая. Если не знаете — используйте CALLBACK_TYPE_ALL_MATCHES, это дает больше контроля при получении callback, если вы останавливаете сканирование после получения нужных результатов — фактически это CALLBACK_TYPE_FIRST_MATCH.

Match mode

Настройка того, как Android определяет «совпадения».

Я не тестировал эти настройки подробно, но я в основном использую MATCH_MODE_AGGRESSIVE, это помогает быстрее найти устройства.

Number of matches

Параметр определяет сколько advertisement данных необходимо для совпадения.

Нет большой необходимости в таком низкоуровневом контроле. Все что вам надо — быстро найти свое устройство, обычно используются первые 2 варианта.

Report delay

Задержка для вызова сallback в миллисекундах. Если она больше нуля, Android будет собирать результаты в течение этого времени и вышлет их сразу все в обработчике onBatchScanResults. Важно понимать что onScanResult не будет вызываться. Обычно применяется, когда есть несколько устройств одного типа и мы хотим дать пользователю выбрать одно из них. Единственная проблема здесь — предоставить информацию пользователю для выбора, это должен быть не только MAC-адрес (например имя устройства).

Важно: есть известный баг для Samsung S6 / Samsung S6 Edge, когда все результаты сканирования имеют один и тот же RSSI (уровень сигнала) при задержке больше нуля.

Кеширование Android Bluetooth стека

В результате процесса сканирования вы получаете список BLE устройств и при этом данные устройств «кешируются» в Bluetooth стеке. Там хранится основная информация: имя, MAC-адрес, тип адреса (публичный, случайный), тип устройства (Classic, Dual, BLE) и т.д. Android нужны эти данные, чтобы подключится к устройству быстрее. Он кеширует все устройства, которые видит при сканировании. Для каждого из них записывается небольшой файл с данными. Когда вы пытаетесь подключиться к устройству, стек Android ищет соответствующий файл, чтобы прочитать данные для подключения. Важный момент — одного MAC-адреса недостаточно для успешного подключения к устройству!

Очистка кеша

Bluetooth кеш, как и любой другой, не существует вечно, есть 3 ситуации, когда он очищается:

Это достаточно неудобный момент для разработчиков, потому что телефон часто перезагружается, пользователь может включать-выключать самолетный режим. Есть еще различия между производителями телефонов, например на некоторых телефонах Samsung, кеш не очищался при выключении Bluetooth.

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

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

Непрерывное сканирование?

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

Плохая новость в том, что Google в последнее время ограничивает (неофициально) непрерывное сканирование:

Непрерывное сканирование в фоне

Google значительно усложнил сканирование на переднем плане. Для фонового режима вы столкнетесь с еще большими трудностями! Новые версии Android имеют лимиты на работу служб в фоновом режиме, обычно после 10 минут работы, фоновый сервис прекращает свою работу принудительно. Посмотрите возможные решения этой проблемы:

Проверка разрешений (permissions)

Есть еще несколько важных моментов, прежде чем мы закончим статью. Для начала сканирования нужны системные разрешения (permissions):

Убедитесь, что все разрешения одобрены, или запросите их у пользователя. Разрешение ACCESS_COARSE_LOCATION Google считает «опасным» и для него требуется обязательное согласие пользователя.

Прим. переводчика, в моем проекте для корректной работы с BLE потребовалось еще 2 разрешения: ACCESS_FINE_LOCATION (для API<23) и ACCESS_BACKGROUND_LOCATION обсуждение на Stackoverflow.

В итоге полный список разрешений включая версию Android10:

После получения всех нужный разрешений, нужно проверить включен Bluetooth, если нет — используйте Intent для запуска запроса на включение:

Заключение

Мы научились запускать сканирование BLE устройств с учетом жизненного цикла Activity (Fragment / Service), использовать фильтры и различные настройки сканирования, также узнали все нужные разрешения (permissions) для удачного запуска сканирования и особенности работы Android-Bluetooth кеша. В следующей статье мы погрузимся глубже в процесс подключения и отключения к устройствам.

BLE in use

So-called “beacons” send their data cyclically into the environment and anyone who wants to can receive them. They are used for positioning, for example, or to give museum visitors background knowledge about a work of art.

Sensors for IoT applications such as the H2S sensors of the myDatalogH2S connect to the gateway via BLE. Measurements are started cyclically and measured values are queried.

Android Bluetooth Low Energy (BLE) — готовим правильно, часть #1 (scanning)

Поддерживаемые устройства

Протокол BLE содержится в модулях со встроенным программным обеспечением. Модулями оснащаются конечные устройства. В качестве модулей можно выделить:

К BLE-устройствам можно отнести:

https://youtube.com/watch?v=ItV08vGqACM%3Ffeature%3Doembed%26wmode%3Dopaque

Вопросы безопасности BLE

Защита канала передачи данных между парой устройств в протоколе BLE обусловлена двумя режимами LE Секьюрити мод 1 и LE Секьюрити мод 2. Первый режим работает на Data Link layer (DLL), второй на AT&T.

На DLL в протоколе Bluetooth LE присутствует шифрование и аутентификация с помощью технологии построения аутентификационного кода сообщения из блочного алгоритма шифрования (CCM) и шифра AES-128. При работе CCM и AES-128, добавляется к ним Protocol Data Unit и дополнительное сообщение для идентификации целостности, размером 4-байта, после которого PDU и сообщение шифруются.

В некоторых случаях аутентификацию можно провести поверх нешифрованного соединения на канальном уровне. Но в таком случае на AT&T -уровне к PDU плюсуется двенадцати байтная сигнатура.

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

Android Bluetooth Low Energy (BLE) — готовим правильно, часть #1 (scanning)

Соединение пары происходит в три так называемых этапа:

https://youtube.com/watch?v=WyNnJ0xokmQ%3Ffeature%3Doembed%26wmode%3Dopaque

Try the demo apps and create your own solutions with BLE!

Android Bluetooth Low Energy (BLE) — готовим правильно, часть #1 (scanning)

BLE – little energy, great benefit

Android Bluetooth Low Energy (BLE) — готовим правильно, часть #1 (scanning)

Innovation award for data acquisition and sensor supply in the ATEX zone

At the Lower Austrian Innovation Award 2022, the myDatalogEx was recognised with a commendation in the Digitalisation/KI category. Powering, sensing and transmitting 4-20mA sensors in the hazardous ATEX environment is the USP of the myDatalogEx. The unit is configured on the comprehensive web portal and the data is available.

Android Bluetooth Low Energy (BLE) — готовим правильно, часть #1 (scanning)

The 3 myDatasens application possibilities

The myDatasens is available in three variants. The application differs not only in terms of data transmission, but also in terms of the availability of data on the platform.

From theory to practice

Watch the video to learn how to use the BLE Scanner app in just a few steps:

Android Bluetooth Low Energy (BLE) — готовим правильно, часть #1 (scanning)

Mit dem Laden des Videos akzeptieren Sie die Datenschutzerklärung von YouTube.Mehr erfahren

YouTube immer entsperren

В каких сферах применяется

Android Bluetooth Low Energy (BLE) — готовим правильно, часть #1 (scanning)

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

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

Устойчивая работа и низкое энергопотребление протокола BLE позволяют рассматривать его в качестве замены NFC, а именно RFID-меток. Но вариант совмещенной работы BLE + NFC выглядит более привлекательно. BLE дает большой радиус, сопряженный с устойчивой работой, второй отвечает за логическое сопряжение пары, плюс обеспечивает надежную защиту за счет малого радиуса действия.

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

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

Различия протоколов Bluetooth

Android Bluetooth Low Energy (BLE) — готовим правильно, часть #1 (scanning)

Так как Блютуз с низким энергопотреблением вошел в спецификацию Bluetooth 4.0, то технические сравнения проведены с классической версией.

Также нельзя не отметить большое сходство протоколов BLE с BR / EDR – первым созданным Блютуз-протоколом:

Различия между BR / EDR и BLE-модулями в том, что первый делит полосу пропускания на 79 каналов с разносом в 1 МГц, а второй работает с передатчиком и приемником для разделения полосы на 40 каналов, с разбросом в 2 МГц.

Определение поддержки

Чтобы определить, работает ли ваш аксессуар с протоколом-BLE, следует изучить информацию об устройстве на сайте производителя или в инструкции по эксплуатации. Для устройств, работающих на Android, можно проверить поддержку с помощью приложений:

Множество таких «определителей» находится в Play Market и доступны для использования бесплатно. Модели телефонов, выпущенные до 2015 года включительно, могут не поддерживать данную опцию.

How the BLE Scanner App works and how to use it

The BLE Scanner app finds all the different sensors and also connects to them if necessary. When and how a BLE scan takes place or with which sensor found a connection is to be established can be specified with some commands.

The BLE Scanner App can be configured to send various information to the environment so that it can be scanned itself.

The BLE Scanner App is equipped with an AT command set (similar to conventional modems) and can thus be configured for various applications.

Demo-Apps “Weather Station with BLE Sensors”

The demo application “Weather Station with BLE Sensors” shows the use of the BLE Scanner App with a rapidM2M PoC BLE WiFi and a Sensirion SHT31 Smart Gadget Development Kit. Up to three sensors can be connected via Bluetooth Low Energy with the demo app. These provide the current measured values for temperature (Temp) and relative humidity (RH).

Android Bluetooth Low Energy (BLE) — готовим правильно, часть #1 (scanning)

Android Bluetooth Low Energy (BLE) — готовим правильно, часть #1 (scanning)

The demo application “Weather Station with BLE Sensors V2” goes one step further and increases the programming comfort by using the ble-con-manager-mt library. The library handles the handling for the BLE sensors in the background through its high-level functions.

Android Bluetooth Low Energy (BLE) — готовим правильно, часть #1 (scanning)

A library written especially for the “Sensiron SHT31 Smart Gadget” sensors works hand in hand with the “BLE Connection Manager” and shows how such a sensor library can be built and integrated.

Android Bluetooth Low Energy (BLE) — готовим правильно, часть #1 (scanning)

The demo IoT apps and the libraries are available in the rapidM2M Studio after free registration. Try them out and create your own IoT applications based on them.

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

Оцените статью
Карман PC
Добавить комментарий