簡體   English   中英

同時將數據傳輸到多個外圍設備

[英]Transfer Data to multiple peripheral simultaneously ios BLE

能夠通過藍牙連接到多個iOS設備,作為1個主設備和4個從設備。

通過以下代碼將數據從中央傳輸到外圍設備

[peripheral.peripheral writeValue:currentData forCharacteristic:peripheral.characteristic type:CBCharacteristicWriteWithoutResponse];

但是,這可以防止數據丟失,但是速度更快。

然后嘗試使用以下代碼不丟失數據

[peripheral.peripheral writeValue:currentData forCharacteristic:peripheral.characteristic type:CBCharacteristicWriteWithResponse];

嘗試同時(同時)將數據傳輸到多個外圍設備

    for (Peripheral * peripheral in self.connectedPeripherals) {
 [peripheral.peripheral writeValue:currentData forCharacteristic:peripheral.characteristic type:CBCharacteristicWriteWithResponse];
}

一旦第一個外設接收到數據,然后第二個外設獲取數據並繼續進行,數據就好像延遲了一個接一個的傳送。

要同時傳輸數據並同時反映到所有外圍設備。

當您傳送帶有響應的數據時,每次發送數據包時都必須等待其收據的確認。 當您傳輸數據而沒有響應時,不會發送回確認,因此吞吐量更高。 但是,正如您正確指出的那樣,當傳輸數據而沒有響應時,可能會丟失數據。 發生此數據丟失的原因是內部iOS緩沖區的溢出,該緩沖區保存在您對- writeValue:forCharacteristic:type:調用與實際調用之間的數據。 如果要防止數據丟失,可以執行以下任一操作。

  1. 不要向緩沖區寫入太多數據,因為如果緩沖區溢出,它將被靜默丟棄。 我的實驗表明,正常情況下此緩沖區的大小約為3kb(iPhone 6,iOS9、1個外圍設備)。 對於其他設備,幾個連接的外圍設備和/或雙向傳輸的大小可能會更小。 因此,如果您有例如1 kb的數據要發送到4個外圍設備,並且通過迭代調用- writeValue:forCharacteristic:type: ,則肯定會面臨數據丟失的情況。
  2. 在無響應的寫入特性的基礎上,實現一個協議以請求重新發送丟失的數據包,以防止數據丟失。
  3. 寫響應,但將您的數據分成盡可能大的塊。 正如我之前說的,確認是在每個數據包之后發送回的,但是這些數據包的大小可以不同。 使用iOS8 / iOS9,您可以期望在單個數據包中發送多達155個字節的有效負載。 因此,如果您需要發送例如300個字節,最好將它們分成2個150字節的塊,而不是15個20字節的塊。 順便說一句,當您要編寫帶有響應並提交超過155個字節的值時,iOS會為您拆分它,但是在這種情況下,您將不會收到回調`
    • 數據交付后,外圍設備:didWriteValueForCharacteristic:錯誤:`。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM