1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/walkline-micropython-beacon-library

Присоединиться к Gitlife
Откройте для себя и примите участие в публичных проектах с открытым исходным кодом с участием более 10 миллионов разработчиков. Приватные репозитории также полностью бесплатны :)
Присоединиться бесплатно
Клонировать/Скачать
Внести вклад в разработку кода
Синхронизировать код
Отмена
Подсказка: Поскольку Git не поддерживает пустые директории, создание директории приведёт к созданию пустого файла .keep.
Loading...
README.md

Библиотека MicroPython для работы с Beacon

Введение

Библиотека MicroPython для взаимодействия с Beacon на ESP32.

Основные понятия

Рассмотрим некоторые аспекты работы с Beacon, чтобы избежать недопонимания.

Роли Bluetooth устройств

  • Роль Бродкаста (Адвертайзер) : Чтобы Bluetooth устройства могли быть обнаружены другими устройствами и использоваться, они должны первым делом работать в роли Адвертайзера (broadcast role, рекламщик, базовая станция и т.д.), передавая данные, такие как имя устройства, адрес MAC, предоставляемые услуги и внешний вид.

  • Роль Наблюдателя (Сканнер) : Когда есть Адвертайзер, который отправляет данные, должен быть Сканнер, который наблюдает за этими данными и получает ключевые данные от другого устройства, такие как адрес MAC, уровень сигнала RSSI, возможность подключения и содержание данных.

  • Роль Центра (Клиент GATT) : После того, как Сканнер получил ключевые данные, он может выбрать подключение к Адвертайзеру, тогда Сканнер становится центральным устройством (Центр).

  • Роль Периферийного устройства (Сервер GATT) : Когда Центр выбирает подключиться, Адвертайзер становится периферией (Периферийное устройство) и прекращает передачу данных.> Наши устройства Beacon для обеспечения непрерывной передачи данных должны быть недоступны для подключения, то есть работать только в роли Advertiser.Источники:

  • ubluetooth — низкоуровневый Bluetooth

Анализ формата данных для передачи

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

  • Длина данных (Length)
  • Тип данных (AD_TYPE)
  • Содержимое данных (Data)

Каждое сообщение имеет ограничение по длине до 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, то есть левый значок на изображении.

    Изображение Appearance

  • 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 )

Вы можете оставить комментарий после Вход в систему

Введение

A MicroPython library providing APIs to interact with Beacons Развернуть Свернуть
MIT
Отмена

Обновления

Пока нет обновлений

Участники

все

Недавние действия

Загрузить больше
Больше нет результатов для загрузки
1
https://api.gitlife.ru/oschina-mirror/walkline-micropython-beacon-library.git
git@api.gitlife.ru:oschina-mirror/walkline-micropython-beacon-library.git
oschina-mirror
walkline-micropython-beacon-library
walkline-micropython-beacon-library
master