Початок роботи з Bluetooth Low Energy на iOS - кодебі

  1. Вступ: Однією з головних особливостей специфікації Bluetooth 4 є Bluetooth Low Energy (BLE). Ця...
  2. Зв'язок BLE; центральний і периферійний:
  3. Режими зв'язку BLE
  4. Зв'язок BLE в режимі підключення; послуги та характеристики:
  5. Типовий випадок використання BLE
  6. BLE і Apple
  7. Розробка програм BLE на iOS
  8. Приклад Центрального iOS App
  9. Імітація периферійного пристрою з Mac
  10. Центральне додаток iOS
  11. Висновок
  12. Посилання:

Вступ:

Однією з головних особливостей специфікації Bluetooth 4 є Bluetooth Low Energy (BLE). Ця технологія також називається Bluetooth smart, ця технологія дозволяє комунікації периферійних пристроїв споживати набагато менше енергії, ніж звичайний Bluetooth. Іншою важливою перевагою є те, що користувачеві не потрібно вручну встановлювати пару з пристроєм, використовуючи параметри системи. Ця стаття служить швидким вступом до BLE і показує, як зробити iOS, який підключається до периферійної BLE.

Ця стаття служить швидким вступом до BLE і показує, як зробити iOS, який підключається до периферійної BLE

Визначення:

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

Ми можемо розпізнати периферію BLE, якщо вона містить у своїх специфікаціях терміни "Bluetooth smart" "Bluetooth Low Energy" або "BLE".

Тепер, коли у нас є периферійні пристрої BLE, ми побачимо в наступному розділі, як вони спілкуються.

Зв'язок BLE; центральний і периферійний:

У світі BLE існують два типи пристроїв: периферійний і центральний.

Периферійний пристрій - це пристрій, який надає послуги та дані для читання або запису.

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

У моделі клієнт / сервер центральну можна розглядати як клієнт, а периферійну - як сервер.

Деякі пристрої можуть діяти як центральні периферійні пристрої одночасно. Приклади iOS і Mac є таким прикладом.

Периферійний / центральний приклад:

  • Смарт-діапазони типу MI-Band є периферійними.
  • IPhone, який підключається до смарт-діапазону, виступає центральним.

Джерело: https://learn.adafruit.com/introduction-bluetooth-low-energy/gatt

У наступному розділі ми представимо можливі режими зв'язку в BLE.

Режими зв'язку BLE

Два режими зв'язку в BLE:

  • Режим реклами: периферія передає інформацію, яка буде доступна всім центрам навколо. Цей режим дозволяє периферійним пристроям бути відомими центральним центрам, таким чином, термін "реклама". У цьому режимі просту інформацію можна обмінювати за допомогою GAP-мовлення. У перспективі периферійного пристрою це режим "один до багатьох".
  • Режим підключення: дозволяє центральному обмінюватися складними даними з периферійним пристроєм. Протокол GATT описує, як відбувається розмова в цьому режимі. У перспективі периферійного пристрою підключений режим є режимом "один-до-одного".

Ось деякі додаткові правила:

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

У наступному розділі ми розглянемо більш детальну інформацію про зв'язок у підключеному режимі.

Зв'язок BLE в режимі підключення; послуги та характеристики:

Протокол GATT визначає, як центральна станція може зв'язуватися з підключеним периферійним пристроєм. Перш за все, структура даних визначається так:

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

Візьмемо, наприклад: монітор серцевого ритму - це периферійний пристрій BLE, який має профіль швидкості, який, у свою чергу, має 2 послуги: сервіс частоти серцевих скорочень і сервіс інформації про пристрій. Серцеві сервіси визначають характеристику зчитування, яка забезпечує виміряну частоту серцевих скорочень. Він також визначає характеристику запису для місця розташування датчика тіла. Інформаційні послуги пристрою містять характеристики моделі, версії прошивки тощо пристрою.

Кожна характеристика і послуга визначаються унікальним ідентифікатором UUID. Існують попередньо визначені UUID для багатьох служб і характеристик. Список можна знайти тут: https://www.bluetooth.com/specifications/gatt/services і https://www.bluetooth.com/specifications/gatt/characteristics . Звичайно, ви можете визначити свій власний UUID для ваших послуг і характеристик. Ви також не зобов'язані скасовувати попередньо визначені UUID. Офіційні BLE UUID знаходяться на 16 бітах, а індивідуальні приймають 128 біт. Вони зазвичай представлені в шістнадцятковій формі. Наприклад, UUID сервісу серцевого ритму 0x180D.

Джерело:

У наступному розділі описуються типові випадки використання BLE.

Типовий випадок використання BLE

Цей розділ описує деякі типові випадки використання BLE. Можливі й інші випадки використання, але ми опишемо найбільш поширені.

