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

问题描述:

我必须使用BLE从外部设备(数据记录器温度计)获取数据。请参阅下面的图片了解该设备。在iOS SDK中使用BLE从外部设备发送和接收数据

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

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

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

是否有任何其他方式使用蓝牙将iOS设备发送和接收数据到任何外部设备?

我想分享一下,Android Developer使用SSP而不是BLE来实现这个功能。这是否可以在iOS中使用BLE来完成此操作?

任何帮助,将不胜感激。

+1

您确定该设备实际支持BLE吗?经典的蓝牙和BLE是两种不同的协议/堆栈。通过'EAAccessoryManager'可见的设备是Classic Bluetooth设备,而不是BLE设备。要扫描BLE设备,您应该使用'CBCentralManager scanForPeripheralsWithServices:options:'。 – jcaron

我总是用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?) 

我希望它能帮助

您写入或读取数值之前,你需要知道哪些特点是可读的并且是可写的,比你可以读或写。只需BTLE的过程为:

扫描周边 - > conenect - >查找服务 - >发现的特点 - > ...你需要

操作,如果你想写值可写特性,需要确认外设将响应此写入请求,否则您将在回调中收到错误:peripheral(_:didWriteValueFor:error)可能是“未知错误”。

其他

当您尝试读取你需要呼叫特征的价值:readValue(for:)setNotifyValue(_:for:),外围设备的更新的结果将在响应peripheral(_:didUpdateValueFor:error:)

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