Bluetooth LE

Bluetooth LE

ua_hack

Доброго часу доби, мої маленькі любителі анонімності 😏

Існує безліч варіантів використання Bluetooth. Особливо, коли нам потрібно передати інформацію на зовнішній пристрій, такі як смартфон або інший пристрій IoT. Коли виникає така необхідність, однією з перших технологій, яка використовується, є Bluetooth Low Energy - Bluetooth з низьким енергоспоживанням, також відомий як Bluetooth LE або Bluetooth Smart.

У цій статті ми розглянемо:

●      Що таке Bluetooth LE

●      Як працює радіо Bluetooth LE

●      Що таке профіль GAP

●      Що таке профіль GATT

Вступ

Одне з найбільш поширених непорозумінь користувачів, не знайомих із технологією Bluetooth LE, полягає в тому, що Bluetooth LE – це полегшена версія Bluetooth Classic. Це неправда, оскільки Bluetooth Classic і Bluetooth LE – це два принципово різних протоколи з різними цілями проектування. Більшість бездротових технологій, таких як Wi-Fi і Bluetooth Classic, були розроблені для вирішення широкого спектру завдань, проте конструкція Bluetooth LE трохи від них відрізняється. Спочатку був створений Nokia,  більш відомий як Wibree, основною ж метою розробки Bluetooth LE було створення стандарту радіозв'язку з мінімально можливим енергоспоживанням, оптимізованого для низької вартості, низької складності і низької пропускної здатності.

Специфікації Bluetooth LE були випущені як частина специфікацій Bluetooth 4.0 Core в червні 2010 року. Основні характеристики Bluetooth контролюються і оновлюються Special Interest Group (SIG) - спеціальною групою за інтересами Bluetooth.

Ви можете знайти інформацію про Bluetooth і завантажити специфікації з їх сайту https://www.bluetooth.com. Проте, якщо вас все ж таки бентежать 2500 сторінок специфікацій Bluetooth, ми б порекомендували вам прочитати цю статтю.

Швидкість впровадження Bluetooth LE була набагато вище, ніж у більшості інших бездротових технологій. Причина цього – прийняття стандарту Bluetooth LE в мобільній індустрії, де Apple і Google доклали значних зусиль для включення надійних стеків Bluetooth LE в операційні системи iOS та Android, і для розробки простих у використанні та зрозумілих API-інтерфейсів Bluetooth LE для розробників. Це спрощує розробникам створення і взаємодію з пристроями, що мають радіомодулі Bluetooth LE.

Причина, чому мобільна індустрія наполягає на впровадженні Bluetooth LE, полягає в тому, що пристрої, які підключаються за допомогою Bluetooth LE, споживають набагато менше енергії, звідси і назва Bluetooth Low Energy, в порівнянні з іншими бездротовими технологіями, такими як Bluetooth Classic та Wi-Fi. Це призводить до збільшення часу автономної роботи телефонів, що робить клієнтів щасливішими. Пристрої Bluetooth бувають трьох типів, кожен з яких підтримує або Bluetooth Classic, або Bluetooth LE, або і те, і інше. У наступній таблиці показано, що підтримує кожен тип:

Хоча специфікації Bluetooth 5.0 були випущені в червні 2016 року, на момент написання цієї статті було дуже мало модулів Bluetooth для Arduino або ESP що підтримують цю нову специфікацію. Фактично, в даний час також дуже мало підтримується специфікації Bluetooth 4.1 або 4.2, тому в цій статті ми зосередимося на специфікаціях Bluetooth 4.0, знаючи, що Bluetooth 5.0, 4.2 і 4.1 сумісні з цим стандартом. Щоб розробляти пристрої IoT, що використовують Bluetooth LE, нам дійсно потрібно розуміти технологію, щоб ми знали, коли насправді її використовувати. Тому ми заглибимося в цю технологію набагато далі. Ми почнемо з вивчення характеристик радіотехнології.

Радіо Bluetooth LE

Оскільки ми будемо використовувати Bluetooth LE 4.0 для всіх проектів в цій книзі, такі специфікації ставляться до цього стандарту:

Bluetooth LE має максимальну дальність дії 100 метрів, однак це залежить від радіоелектронної обстановки. Коли підключені пристрої знаходяться в приміщенні, дальність дії буде значно скорочена через стіни та інших перешкоди, через які повинен проходити радіосигнал. Як правило, діапазон близько 100 метрів обмежений, якщо тільки ми не перебуваємо на відкритому просторі. Навіть в цьому випадку рідко вдається досягти 100-метрової дальності.

