הקצאת BLE עבור מכשירי IoT באמצעות אפליקציה ניידת

הגדרת מכשירי IoT ללא מסך הופכת לעיתים קרובות לאתגר: חיבורים לא יציבים, תלות בנתב ושלבים מיותרים עבור המשתמש. אנו מיישמים BLE provisioning דרך אפליקציה ניידת—דרך אמינה להעברת פרטי Wi-Fi שעובדת על Android ו-iOS. הצוות שלנו מטפל בכל המחזור, החל מתכנון ארכיטקטורת GATT ועד לפריסה ותמיכה, ומבטיח שהמוצר שלך פועל בצורה חלקה.

פיתוח ותמיכה בכל סוגי היישומים הניידים:

יישומים ניידים למידע ובידור
אפליקציות חדשות, משחקים, מדריכים, קטלוגים מקוונים, אפליקציות מזג אוויר, אפליקציות כושר ובריאות, אפליקציות נסיעות, אפליקציות חינוכיות, רשתות חברתיות ומסנג'רים, חידונים, בלוגים ופודקאסטים, פורומים, אגרגטורים
יישומים ניידים למסחר אלקטרוני
חנויות מקוונות, אפליקציות B2B, מרקטפלייסים, בורסות מקוונות, שירותי קאשבק, בורסות, פלטפורמות דרופשיפינג, תוכניות נאמנות, משלוחי מזון ומוצרים, מערכות תשלום.
יישומים ניידים לניהול תהליכים עסקיים
מערכות CRM, מערכות ERP, ניהול פרויקטים, כלים לצוותי מכירות, ניהול פיננסי, ניהול ייצור, ניהול לוגיסטיקה ומשלוחים, ניהול משאבי אנוש, מערכות ניטור נתונים
יישומים ניידים לשירותים אלקטרוניים
פלטפורמות מודעות מסווגות, בתי ספר מקוונים, בתי קולנוע מקוונים, פלטפורמות שירות אלקטרוניות, פלטפורמות קאשבק, אירוח וידאו, פורטלים נושאיים, פלטפורמות הזמנות ותזמון מקוונות, פלטפורמות מסחר מקוונות

אלה הם רק חלק מסוגי היישומים הניידים שאנו עובדים איתם, ולכל אחד מהם עשויים להיות מאפיינים ופונקציונליות ספציפיים משלו, המותאמים לצרכים ולמטרות הספציפיות של הלקוח.

השירותים שאנו מציעים
מציג 1 מתוך 1כל 1734 השירותים
הקצאת BLE עבור מכשירי IoT באמצעות אפליקציה ניידת
בינוני
~3-5 ימים

הכישורים שלנו:

שאלות נפוצות

העבודות האחרונות

  • פיתוח אפליקציית מובייל עבור FEEDME
    פיתוח אפליקציית מובייל עבור FEEDME
    971
  • פיתוח אפליקציית מובייל עבור XOOMER
    פיתוח אפליקציית מובייל עבור XOOMER
    869
  • פיתוח אפליקציית מובייל עבור RHL
    פיתוח אפליקציית מובייל עבור RHL
    1289
  • פיתוח אפליקציית מובייל עבור ZIPPY
    פיתוח אפליקציית מובייל עבור ZIPPY
    1143
  • פיתוח אפליקציית מובייל עבור Affhome
    פיתוח אפליקציית מובייל עבור Affhome
    1076
  • פיתוח אפליקציית מובייל עבור חברת FLAVORS
    פיתוח אפליקציית מובייל עבור חברת FLAVORS
    677

הקצאת BLE עבור מכשירי IoT באמצעות אפליקציה ניידת

מפתחים מחפשים לעיתים קרובות דרך אמינה להעביר אישורי Wi-Fi למכשיר ללא מסך. הקצאת Bluetooth Low Energy היא הפתרון. היא אינה דורשת מעבר לרשת הטלפון, אמינה פי 10 מ-SmartConfig (במיוחד בסביבות רועשות), ומהירה פי 3 מהגדרת Wi-Fi ידנית. בנוסף, היא אינה תלויה בהגדרות הנתב. אנו עוזרים לך לשלב מנגנון זה באפליקציה שלך—מאב-טיפוס ועד פרסום בחנות. לצוות שלנו ניסיון של למעלה מ-7 שנים ב-BLE ו-IoT, עם יותר מ-50 פרויקטי הקצאה שהושלמו. נבחן את הפרויקט שלך תוך יומיים. לפי Bluetooth SIG, BLE משיג כ-95% חיבורים מוצלחים עם יישום נכון.

למה הקצאת BLE היא הבחירה הטובה ביותר עבור IoT

BLE צורך פחות חשמל מ-Wi-Fi Direct ועובד על כל הסמארטפונים המודרניים. עבור שבבים כמו ESP32, nRF52 ו-Nordic, זו השיטה המועדפת. במצב הקצאה, המכשיר מפרסם שירות BLE, האפליקציה מתחברת כלקוח GATT וכותבת את התצורה. לאחר הצלחה, המכשיר מתחבר ל-Wi-Fi ומפסיק לפרסם. הקצאת BLE אמינה פי 10 מ-SmartConfig, במיוחד בסביבות רועשות. עלות היישום מתחילה בדרך כלל מ-$5,000 עבור אינטגרציית ESPProvision, וחיסכון בלוגיסטיקה יכול להגיע עד 30% בזכות הפחתת הגדרות ידניות. מפתחי BLE מוסמכים מבטיחים חיבור אמין מובטח.