Додаток BLE Scan: цей випадок використання описує ситуацію, в якій ви хочете виявити і перевірити будь-яку периферію BLE в оточенні.

  • Периферійні пристрої рекламують послуги
  • Центральні пристрої сканують будь-яку рекламну периферію і виводять її на користувача
  • Користувач повинен вибрати периферійний пристрій зі списку доступних
  • Центральний підключається до вибраної периферії і відображає користувачеві доступні послуги
  • Користувач вибирає послугу
  • Центральний запитує периферійний пристрій щодо характеристик вибраних служб і відображає їх користувачеві
  • Користувач вибирає характеристику і виконує деякі дії в залежності від дозволених операцій: читання і / або запис і / або повідомлення.

Прикладами додатка iOS, які відповідають цьому випадку використання, є: BlueCap і LightBlue.

Інший типовий варіант використання:

  • Програма iOS сканує периферійні пристрої, які рекламують певні послуги.
  • Програма iOS підключається до певної периферії. Наприклад: розумна смуга.
  • Додаток потім збирає інформацію, використовуючи специфічні характеристики та заздалегідь визначені послуги. Наприклад: кількість кроків.
  • Додаток відключається від периферійного пристрою та підключається до нього безпосередньо наступного разу

Цей тип використання є більш простим і вимагає втручання користувача тільки для першого з'єднання. Програми, які обробляють певні апарати BLE, дотримуються цього типу використання. Наприклад, у нас є офіційний додаток MI Band. Додаток, яке ми збираємося розробити в кінці цієї статті, буде дотримуватися цього випадку використання.

У наступному розділі ми перевіримо, чи апаратне забезпечення Apple підтримує BLE.

BLE і Apple

Apple підтримала BLE у своєму програмному та апаратному забезпеченні рано. Ось невеликий перегляд

  • IOS5 SDK представив основу Bluetooth, що дозволяє взаємодіяти з пристроями BLE або як центральний, або як периферійний.
  • Всі iOS пристрої з iPhone 4S підтримують BLE.
  • Симулятор iOS підтримує BLE, якщо ваш Mac підтримує його. Першими комп'ютерами, які підтримують BLE, є:
  • Середина 2011 року MacBook Air
  • Mid-2011 mac mini
  • Середа-2012 сітківки і не сітківки MacBook pro
  • Наприкінці 2012 року iMacs

Знаючи це, якщо ви в даний час володієте Mac і iPhone або IPad, шанси дуже високі, що ви можете почати прямо зараз, щоб кодувати деякі програми BLE.

Розробка програм BLE на iOS

Коли ви розробляєте програму, яка взаємодіє з іншим обладнанням за допомогою BLE, вам потрібно спочатку задати ці три запитання:

  1. Чи можу я взаємодіяти з периферійним або центральним пристроєм?
  2. Що таке профіль, тобто послуги і характеристики периферії
  3. Яку структуру або бібліотеку я буду використовувати

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

По-друге, чітке визначення заздалегідь послуг і характеристик дозволяє програмі легко і правильно спілкуватися з пристроєм BLE. Без цього вона буде як сліпа комунікація.

Нарешті, вибір рамки, яка найбільше підходить вам, дуже важлива при розробці BLE-додатків. Перша найважливіша причина для мене полягає в тому, що нам потрібно виконати багато асинхронних завдань перед обміном перших байтів. Друга полягає в тому, що дроблення може вийти з ладу з багатьох причин. Тому вибір рамки, що полегшує ці завдання, є дуже актуальним.

З мого досвіду, мені довелося вибирати між двома рамками:

  • Основний Bluetooth, який є рамкою BLE, розробленою компанією Apple і включеною в iOS SDK з iOS5. Ця структура багато в чому спирається на делегатів і дуже добре задокументована. Однак, приклад коду все ще знаходиться в Objective-C. Ці рамки відчувають себе і старими.
  • BlueCap: це швидка оболонка навколо Core Bluetooth. Він підтримує iOS 9.0+ і вимагає Xcode 8.2? Вона спирається на ф'ючерси замість делегатів. Якщо ви новачок у майбутньому, як я, це займе у вас деякий час, щоб звикнути, але це того варте. Для мене це більш природно, ніж делегатів.

Оскільки проект, над яким я працював, підтримує iOS 10 і написаний у Swift 3. Я не соромився вибрати Blue Cap :). У наступному розділі ми створимо просте центральне додаток, яке зв'язується з периферійним пристроєм, який моделюється на Mac за допомогою Bleno.

Приклад Центрального iOS App

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

Імітація периферійного пристрою з Mac