Радіомодуль Bluetooth LE працює на більш ніж 40 каналах в діапазоні від 2,402 ГГц до 2,481 ГГц. З цих каналів 37 зарезервовані для передачі даних і три – для реклами. Причина множинності каналів - Bluetooth LE використовує технологію frequency-hopping для зменшення перешкод. Три рекламних канали використовуються для виявлення пристроїв. Після виявлення пристрою один і той же канал використовується для обміну початковими параметрами з'єднання. Після обміну параметрами з'єднання для зв'язку використовуються звичайні канали даних.

На наступному малюнку показані канали, використовувані Bluetooth LE:

Bluetooth LE розроблений для роботи з низьким енергоспоживанням, і кращий спосіб уникнути споживання енергії - це вимикати радіомодуль якомога частіше і на якомога довший період. Для Bluetooth LE це досягається шляхом відправки коротких пакетів на певній частоті, а в проміжках між цими пакетами радіомодуль відключається. Це часто також називають стрибком в режим очікування, оскільки радіоприймач, по суті, відправляє інформацію так швидко, як тільки може, а потім відключається на короткий період часу. Найбільша жертва, яку ми приносимо на користь низького енергоспоживання Bluetooth LE, - це пропускна здатність. На попередньому графіку ми бачили, що у радіомодуля Bluetooth LE максимальна швидкість передачі даних становить 1 Мбіт/с. Однак ми також вказали, що пропускна здатність складає всього 0,125 Мбіт/с. Це означає, що радіомодуль теоретично може передавати 1 Мбіт/с, однак з урахуванням обмежень, накладених на радіостанцію для економії енергії, максимальна швидкість передачі даних складає 0,125 Мбіт/с. У реаліях ми фактично ніколи не побачимо нічого близького до цієї швидкості передачі даних. Давайте розглянемо гонку за простоями і обмеження, що накладаються стандартами Bluetooth LE, щоб зрозуміти, чому швидкість передачі даних така низька. Для початку, специфікації Bluetooth LE визначають, що інтервал з'єднання, який є інтервалом часу між двома послідовними подіями з'єднання (коли два пристрої обмінюються даними), повинен становити від 7,5 мс до 4 с. Це означає, що, якщо ми встановимо інтервал підключення на мінімально можливий час (7,5 мс), у нас буде максимум 133 події підключення в секунду. Радіостанція може передавати до шести пакетів даних на одну подію з'єднання, причому кожен пакет даних може містити максимум 20 байтів призначених для користувача даних. Це дає максимум 120 байтів на кожне з'єднання.

Якщо ми складемо всю інформацію разом, ми отримаємо наступну формулу:

Це показує, що максимальна пропускна здатність даних буде 0,125 Мбіт/с; однак, як ми згадували раніше, навіть це число ніколи не буде досягнуто, тому що зазвичай ми ніколи не вичерпуємо максимальну кількість байтів на пакет або не маємо 133 подій з'єднання за одну секунду. Самі пристрої можуть додавати додаткові обмеження на інтервал з'єднання і кількість пакетів даних на кожне з'єднання. У кращому випадку ми зазвичай бачимо близько 5-10 Кбайт в секунду для пропускної здатності даних. Це означає, що ми зазвичай хочемо використовувати технологію Bluetooth LE тільки при обміні короткими пакетами даних і уникати цього, коли ми хочемо обмінюватися великими обсягами або навіть передавати дані в потоці.

Тепер давайте подивимося на топологію мережі для з'єднань Bluetooth LE.

Топологія мережі

Пристрої Bluetooth LE можуть зв'язуватися з іншими пристроями Bluetooth LE за допомогою трансляції або встановленого з'єднання. У кожного з цих методів є свої переваги і недоліки. Ми почнемо з розгляду топології мережі, коли пристрої спілкуються за допомогою широкомовної передачі. У проектах в цій статті ми зосередимося на обміні даними за встановленим з'єднанням, але добре знати, як можна обмінюватися даними за допомогою широкомовної передачі.

Bluetooth LE мовлення

На схемі показана топологія для широкомовної мережі:

При трансляції визначені дві ролі:

Broadcaster – цей пристрій відправляє не підключені рекламні пакети через задані інтервали часу на будь-який інший пристрій, що прослуховує

Спостерігач – цей пристрій сканує рекламні частоти, щоб отримати не підключені рекламні пакети, які розсилають пристрої. Широкомовна передача даних – єдиний спосіб, яким пристрій може відправляти дані на кілька пристроїв. Стандартний broadcast пакет може мати корисне навантаження з 31 байту даних, які зазвичай використовуються для опису широкомовної передачі і її можливостей. Однак він також може включати будь-яку призначену для користувача інформацію, яку ми хочемо транслювати на інші пристрої.