ארכיטקטורת GATT להקצאה

המכשיר במצב הקצאה מפרסם שירות BLE. האפליקציה הניידת מתחברת כלקוח GATT וכותבת נתונים למאפייני השירות. סכמה סטנדרטית עבור ESP-IDF:

  • Service UUID: 021a9004-0382-4aba-aa36-ec4d15d65e0e (Espressif Provisioning)
  • מאפיין תצורה: כתיבה (SSID, סיסמה, מצב אימות)
  • מאפיין סטטוס: הודעה (תוצאה של חיבור המכשיר לרשת)

לאחר כתיבת האישורים, המכשיר מנסה להתחבר ל-Wi-Fi ומודיע לטלפון דרך מאפיין ההודעה על הצלחה או כישלון.

תהליך ההקצאה ניתן לחלוקה לשלבים:

  1. סריקה אחר מכשירי BLE עם שירות ההקצאה.
  2. חיבור ומשא ומתן על MTU (בקשה ל-512 בתים).
  3. קריאה/כתיבה של מאפיינים דרך תור GATT.
  4. שידור אישורים והמתנה לאישור.
  5. סגירת החיבור ומעבר לניהול המכשיר.

הקצאת BLE מבטיחה אמינות וצריכת חשמל נמוכה, בניגוד ל-SmartConfig (תלוי נתב) ו-Wi-Fi Direct (צריכת חשמל גבוהה).

Android BLE API: מה משתבש

BLE באנדרואיד הוא מקור לכאב. יצרנים שונים מיישמים את הערימה בצורה שונה. BluetoothGatt.writeCharacteristic() עשוי להחזיר true בקריאה, אבל onCharacteristicWrite מגיע עם סטטוס GATT_ERROR (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()
    }
}

כל 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 callback → onCharacteristicWrite. ללא זה, במהלך פעולות מקבילות, ערימת ה-GATT נתקעת והחיבור נופל.

אילו שגיאות מתרחשות במהלך משא ומתן על MTU?

כברירת מחדל, MTU הוא 23 בתים (20 בתים של תוכן). אישורים עם 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()
}

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). אישורים לעולם אינם משודרים בטקסט פשוט.

iOS: CoreBluetooth + ESPProv

ב-iOS, השתמש ב-queue.onCommandComplete() Swift Package של Espressif או ב-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() } המקורי עבור פרוטוקולים מותאמים אישית.

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—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()) } } עובד באופן עקבי בכל המכשירים. עם זאת, יש מגבלה: סריקת BLE ברקע עובדת רק עבור מכשירים עם Service UUIDs ידועים, הרשומים מראש ב-ESPProvision.

איך להימנע משגיאות הקצאה טיפוסיות?

  • אין משוב על התקדמות. המכשיר לוקח 5–15 שניות להתחבר ל-Wi-Fi. ללא מחוון התקדמות, משתמשים חושבים שהאפליקציה קפאה ולוחצים על חזור.
  • לא מטפלים בשגיאות סיסמה שגויה. המכשיר מחזיר סטטוס AUTH_ERROR דרך מאפיין ההודעה. הצג "סיסמת Wi-Fi שגויה"—לא "שגיאת חיבור".
  • לא יוצאים ממצב הקצאה לאחר הצלחה. לאחר חיבור ל-Wi-Fi, המכשיר מפסיק לפרסם שירותי BLE—זה נורמלי. האפליקציה צריכה לסגור את חיבור ה-BLE ולעבור לשלב הבא.

מה כלול בעבודה

  • ניתוח בחירת שבב ופרוטוקול (Espressif, Nordic, GATT מותאם אישית)
  • עיצוב שירות GATT וסכמת נתונים
  • יישום SDK נייד (iOS/Android) עם תור פקודות ומשא ומתן על MTU
  • אינטגרציה עם ESPProvision או פיתוח פרוטוקול מותאם אישית
  • טיפול בשגיאות, הצגת התקדמות, זרימת UX להקצאה
  • פרסום ל-App Store ו-Google Play (TestFlight, Firebase Distribution)
  • תיעוד והדרכת צוות

אם אתה משתמש בשבב שאינו Espressif כמו Nordic nRF52 או בפרוטוקול מותאם אישית, ה-SDK המוכן לא יעבוד. נפתח שירותים ומאפיינים מותאמים אישית, ניישם הצפנה (AES-128, Curve25519), ונטפל בשגיאות חיבור. זה לוקח 4–6 שבועות.

סוג פתרון לוח זמנים עלות טיפוסית (USD)
ESPProvision SDK (iOS + Android) 2–3 שבועות $5,000 – $7,500
פרוטוקול GATT מותאם אישית עם הצפנה 4–6 שבועות $12,000 – $18,000

אנחנו צוות פיתוח נייד עם ניסיון של 7+ שנים ו-50+ פרויקטי הקצאה שהושלמו. מפתחי ה-BLE המוסמכים שלנו מבטיחים חיבור אמין ומאובטח. צור קשר כדי לדון בפרויקט שלך ולקבל ייעוץ ארכיטקטוני להקצאת BLE.

מקורות: Bluetooth Low Energy בויקיפדיה