Можна імітувати BLE периферійну з використанням Mac з різними методами. Перше, що приходить на думку, це зробити Core Bluetooth Mac додаток, що використовує периферійну роль. Також існує модуль node.js, який називається bleno ( https://github.com/sandeepmistry/bleno ), що дозволяє швидко реалізувати периферію BLE. У цій статті ми будемо використовувати bleno. Ось спосіб швидко розпочати:

  • Встановіть Xcode
  • Встановіть node.js
  • Відкрийте термінал і встановіть модуль bleno: npm install bleno
  • Завантажити сховище bleno github: https://github.com/sandeepmistry/bleno
  • Відкрийте e-термінал і перейдіть до папки examples / echo
  • Виконати вузол main.js. Якщо у вас виникли помилки, які говорять про відсутність модуля, вам потрібно встановити його за допомогою модуля npm install та спробувати ще раз

Коли ви виконаєте останню команду, ви побачите наступний вивід.

Ви тільки що перетворили ваш Mac на периферію BLE, яка рекламує послугу "ехо" за допомогою UUID EC00. Перевірте це у файлі main.js:

Коли ми підключаємося до Mac, характеристика з UUID “ec0e” буде доступна з властивостями читання, запису та повідомлення. Це визначено у файлі specifications.js, який визначає також, як обробляються властивості читання, запису та повідомлення.

Тепер, коли ми маємо повністю функціональну периферію. Давайте розробимо невелике додаток iOS, що взаємодіє з цим периферійним пристроєм.

Центральне додаток iOS

Центральне додаток буде простим. Він здійснює пошук пристроїв, що рекламують послуги "ехо", а потім підключається до першого пристрою, який він знаходить. Далі, додаток дозволить нам читати і писати характеристику 'ec0e'. Ось кроки, необхідні для ініціалізації проекту:

Створіть нову програму для одного перегляду

Налаштуйте свій проект для використання swift

Налаштуйте свій проект для використання swift

Після завершення створення проекту ми додамо структуру iOS BlueCap https://github.com/troystribling/BlueCap . Там різні додати рамки, я дозволяю вибрати той, який вам найбільше підходить :). Не забудьте додати BlueCapKit як вбудовану бібліотеку!

Ми також додамо CoreBluetooth Framework проект, оскільки BlueCap є обгорткою для CoreBluetooth.

Далі додайте центральні можливості у властивості проекту. Для цього ввімкніть фонові режими та встановіть прапорець "Використовує аксесуар Bluetooth LE".

Для цього ввімкніть фонові режими та встановіть прапорець Використовує аксесуар Bluetooth LE

Наша розкадровка містить один ViewController, який показує індикатор завантаження під час сканування для характеристики, яку ми хочемо використовувати. Як тільки ми виявимо характеристику, ViewController показує вигляд, який дозволяє читати і записувати характеристику.

Як тільки ми виявимо характеристику, ViewController показує вигляд, який дозволяє читати і записувати характеристику

Наш контролер головного перегляду виконує такі завдання:

  • Ініціалізує CentralManager, який є класом, який дозволяє сканувати периферійні пристрої
  • Сканування для периферійних пристроїв, які рекламують послугу «ec00»
  • Ми знаходимо першу периферію, що рекламує таку послугу; ми підключаємося до нього
  • Потім ми відкриваємо послугу “ec00”. Цей крок може здатися повторенням кроку 2, але це дуже важливо, оскільки він створює об'єкт Service, який допоможе нам отримати бажану характеристику.
  • Після виявлення сервісу ми використовуємо екземпляр служби, щоб виявити характеристику "ec0e" і зареєструвати для сповіщень

Також можна використовувати один ланцюг для виконання всіх попередніх кроків.

Після отримання посилання на об'єкт Characteristic, ми також можемо читати і записувати дані.

Висновок

Ця стаття є коротким вступом до Bluetooth Low Energy. Це стандарт Bluetooth, який дозволяє спілкуватися зі зменшеною енергією і без необхідності в парі в настройках системи. Ми проілюстрували центральну реалізацію Bluetooth на iOS, яка підключається на периферійному пристрої, модельованому на Mac.

Ми можемо зробити більше речей за допомогою BLE. Наприклад, ми можемо написати власну програму для розумного діапазону. Ми також можемо, наприклад, обладнати Arduino чіпом BLE і робити з ним смішні речі.

Вихідний код доступний тут: https://github.com/yostane/iOS-BlueCap-Example

Щасливе кодування :).

Посилання:

https://oleb.net/blog/2013/04/starting-bluetooth-low-energy-development-ios/

https://docs.mbed.com/docs/ble-intros/en/latest/Introduction/BLEInDepth/

https://stackoverflow.com/questions/17732321/peripheral-and-central-at-the-same-time-on-ios

h ttps: //learn.adafruit.com/introduction-bluetooth-low-energy/gatt

https://www.bluetooth.com/specifications/generic-attributes-overvie

rss