Bluetooth LE також підтримує другий рекламний payload, так званий scan response - відгук на сканування, який може включати додатковий 31 байт даних.

Широкомовна передача виконується швидко і легко, якщо ми хочемо передавати невеликі обсяги даних на кілька пристроїв, проте, дані не є безпечними або конфіденційними. Безпека зазвичай є головною причиною уникати використання широкомовних пакетів. Однак ще одна важлива причина уникати використання широкомовних пакетів полягає в тому, що спостерігач не має можливості відправляти будь-які дані назад.

Тепер давайте подивимося на з'єднання Bluetooth LE.

З'єднання Bluetooth LE

На схему показано, як працюють з'єднання Bluetooth :

Як і в випадку топології мовлення Bluetooth LE, топологія підключення також визначає два елементи:

Central – центральним зазвичай є такий пристрій, як ноутбук, планшет або телефон. Ці пристрої будуть сканувати рекламні канали і прослуховувати рекламні пакети. Коли пристрій знайдено, центральна станція може спробувати встановити з'єднання з пристроєм. Після того, як з'єднання встановлено, центральний пристрій керує синхронізацією і ініціює обмін даними. Центральний пристрій може підключати більше одного периферійного пристрою.

Peripheral – периферійним пристроєм зазвичай є пристрій, такі як розумний годинник, метеостанція або медичний пристрій. Ці пристрої періодично відправляють пакети з можливістю підключення і приймають вхідні з'єднання. Після того, як з'єднання встановлено, периферійний пристрій зазвичай буде слідувати синхронізації її центру і обмін даними по запиту центру. Периферійний пристрій може підключатися тільки до одного центрального пристрою.

Периферійний пристрій зазвичай буде рекламувати, поки центральний пристрій не виявить його і не запросить з'єднання. Як тільки з'єднання буде встановлено, периферійний пристрій припинить рекламу, і тоді два пристрої зможуть обмінюватися даними. Обмін даними в цій топології може відбуватися в обох напрямках, при цьому периферійний та центральний пристрої можуть як відправляти, так і отримувати дані. Коли центральний і периферійний пристрої встановлюють з'єднання, дані об'єднуються в блоки, так звані services and characteristics – послуги і характеристики. Ми розглянемо докладніше, коли будемо розглядати Generic Attribute Profile - Загальний профіль атрибутів (GATT) трохи пізніше в цій статті. Тепер необхідно зрозуміти, що периферійний пристрій Bluetooth LE може мати кілька характеристик, які використовуються для відправки і отримання даних. Ці характеристики організовані або згруповані в служби.

Найбільшою перевагою встановлення з'єднання Bluetooth LE є те, що ви можете мати кілька характеристик для організації даних, і кожна з цих характеристик буде мати власні права доступу і описові метадані. Ще одна перевага – це можливість встановлювати безпечні зашифровані з'єднання. З Bluetooth 4.0 пристрій може діяти як центральний або периферійний, але не те і інше одночасно. Починаючи з Bluetooth 4.1, це обмеження було знято, і в більш нових версіях Bluetooth LE пристрій може діяти як периферійне, центральне або і те, і інше.

Тепер подивимося на профіль Bluetooth LE.

Профілі Bluetooth LE

Bluetooth LE визначає два типи профілів. Це профілі, які визначають базовий режим роботи, необхідний всім пристроям Bluetooth LE для забезпечення взаємодії (Generic Access Profile і GATT), або профілі, які використовуються для конкретних випадків, наприклад, як профіль пристрою працездатності або профіль близькості. У цьому розділі ми не будемо вдаватися в конкретні варіанти використання цих профілів, тим не менш, ми розглянемо як Generic Access Profile (GAP), так і Generic Attribute Profile (GATT). Розпочнемо з розгляду GAP.

Generic access profile (GAP) - Загальний Режим доступу

GAP визначає, як пристрої з'єднуються один з одним, щоб гарантувати сумісність пристроїв. Він визначає, як пристрої Bluetooth LE виявляють один одного, встановлюють та завершують безпечні з'єднання, транслюють дані і конфігурують пристрої. Це найнижчий рівень стека Bluetooth LE, який ми розглянемо в цій статті.

