Библиотека MicroPython для взаимодействия с Beacon на ESP32.
Рассмотрим некоторые аспекты работы с Beacon
, чтобы избежать недопонимания.
Роль Бродкаста (Адвертайзер) : Чтобы Bluetooth устройства могли быть обнаружены другими устройствами и использоваться, они должны первым делом работать в роли Адвертайзера (broadcast role, рекламщик, базовая станция и т.д.), передавая данные, такие как имя устройства, адрес MAC, предоставляемые услуги и внешний вид.
Роль Наблюдателя (Сканнер) : Когда есть Адвертайзер, который отправляет данные, должен быть Сканнер, который наблюдает за этими данными и получает ключевые данные от другого устройства, такие как адрес MAC, уровень сигнала RSSI, возможность подключения и содержание данных.
Роль Центра (Клиент GATT) : После того, как Сканнер получил ключевые данные, он может выбрать подключение к Адвертайзеру, тогда Сканнер становится центральным устройством (Центр).
Роль Периферийного устройства (Сервер GATT) : Когда Центр выбирает подключиться, Адвертайзер становится периферией (Периферийное устройство) и прекращает передачу данных.> Наши устройства Beacon
для обеспечения непрерывной передачи данных должны быть недоступны для подключения, то есть работать только в роли Advertiser.Источники:
Данные, передаваемые Адвертайзером, можно представить как набор данных, каждая из которых состоит из следующих частей:
Каждое сообщение имеет ограничение по длине до 37 байт; если вычесть 6 байт адреса MAC устройства, то фактическая максимальная длина составляет 31 байт.
Пример данных, передаваемых устройством HID проекта ESP32 BLE:
bytearray(b'\x02\x01\x06\x03\x03\x0f\x18\x03\x03\x0a\x18\x03\x03\x12\x18\x03\x19\xc1\x03\x06\xff\x06\x00\x03\x00\x80')
# Разбиение на 6 групп данных
b'\x02\x01\x06'
b'\x03\x03\x0f\x18'
b'\x03\x03\x0a\x18'
b'\x03\x03\x12\x18'
b'\x03\x19\xc1\x03'
b'\x06\xff\x06\x00\x03\x00\x80'
На основе анализа данных формата получены следующие данные:
Номер | Длина | AD_TYPE | Данные |
---|---|---|---|
1 | x02 |
x01 (FLAGS) |
x06 |
2 | x03 |
x03 (16BIT_SERVICE_UUID) |
x0F x18 |
3 | x03 |
x03 (16BIT_SERVICE_UUID) |
x0A x18 |
4 | x03 |
x03 (16BIT_SERVICE_UUID) |
x12 x18 |
5 | x03 |
x19 (APPEARANCE) |
xC1 x03 |
6 | x06 |
xFF (MANUFACTURER_SPECIFIC_DATA) |
x06 x00 x03 x00 x80 |
Разберёмся с четырьмя различными типами AD:
x01
: данные x06
, преобразованы в двоичный вид как 0b00000110
. В соответствии со следующей таблицей значение x06
указывает на режим устройства: LE General Discoverable Mode
и BR/EDR Not Supported
. | Бит | Значение | Описание |
| :-: | :-: | :-: |
| 1 | 0 | LE Limited Discoverable Mode |
| 2 | 1 | LE General Discoverable Mode |
| 3 | 1 | BR/EDR Not Supported |
| 4 | 0 | LE and BR/EDR Capable (Controller) |
| 5 | 0 | LE and BR/EDR Capable (Host) |
| 6 | 0 | Reserved |
x03
: данные x0F x18
представляют собой UUID сервиса
в большом порядке (big-endian). Значение 0x180F
соответствует Service Battery
, остальные два значения соответственно Service Device Information
и Service Human Interface Device
.
x19
: данные xC1 x03
также представлены в большом порядке (big-endian). Преобразование в десятичную систему даёт число 961
. Поиск в справочниках показывает, что значение Appearance
равно Keyboard
, то есть левый значок на изображении.
xFF
: данные x06 x00 x03 x00 x80
могут быть разделены на:
x06 x00
: компания-идентификатор в большом порядке (big-endian), значение 0x0006
соответствует компании Microsoft
.x03
: представляет технологию Swift Pair Beacon
от Microsoft.x00
: представляет сценарий использования Pairing over Bluetooth LE only
.x80
: представляет зарезервированное значение мощности передачи.
xFF
представляет тип AD, который может иметь различные параметры данных в зависимости от производителя.
Финальная суммарная запись:```python bytearray(b'\x02\x01\x06\x03\x03\x0f\x18\x03\x03\x0a\x18\x03\x03\x12\x18\x03\x19\xc1\x03\x06\xff\x06\x00\x03\x00\x80')
`Scanner` анализирует полученные данные после того, как сканировал эту радиофикационированную информацию и выявляет, что этот будущий `Peripheral` поддерживает общий режим открытия и не поддерживает `BR/EDR`. Внешний вид устройства представлен в виде значка «клавиатура», а также он предоставляет три сервиса: `Service Battery`, `Device Information` и `Human Interface Device` (это необходимые службы для работы как HID-устройства). Кроме того, устройство поддерживает технологию `Swift Pair Beacon` компании `Microsoft`.#### Какие действия предпринять, если объем данных для передачи превышает 31 байт?
Сначала подготовьте все обязательные данные для передачи, затем создайте дополнительный пакет данных `Scan Response` для передачи при необходимости. Когда `Scanner` начинает сканирование, он одновременно считывает данные из `Scan Response`, объединяет эти два набора данных и выполняет анализ содержимого, таким образом обеспечивая возможность передачи более чем 31 байт информации.
> `Scan Response` фактически не передается через радиочастотное излучение; это просто ответ на запрос `Scanner` при его активации.
Источники:
* [BLE.gap_advertise()](http://docs.micropython.org/en/latest/library/ubluetooth.html#ubluetooth.BLE.gap_advertise)
* [advertising_resp_payload()](https://gitee.com/walkline/micropython-beacon-library/blob/master/ble/tools.py#L147)
#### Как рассчитывается значение `tx_power`
Google называет это параметром `tx_power`, а Apple — `Measured Power`. Это среднее значение мощности передачи, которое зависит от производительности устройства. Расстояние между устройствами можно определить с помощью этого значения, но следует помнить, что надежность расчета снижается при расстоянии больше одного метра. Поэтому достаточно использовать четыре состояния (`Proximity State`) для оценки:
| Состояние | Описание |
| --- | --- |
| Immediate | Очень близко, возможно даже накладывание друг на друга |
| Near | От одного до трёх метров |
| Far | Устройство может принимать сигналы, но со слабой стабильностью |
| Unknown | Невозможно определить расстояние |Методика определения мощности передачи согласно Apple:
* Минимальная модель устройства должна быть `iPhone 5s`
* Скачать приложение `Air Locate` из `App Store`
* Убедиться, что телефон не заключён в защитный чехол, держите его вертикально и не закрывайте верхнюю часть экрана
* После запуска сигнала `Beacon` устройств, переместитесь на расстояние одного метра и проведите замеры `RSSI` минимум десять секунд
* Сортировка полученных значений `RSSI` по убыванию, удалите 10% самых высоких и 20% самых низких значений
* Вычислите среднее значение оставшихся значений `RSSI`, чтобы получить мощность передачи
Источники:
* [Getting Started with iBeacon.pdf](https://developer.apple.com/ibeacon/Getting-Started-with-iBeacon.pdf)
* [Artwork and Specifications](https://developer.apple.com/ibeacon/)
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Комментарии ( 0 )