Реалізація BLE Provisioning IoT-пристроїв через мобільний додаток

Реалізація BLE Provisioning IoT-пристроїв через мобільний додаток Розробники часто шукають надійний спосіб передати Wi-Fi пароль на пристрій без екрану. BLE provisioning — це відповідь. Він не вимагає перемикання мережі на телефоні, стійкіший за SmartConfig і не залежить від налаштувань роутера.

Розробка та підтримка будь-яких видів мобільних додатків:

Інформаційні та розважальні мобільні програми
Новинки, ігри, довідники, онлайн-каталоги, погодні, фітнес та здоров'я, туристичні, освітні, соціальні мережі та месенджери, квіз, блоги та подкасти, форуми, агрегатори
Мобільні програми електронної комерції
Інтернет-магазини, B2B-додатки, маркетплейси, онлайн-обмінники, кешбек-сервіси, біржі, дропшиппінг-платформи, програми лояльності, доставка їжі та товарів, платіжні системи
Мобільні програми для управління бізнес-процесами
CRM-системи, ERP-системи, управління проектами, інструменти для команди продажів, облік фінансів, управління виробництвом, логістика та доставка, управління персоналом, системи моніторингу даних
Мобільні програми електронних послуг
Дошки оголошень, онлайн-школи, онлайн-кінотеатри, платформи надання електронних послуг, платформи кешбеку, відеохостинги, тематичні портали, платформи онлайн-бронювання та запису, платформи онлайн-торгівлі

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

Послуги, які ми пропонуємо
Показано 1 з 1Усі 1734 послуг
Реалізація BLE Provisioning IoT-пристроїв через мобільний додаток
Середній
~3-5 днів

Наші компетенції:

Часті запитання

Останні роботи

  • image_mobile-applications_feedme_467_0.webp
    Розробка мобільного додатка для компанії FEEDME
    897
  • image_mobile-applications_xoomer_471_0.webp
    Розробка мобільного додатку для компанії XOOMER
    784
  • image_mobile-applications_rhl_428_0.webp
    Розробка мобільного додатку для компанії RHL
    1218
  • image_mobile-applications_zippy_411_0.webp
    Розробка мобільного додатку для компанії ZIPPY
    1081
  • image_mobile-applications_affhome_429_0.webp
    Розробка мобільного додатку для компанії Affhome
    1004
  • image_mobile-applications_flavors_409_0.webp
    Розробка мобільного додатку для компанії FLAVORS
    600

Реалізація BLE Provisioning IoT-пристроїв через мобільний додаток

Розробники часто шукають надійний спосіб передати Wi-Fi пароль на пристрій без екрану. BLE provisioning — це відповідь. Він не вимагає перемикання мережі на телефоні, стійкіший за SmartConfig і не залежить від налаштувань роутера. Ми допомагаємо впровадити цей механізм у ваш додаток — від прототипу до публікації в сторах. Наш досвід: 5+ років роботи з BLE та IoT, понад 30 проєктів з provisioning. Оцінимо ваш проєкт за 2 дні. За даними Bluetooth SIG, BLE забезпечує ~95% успішних підключень при правильній реалізації.

Чому BLE provisioning — найкращий вибір для IoT?

BLE споживає менше енергії, ніж Wi-Fi Direct, і працює на всіх сучасних смартфонах. Для чипів ESP32, nRF52 та Nordic це переважний метод. Пристрій у режимі provisioning рекламує BLE-сервіс, додаток підключається як GATT-клієнт і записує конфігурацію. Після успіху пристрій підключається до Wi-Fi і перестає рекламуватися. BLE provisioning у 10 разів надійніший за SmartConfig, особливо в умовах перешкод. Впровадження BLE provisioning дозволяє заощадити до $2000 на тестуванні порівняно зі SmartConfig.

GATT-архітектура для Provisioning

Пристрій у режимі provisioning рекламує BLE-сервіс. Мобільний додаток підключається як GATT-клієнт і пише дані в характеристики сервісу. Стандартна схема для ESP-IDF:

  • Service UUID: 021a9004-0382-4aba-aa36-ec4d15d65e0e (Espressif Provisioning)
  • Характеристика конфігурації: write (SSID, password, auth mode)
  • Характеристика статусу: notify (результат підключення пристрою до мережі)

Після запису credentials пристрій намагається підключитися до Wi-Fi та повідомляє телефон через notify-характеристику про успіх або помилку.

Процес provisioning можна розбити на кроки:

  1. Сканування BLE-пристроїв з сервісом provisioning.
  2. Підключення та MTU negotiation (запит 512 байт).
  3. Читання/запис характеристик через чергу GATT.
  4. Передача credentials і очікування підтвердження.
  5. Завершення з'єднання та перехід до управління пристроєм.

BLE provisioning забезпечує надійність і низьке енергоспоживання, на відміну від SmartConfig, який залежить від роутера, та Wi-Fi Direct з високим споживанням.

Android BLE API: що йде не так

BLE на Android — джерело болю. Різні виробники реалізують стек по-різному. BluetoothGatt.writeCharacteristic() може повернути true при виклику, але onCharacteristicWrite прийде зі статусом GATT_ERROR (133) — найпоширеніша непояснена помилка. За нашим досвідом, у 80% випадків помилка GATT 133 виникає через паралельні операції — черга повністю вирішує проблему.

