![](/img/trans.png)
[英]is there any limit, BLE peripheral devices for Services and their characteristic in iOS swift?
[英]iOS - How to discover unadvertised services on a BLE peripheral
我得到了這個不公布其服務的Nordic nRF52 BLE外圍設備。 我可以連接到它,但是無法在iOS上發現服務。 由於我知道服務UUID,因此我嘗試將它們傳遞給discoverServices
函數。 但這是行不通的。
大約30秒后,它終於斷開連接。
在外圍設備上,GAP廣告標記設置為“ General Discoverable
。 使用LightBlue
或nRF Connect
類的應用程序,我看到外圍設備的名稱和UUID,但沒有任何服務。 當與LightBlue應用程序連接時,幾秒鍾后顯示錯誤( Timeout interrogating the peripheral
)。
在Android上,發現未發布的服務就可以了。
從《 核心藍牙編程指南》開始 ,它基本上應該可以工作:
建立與外圍設備的連接后,您可以瀏覽其數據。 探索外圍設備必須提供的第一步是發現其可用的服務。 由於外圍設備可以發布的數據量受到大小限制,因此您可能會發現外圍設備提供的服務多於其發布的內容(在其廣告包中)。 您可以通過調用外圍設備的discoverServices:方法來發現外圍設備提供的所有服務,如下所示:
[peripheral discoverServices:nil];
有誰知道SDK的區別是什么,以及是否有可能像Android一樣在iOS上發現未發布的服務?
我了解到,緩存外設時,iOS能夠直接連接,跳過發現過程。 但是將外圍設備緩存后,需要配對一次。 有沒有辦法手動設置緩存?
感謝任何幫助,謝謝!
這聽起來更像是NRF52上固件的問題。 我使用NRF51和NRF52系列已有數年了,它們肯定可以在iOS和Android設備上使用。
BLE廣告和服務發現
有關BLE廣告和服務發現的一些一般信息:
BLE廣告包的大小非常有限(准確地說是31個字節,不包括溢出區域)。 這意味着您無法宣傳外圍設備支持的所有服務,並且該空間也可能與其他信息(外觀,名稱,制造商數據等)共享。 您甚至根本不需要廣告任何服務,甚至可以廣告您的外圍設備不支持的服務。 無論發現的服務是什么,服務發現均有效。
調試
解決問題的一些建議:
一旦發現服務,特征和描述符,iOS會對其進行緩存,直到下一個電源循環(關閉並重新打開藍牙或重新啟動iOS設備)為止。 如果您已更改固件中的基礎服務等,但未使用“服務已更改標志”來指示更改,則可能導致某些意外行為。 因此,請確保相應地從外圍設備發送“服務已更改”標志。
嘗試使用NRF5 SDK隨附的一些示例,並檢查它們是否有效。 如果這些示例正常工作(它們應該這樣做),則固件肯定存在問題。
確保在固件中正確處理了GAP和GATT事件。 iOS和Android設備均不100%兼容Bluetooth 4.0+標准。 Nordic Semiconductor已經在其SDK和SoftDevice中考慮了其中的一些問題。 您絕對應該檢查一下GAP和GATT事件的日志(基本上是固件中的ble_evt_handler),並參考Nordic Devzone中已解決了大多數怪癖的地方。
檢查在固件中讀寫服務和特征元數據的權限。 我有一個類似的問題,我不小心將特征的讀取權限設置為no access
。
希望能有所幫助。
您無法發現未發布的服務,因為未發布意味着無法訪問,禁用等。
LighBlue
向您顯示UUID
這是事實,但設備UUID不服務UUID ,事實就是如此。
要掃描外圍設備,可以使用CoreBluetooth
。
CoreBluetooth
是一個框架,提供您的應用程序與配備BLE的設備進行通信所需的類。
你可以開始掃描外圍設備CoreBluetooth
使用方法scanForPeripheralsWithServices:options:
。 作為此方法的參數之一,您需要傳遞services UUIDs
數組。
發現的服務將在方法centralManager:didDiscoverPeripheral:advertisementData:RSSI:
可用。
在Android上,發現服務可以正常工作。
這是真的。 Android允許掃描您周圍的所有可用服務。 不幸的是iOS沒有。 為什么? 蘋果解釋說:
發現外圍設備的所有服務和相關特征可能會對電池壽命和應用程序性能產生負面影響。 因此,您應該尋找並僅發現應用所需的服務和相關特征。
因此,要獲取services UUID
(因為這是我們需要使用CoreBluetooth
進行掃描的CoreBluetooth
),您可以使用Android應用(某種BLE掃描儀)或僅從設備包裝盒中讀取services UUID
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.