使用iOS SDK中的BLE从外部设备发送和接收数据

时间:2016-12-28 14:45:22

标签: ios objective-c swift bluetooth

我必须使用BLE从外部设备(Datalogger Thermometer)获取数据。请参阅下面的图片了解该设备。

此设备仅在我们发送一个命令时发送数据。我的意思是我们必须首先向设备发送静态字节数据,然后它将发送回显示在图像中的T1,T2,T3和T4值的数据。

我可以使用B BTLE Central Peripheral Transfer Demoanswer将一个iOS设备发送到另一个iOS设备。但是,我无法使用这种方式向此外部设备发送和接收数据。

正如本演示中所述,我使用CBPeripheralManagerCBCentralManager来使用BLE发送和接收数据。此外,我可以使用EAAccessoryManager显示所有靠近BLE连接的列表。因此,当用户单击列表中的任何设备时,我将获取该设备的UUID并尝试使用该UUID发送和接收数据。

有没有其他方法可以使用蓝牙到iOS设备向任何外部设备发送和接收数据。

我想分享一下,Android Developer已经使用SSP将其实现到Android中,而不是BLE。这可以在iOS中使用BLE来实现吗?

任何帮助都将不胜感激。

2 个答案:

答案 0 :(得分:1)

我总是使用实现此协议的CoreBluetooth(CBCentralManagerDelegate,CBPeripheralDelegate)并覆盖此方法:

func centralManagerDidUpdateState(_ central: CBCentralManager)

func centralManager(_ central: CBCentralManager, didDiscover peripheral: CBPeripheral, advertisementData: [String : Any], rssi RSSI: NSNumber)

func centralManager(_ central: CBCentralManager, didConnect peripheral: CBPeripheral)

func centralManager(_ central: CBCentralManager, didFailToConnect peripheral: CBPeripheral, error: Error?)

func centralManager(_ central: CBCentralManager, didDisconnectPeripheral peripheral: CBPeripheral, error: Error?)

// Check if the service discovered is a valid Service
func peripheral(_ peripheral: CBPeripheral, didDiscoverServices error: Error?)

func peripheral(_ peripheral: CBPeripheral, didDiscoverCharacteristicsFor service: CBService, error: Error?)

// And for getting the value changes in the BLE Device...
func peripheral(_ peripheral: CBPeripheral, didUpdateValueFor characteristic: CBCharacteristic, error: Error?)

func peripheral(_ peripheral: CBPeripheral, didWriteValueFor characteristic: CBCharacteristic, error: Error?)

我希望它有所帮助

答案 1 :(得分:1)

在您编写或读取值之前,您需要知道哪些特性是可读的,哪些特性是可写的,而不是您可以读取或写入的特性。简单地说BTLE的过程是:

扫描外围设备 - > conenect - >查找服务 - >发现特征 - > ......你需要的操作

如果要将值写入可写特性,则需要确认外设是否会响应此写请求,否则您将在回调中收到错误:peripheral(_:didWriteValueFor:error)可能&#34;未知错误&#34;。< BR />

其他当您尝试阅读需要调用的特征值时:readValue(for:)setNotifyValue(_:for:),外围设备更新的结果将在peripheral(_:didUpdateValueFor:error:) < / p>

以上是我对BTLE数据传输的理解。希望能帮到你。