2012-09-07 69 views
5

我正在開發一個帶有藍牙LE外設的iOS應用程序。我似乎無法解決的一個步驟是如何將數據從我的應用程序實際傳輸到外設,反之亦然。使用CoreBluetooth傳輸數據

我到目前爲止構建的測試應用程序可以連接到我的示例藍牙外設,並讀取其所有服務/特性/描述符。它可以切換給定特徵的通知,並寫入給定的特徵。這只是「傳輸n個字節到外設,接收來自外設的m個字節」的最後一步,這是我無法想象的。

看着外部附件框架(如果Apple實際上會給我MFi對此項目的批准,我會用它),它們會給你輸入和輸出給定會話的流以與附件進行通信,但是不存在這樣的對象爲CoreBluetooth。

這是否僅僅是蘋果對CoreBluetooth功能的一個疏忽?還是僅僅需要開發自己的藍牙服務配置文件來處理外設的數據流入/流出?

+0

您不需要MFi批准來開發BLE應用程序 – chwi

回答

2

LE基本上是設計用於處理這些基於GATT的配置文件,這些配置文件適用於監測傳感器,而不適用於數據流。儘管LE允許爲自定義協議打開額外的L2CAP流,但Apple的CoreBluetooth不提供訪問權限。

+0

我不想傳輸巨大的數據流,即使一次只能處理1k的數據量,最多也可能只有一百個字節。想想我可以設計一個具有足夠屬性的服務配置文件來傳輸我需要的數據? –

+0

是的,您可以使用一個屬性或一組屬性,通過更新屬性的值來完成「數據流」,可能會在更改時自動指示。 – TJD

+0

感謝您的信息,就數據流而言,我無法在BLE上找到太多內容。 –

2

您可以使用具有特性uuid = 2A06的property = write_no_response的bluetooth.org'Immediate Alert Service'uuid = 1802從iPhone向您的外圍設備發送一個字節值。必須對外設進行編程,以處理髮送的數據。例如,您可以使用iPhone應用程序上的按鈕來發送一個十六進制地址,該地址會導致一個或多個端口引腳在外設上打開或關閉。雖然這並不像預期的那樣使用警報服務,但它提供了一種簡單的方法來測試數據傳輸到外圍設備。可以使用相同的過程發送類似於串行數據流的連續數據字節。我還沒有嘗試發送更復雜的數據流。 write_no_response沒有嚮應用程序提供任何關於數據是否被外設接收到的反饋。

IOS TemperatureSensor.xproj是從外設讀取溫度數據的代碼示例。 OSX HealthThermometerClient.xproj具有解碼有點複雜的溫度計數據結構所需的代碼。 IOS TI-BLE-Demo.xproj TIBLECBKeyfob.m具有讀取和寫入特徵值的代碼,例如從外圍設備讀取溫度或電池電量。

2

您可以構建一個具有私人服務和特徵的自定義配置文件,並使其具有類似SSP的功能;這就是我使用我的BLE模塊從某些傳感器獲取數據到我的應用程序的方式。我購買的模塊(Microchip的RN-4020)已經有一個專門針對MLDP(Microchip低功耗數據配置文件)而定製的自定義配置文件。

我在iOS應用程序中獲取數據的方式是訂閱私有特徵,從而在更新值時收到通知。到目前爲止,它一直在努力工作,根據Microchip的數據速率可以達到20 kbps(我沒有測試過它的限制,因爲我不需要太多的速度)。以下是Microchip產品頁面的鏈接:http://www.microchip.com/wwwproducts/Devices.aspx?product=RN4020

祝您好運!