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

Налаштування IoT-пристроїв без екрана часто перетворюється на складне завдання: нестабільне підключення, залежність від роутера та зайві кроки для користувача. Ми реалізуємо BLE provisioning через мобільний застосунок — надійний спосіб передачі Wi-Fi-параметрів, який працює на Android та iOS. Наша команда бере на себе весь цикл: від проєктування GATT-архітектури до впровадження та підтримки, забезпечуючи стабільну роботу вашого продукту.

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

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

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

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

Реалізація 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

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

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

  • Розробка мобільного додатка для компанії FEEDME
    Розробка мобільного додатка для компанії FEEDME
    1010
  • Розробка мобільного додатку для компанії XOOMER
    Розробка мобільного додатку для компанії XOOMER
    903
  • Розробка мобільного додатку для компанії RHL
    Розробка мобільного додатку для компанії RHL
    1332
  • Розробка мобільного додатку для компанії ZIPPY
    Розробка мобільного додатку для компанії ZIPPY
    1180
  • Розробка мобільного додатку для компанії Affhome
    Розробка мобільного додатку для компанії Affhome
    1107
  • Розробка мобільного додатку для компанії FLAVORS
    Розробка мобільного додатку для компанії FLAVORS
    714