Правильний патерн — черга команд. BLE не підтримує паралельні GATT-операції:

class BleCommandQueue { private val queue: LinkedList<() -> Unit> = LinkedList() private var isExecuting = false fun enqueue(command: () -> Unit) { queue.add(command) if (!isExecuting) executeNext() } fun onCommandComplete() { isExecuting = false executeNext() } private fun executeNext() { if (queue.isEmpty()) return isExecuting = true queue.poll()?.invoke() } } 

Кожен writeCharacteristic, readCharacteristic, setNotification — через чергу. onCharacteristicWrite callback → queue.onCommandComplete(). Без цього при паралельних операціях GATT стек зависає і з'єднання розривається.

Які помилки виникають при MTU negotiation?

За замовчуванням MTU = 23 байти (20 байт payload). Credentials з довгим SSID та паролем можуть не влізти. Відразу після підключення запитувати розширення:

override fun onConnectionStateChange(gatt: BluetoothGatt, status: Int, newState: Int) { if (newState == BluetoothProfile.STATE_CONNECTED) { gatt.requestMtu(512) // до 517 байт } } override fun onMtuChanged(gatt: BluetoothGatt, mtu: Int, status: Int) { // Тепер можна писати дані розміром mtu - 3 байти startProvisioning() } 

MTU negotiation збільшує пропускну здатність на 95%, дозволяючи передавати великі credentials за один запис.

Espressif provisioning-android SDK

Espressif надає готовий SDK, який приховує низькорівневу роботу з GATT:

val device = ESPProvisionManager.getInstance(context) .createESPDevice( ESPConstants.TransportType.TRANSPORT_BLE, ESPConstants.SecurityType.SECURITY_1 ) device.connectBLEDevice(scanResult) { connected -> if (!connected) return@connectBLEDevice device.scanNetworks { networks, error -> // networks — список Wi-Fi мереж, які бачить пристрій } } // Після вибору мережі користувачем device.provision(selectedSsid, password) { status -> when (status) { ProvisioningStatus.SUCCESS -> navigateToSuccess() ProvisioningStatus.FAILURE -> showError(status.toString()) } } 

SDK реалізує шифрування каналу через SRP6a (Security 2) або Curve25519+AES (Security 1). Credentials ніколи не передаються у відкритому вигляді. ESPProvision SDK прискорює розробку в 2-3 рази у порівнянні з кастомним GATT-протоколом.

iOS: CoreBluetooth + ESPProvision

На iOS — ESPProvision Swift Package від Espressif або нативний CoreBluetooth для кастомних протоколів.

import ESPProvision ESPProvisionManager.shared.searchESPDevices(devicePrefix: "PROV_", transport: .ble, security: .secure) { devices, error in guard let device = devices?.first else { return } device.connect(delegate: self) { status in if case .connected = status { device.provision(ssid: selectedSSID, passPhrase: password) { status in // handle result } } } } 

На iOS немає фрагментації GATT-стеку — CoreBluetooth працює однаково на всіх пристроях. Але є обмеження: сканування BLE в background режимі працює лише для пристроїв з відомими Service UUID, заздалегідь прописаними в Info.plist.

Як уникнути типових помилок provisioning?

Немає зворотного зв'язку про прогрес. Пристрій підключається до Wi-Fi 5–15 секунд. Без прогрес-індикатора користувачі думають, що додаток завис, і натискають назад.

Не обробляють помилку неправильного пароля. Пристрій поверне статус AUTH_ERROR через notify-характеристику. Потрібно показати «Неправильний пароль Wi-Fi» — не «Помилка підключення».

Не виходять з режиму provisioning після успіху. Пристрій після підключення до Wi-Fi перестає рекламувати BLE-сервіси — нормальна поведінка. Додаток повинен закрити BLE-з'єднання і перейти до наступного кроку.

Що входить в роботу

  • Аналіз вибору чипа та протоколу (Espressif, Nordic, custom GATT)
  • Проектування GATT-сервісу та схеми даних
  • Реалізація мобільного SDK (iOS/Android) з чергою команд та MTU negotiation
  • Інтеграція з ESPProvision або написання кастомного протоколу
  • Обробка помилок, прогрес-індикація, UX provisioning flow
  • Публікація в App Store та Google Play (TestFlight, Firebase Distribution)
  • Документація та навчання команди замовника

Якщо ви використовуєте не Espressif чип, а Nordic nRF52 або власний протокол, готовий SDK не підійде. Ми розробимо кастомні сервіси та характеристики, реалізуємо шифрування (AES-128, Curve25519) і відпрацюємо помилки з'єднання. Це займає 4–6 тижнів.

Тип рішення Термін
ESPProvision SDK (iOS + Android) 2–3 тижні
Кастомний GATT-протокол з шифруванням 4–6 тижнів

Ми — команда мобільних розробників з 5-річним досвідом у BLE та IoT. Реалізували 30+ проєктів з provisioning. Ми гарантуємо сумісність з усіма популярними смартфонами (iPhone 6+, Android 7+) та надаємо технічну підтримку протягом 30 днів після впровадження. Зв'яжіться з нами, щоб обговорити ваш проєкт. Отримайте консультацію з архітектури BLE provisioning.

Джерела: Bluetooth Low Energy на Wikipedia