我必须使用BLE从外部设备(Datalogger Thermometer)获取数据。请参阅下面的图片了解该设备。
此设备仅在我们发送一个命令时发送数据。我的意思是我们必须首先向设备发送静态字节数据,然后它将发送回显示在图像中的T1,T2,T3和T4值的数据。
我可以使用B BTLE Central Peripheral Transfer Demo和answer将一个iOS设备发送到另一个iOS设备。但是,我无法使用这种方式向此外部设备发送和接收数据。
正如本演示中所述,我使用CBPeripheralManager
和CBCentralManager
来使用BLE发送和接收数据。此外,我可以使用EAAccessoryManager
显示所有靠近BLE连接的列表。因此,当用户单击列表中的任何设备时,我将获取该设备的UUID并尝试使用该UUID发送和接收数据。
有没有其他方法可以使用蓝牙到iOS设备向任何外部设备发送和接收数据。
我想分享一下,Android Developer已经使用SSP将其实现到Android中,而不是BLE。这可以在iOS中使用BLE来实现吗?
任何帮助都将不胜感激。
答案 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数据传输的理解。希望能帮到你。