【问题标题】:iOS Bluetooth Low Energy (BLE) not discovering TX characteristiciOS 蓝牙低功耗 (BLE) 未发现 TX 特征
【发布时间】:2017-10-05 01:03:06
【问题描述】:

我正在使用一个 arduino feather BLE 板并尝试创建一个可以通过 BLE 将数据发送到板的 iOS 应用程序。我可以连接,但无法访问 txCharacteristic

func peripheral(_ peripheral: CBPeripheral, didDiscoverCharacteristicsFor service: CBService, error: Error?) {
    guard let characteristics = service.characteristics else {
        return
    }

    for characteristic in characteristics {
        if characteristic.properties.contains(.write) || characteristic.properties.contains(.writeWithoutResponse) {
            writableCharacteristic = characteristic
        }

        //            if(characteristic.uuid == CBUUID(string: "6e400002-b5a3-f393-e0a9-e50e24dcca9e"))
        //            {
        //                txCharacteristic = characteristic
        //            }

        var txUUID = CBUUID(string: "6e400002-b5a3-f393-e0a9-e50e24dcca9e")
        let temp = characteristic.uuid.uuidString;
        switch characteristic.uuid {
        case txUUID:
            txCharacteristic = characteristic;
            break;
        default:
            break;
        }

        peripheral.setNotifyValue(true, for: characteristic)
    }
}

此代码有效,但仅发现以下 UUID:

temp    String  "00001532-1212-EFDE-1523-785FEABCD123"  
temp    String  "00001531-1212-EFDE-1523-785FEABCD123"  
temp    String  "00001534-1212-EFDE-1523-785FEABCD123"  

我发现这些 UUID 是 DFU UUID。我怎样才能发现 txCharacteristic?


添加了关于我如何调用discoverCharacteristics() 的更多信息:

extension SimpleBluetoothIO: CBPeripheralDelegate {
func peripheral(_ peripheral: CBPeripheral, didDiscoverServices error: Error?) {
    guard let services = peripheral.services else {
        return
    }

    targetService = services.first
    if let service = services.first {
        targetService = service
        peripheral.discoverCharacteristics(nil, for: service)
    }
}

【问题讨论】:

  • 您确定在正确的设备上提供正确的服务吗?你打电话给discoverServicesdiscoverCharacteristics 的参数是否正确?尝试下载 BLE 浏览器并检查它所看到的内容。
  • 您好,感谢您的帮助。我调用了 discoverServices(nil) 来发现所有服务。我在上面的问题中添加了调用 discoverCharacteristics() 的代码。

标签: ios swift arduino bluetooth-lowenergy adafruit


【解决方案1】:

通过阅读此网站上的信息,我能够弄清楚这一点: https://learn.adafruit.com/getting-started-with-the-nrf8001-bluefruit-le-breakout/adding-app-support

特别是这部分(注意UART是服务,TX和RX是服务的特征):

UART Service UUID: 6E400001-B5A3-F393-E0A9-E50E24DCCA9E
TX Characteristic UUID: 6E400002-B5A3-F393-E0A9-E50E24DCCA9E
RX Characteristic UUID: 6E400003-B5A3-F393-E0A9-E50E24DCCA9E

所以我需要使用 UART 服务 ID 调用 peripheral.discoverServices()。在下面的示例中 self.serviceUUID = "6e400001-b5a3-f393-e0a9-e50e24dcca9e"

func centralManager(_ central: CBCentralManager, didConnect peripheral: CBPeripheral) {
    //peripheral.discoverServices(nil)
    //peripheral.discoverServices([CBUUID(string: "6e400001-b5a3-f393-e0a9-e50e24dcca9e")])

    // Disover peripheral with service UUID that was given to us during initialization (self.serviceUUID)
    peripheral.discoverServices([CBUUID(string: self.serviceUUID)])
}

然后在 didDiscoverCharacteristicsFor 服务中我需要查找 TX Characteristic ID:

// Did Discover Characteristics
func peripheral(_ peripheral: CBPeripheral, didDiscoverCharacteristicsFor service: CBService, error: Error?) {
    guard let characteristics = service.characteristics else {
        return
    }

    for characteristic in characteristics {
        if characteristic.properties.contains(.write) || characteristic.properties.contains(.writeWithoutResponse) {
            writableCharacteristic = characteristic
        }

        // TX Characteristic UUID: 6E400002-B5A3-F393-E0A9-E50E24DCCA9E
        // https://learn.adafruit.com/getting-started-with-the-nrf8001-bluefruit-le-breakout/adding-app-support
        let txUUID = CBUUID(string: "6e400002-b5a3-f393-e0a9-e50e24dcca9e")
        switch characteristic.uuid {
        case txUUID:
            txCharacteristic = characteristic;
            break;
        default:
            break;
        }

        peripheral.setNotifyValue(true, for: characteristic)
    }
}

【讨论】:

    猜你喜欢
    • 2015-05-05
    • 2016-06-14
    • 2021-10-27
    • 1970-01-01
    • 1970-01-01
    • 2012-05-28
    • 2012-05-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多