Раніше в цій статті ми вже бачили, що пристрій Bluetooth LE може перебувати в одному з двох станів. У топології мовлення пристрій може бути або мовником (підлеглим), або спостерігачем (провідним). Якщо з'єднання між двома пристроями встановлено, вони стають або центральними (провідними), або периферійними (веденими). Ми ввели тут терміни провідний і ведений, щоб проілюструвати стани, в яких можуть знаходитися пристрої. На наступному малюнку показані ці стани:

Обидва типи пристроїв запускаються в стані простою або очікування. Це початковий стан при reboot’i пристрою. Підлеглий пристрій потім стане рекламодавцем, де він рекламує певні дані, дозволяючи будь-якому головному пристрою знати, що це пристрій, що підключається і які послуги він пропонує. Після стану очікування, провідний пристрій почне сканування ведених пристроїв, які передають рекламу. Коли провідний пристрій отримує рекламу, він відправляє рекламодавцеві запит на сканування, а ведений пристрій відповідає на сканування. Це процес виявлення пристрою. Після закінчення процесу виявлення пристрою, якщо майстер бажає підключитися до рекламного пристрою, він ініціює з'єднання. При цьому майстер вкаже необхідні параметри. Як тільки з'єднання буде встановлено, пристрої візьмуть на себе свої ролі як провідні та ведені. З Bluetooth LE 4.0 ведений пристрій може мати тільки один головний пристрій. Крім того, з Bluetooth LE 4.0 пристрої можуть діяти як провідні або ведені, але не обидва одночасно. У більш пізніх версіях специфікацій Bluetooth ці обмеження були зняті. Я знаю, що ми вже кілька разів згадували про це в цій статті, але про це важливо не забувати при розробці пристроїв.

Ми згадували, що майстер вказує кількість параметрів при ініціації з'єднання. Ось деякі з них:

Connection Interval – Інтервал з'єднання: з Bluetooth LE використовує схему стрибкоподібної перебудови частоти, два пристрої, які обмінюються даними, знають, який канал для передачі / прийому включений, коли перемикати канали і коли встановлювати з'єднання. Інтервал часу між спробами з'єднання відомий як інтервал з'єднання.

Slave Latency – Затримка веденого дає провідному пристрою можливість пропустити певну кількість подій з'єднання. Підлеглий пристрій не має пропускати більше, ніж кількість подій з’єднання, визначених цим параметром.

Supervision Time-out – Тайм-аут супервізії - це максимальний час між двома успішними подіями з'єднання. Якщо цей час буде перевищено, пристрій завершить з'єднання, а провідний пристрій повернеться в непідключеному стані.

При прийнятті рішення про ці налаштування необхідно враховувати ряд факторів. Основна увага приділяється енергоспоживанню і швидкості передачі даних. У міру збільшення пропускної здатності пристрій буде споживати більше енергії. Наприклад, якщо ми зменшимо інтервал підключення, тим самим збільшивши кількість спроб підключення в секунду, енергоспоживання пристрою збільшиться, оскільки радіомодуль буде працювати більшу частину часу. Зменшуючи затримку веденого, радіомодуль знову стане активніше. Отже, це також збільшить споживання енергії. При роботі з радіомодулем Bluetooth LE вам необхідно знайти баланс між споживаною потужністю і пропускною спроможністю, необхідною для вашого проекту. Не існує магічного співвідношення, придатного для всіх типів пристроїв, це те, що вам потрібно буде розглянути для кожного проекту. Тепер подивимося на профіль GATT.

Профіль універсального атрибута (GATT)

У той час як профіль GAP визначає низькорівневі взаємодії пристроїв Bluetooth LE (реклама і з'єднання), профіль GATT визначає деталі того, як пристрої обмінюються даними. GATT також є еталонною структурою для всіх профілів на основі атрибутів, які визначають конкретні варіанти використання, такі як профілі частоти серцевих скорочень і артеріального тиску.

Як і профіль GAP, профіль GATT визначає дві ролі – клієнт та сервер. На схемі показано як це працює. Ролі спочатку можуть здатися дивними, однак, як тільки ми побачимо, як пристрої Bluetooth LE обмінюються даними, все стане більш зрозумілим. Роль клієнта в профілі GATT відповідає головній ролі в профілі GAP, а роль сервера в профілі GATT – підпорядкованій ролі. Наступна діаграма ілюструє це:

На цій діаграмі ми бачимо, що у одного клієнта може бути кілька серверів, однак у кожного сервера може бути тільки один клієнт. У профілі GATT клієнт (центральна роль в GAP) запитує інформацію у сервера (периферійний пристрій в GAP). Хоча ми показуємо взаємозв'язок між ролями GATT і GAP, варто відзначити, що ролі GATT і GAP фактично незалежні один від одного, і в більш пізніх версіях специфікацій Bluetooth LE пристрій може діяти як центральний, так і периферійний пристрій.

Найменший об'єкт даних, профілю GATT – є атрибутом. Атрибут – це адресована частина інформації, розташована на сервері, доступна і може бути змінена клієнтом. Кожен атрибут унікально ідентифікується UUID (універсальний унікальний ідентифікатор), який може бути 16-бітовим або 128-бітовим числом. Цей ідентифікатор відомий як дескриптор. Профіль GATT визначає набір дозволів, пов'язаних з усіма атрибутами. Дозволи визначають, які операції можуть виконуватися з кожним атрибутом.

Дозволи:

1) Access Permissions – дозволу доступу визначають, які дії можуть бути виконані з атрибутом. Кожен атрибут матиме одне з наступних дозволів:

None – атрибут не може бути прочитаний або записаний клієнтом.

Writable (тобто є можливість запису) – атрибут може бути записаний клієнтом.

Readable – атрибут може бути прочитаний клієнтом Readable and Writable (тобто, доступно для читання і запису) – атрибут може бути прочитаний і записаний клієнтом.

2) Encryption (шифрування) – дозвіл на шифрування визначає рівень шифрування, необхідний клієнту для доступу до атрибуту.

No Encryption (режим безпеки 1, рівень 1) – шифрування не використовується

Unauthenticated Encryption (режим безпеки 1, уровень 2) – з'єднання повинно бути зашифровано; проте ключі шифрування не потребують аутентифікації

Authenticated Encryption (режим безпеки 2, рівень 2) – з'єднання повинно бути зашифровано, а ключі шифрування повинні бути автентифіковані.

3) Authorization – дозвіл авторизації визначає, чи повинен користувач бути авторизований для доступу до атрибуту.

No Authorization – для доступу до атрибуту авторизація не потрібна.

Authorization Required – для доступу до атрибуту необхідно ввійти в систему.

GATT визначає сувору ієрархію, яка впорядковує атрибути. Атрибути згруповані в служби, кожна з яких може містити нуль або більше характеристик. Ці характеристики можуть включати нуль або більше дескрипторів. Послуги, характеристики і дескриптори - все це атрибути на сервері GATT.

На наступному малюнку показана ієрархія:

Служби використовуються для групування пов'язаних атрибутів в загальну сутність. Кожна служба ідентифікується унікальним UUID, який може бути або 16-бітовим для офіційно прийнятих типів сервісів, або 128-бітовим для користувача типів сервісів.

Ви можете побачити список офіційно прийнятих сервісів на сайті Bluetooth SIG.

Якщо ви подивитесь на сервіс Heart Rate, ви побачите, що цей сервіс містить три характеристики. Характеристики – це контейнери для даних, де кожна характеристика інкасулює окрему точку даних. Як і у випадку зі службами, характеристика ідентифікується 16-бітовим або 128-бітовим UUID. Характеристики – це основна точка входу, з якої клієнт Bluetooth LE взаємодіє з сервером.

Ви можете знайти список офіційно прийнятих характеристик на сайті Bluetooth SIG.

Дозволи на доступ для кожної характеристики повинні бути доступні тільки для читання або тільки для запису. Дуже рідко характеристика має дозвіл на читання і запис одночасно. Як приклад, якби ми хотіли створити простий послідовний інтерфейс для нашого пристрою Bluetooth LE, ми б створили характеристику TX для передачі даних з дозволом тільки для читання для клієнта і характеристику RX для отримання даних з дозволом тільки на запис для клієнта. Ми не хотіли б створювати єдину характеристику, у якій були б права на читання і запис, тому що, коли клієнт записує в неї дані, сервер може їх перезаписати. Дескриптори використовуються для надання клієнтським пристроям додаткової інформації про характеристики і їх значення.

Ви можете знайти список офіційно прийнятих дескрипторів на сайті Bluetooth SIG.

Зазвичай сервер просто відповідає на запит клієнта про дані з характеристик, проте сервер може ініціювати обмін даними за допомогою останніх оновлень ініційованих сервером. Існує два типи оновлень, а саме:

Повідомлення про зміну значення характеристики використовуються, коли сервер налаштований для повідомлення клієнта про зміну значення характеристики, але не очікує, що клієнт підтвердить його.

Індикація зміни значення характеристики використовується, коли сервер налаштований для вказівки клієнту, що значення характеристики змінилося, і очікує, що клієнт підтвердить, що він отримав індикацію.

У наступній статті ми продовжимо тему і розглянемо класичний Bluetooth.


Report Page