BLE改变要写入的UUID特性

时间:2015-06-18 16:07:50

标签: bluetooth-lowenergy core-bluetooth

我对使用Swift进行编码非常陌生,所以我希望有人可以帮我解决一个简单的答案。

我基本上是尝试将特征UUID发送到写入函数并切换写入函数以写入该UUID。它将继续使用我原来的那个。是否有捷径可寻?我已经发现了所有外围设备,服务,特性,并且已经连接到正确的外围设备。我只是无法让它切换到正确的特征UUID。任何帮助都是极好的!我是固件/硬件开发人员,所以Swift和Xcode对我来说不是日常用品。

func writePosition(position: UInt16, characteristicUUID: CBUUID) {

    var position_low: UInt8 = 0
    var position_high: UInt8 = 0
    var position16: UInt16 = 0;

    position_low  = (UInt8) (position)  // (position)
    position_high = (UInt8)((position >> 8))


    // See if characteristic has been discovered before writing to it
    if self.positionCharacteristic == nil {
        return
    }
    var bytes:[UInt8] = [0x00, 0x00]

    bytes[1] = 0x01  //low byte is [1], high byte is [0] so reversed from LightBlue app

    bytes[1] = position_low  //low byte is [1], high byte is [0] so reversed from LightBlue app
    bytes[0] = position_high  //low byte is [1], high byte is [0] so reversed from LightBlue app



    let uuidsForBTService:  [CBUUID] = [characteristicUUID]
    //new code to try and set the correct UUID automatically
    for service in peripheral!.services
    {
        if service.UUID == BLEServiceUUID
        {
          peripheral!.discoverCharacteristics(uuidsForBTService, forService: service as! CBService)
        }

    }


    //find the correct characteristic to set to and then write to it
    //go through each characteristic and look at its UUID then if it matches, set us to that one so we write to it later on
    for characteristic in self.peripheral!.services {
        if characteristic.UUID == characteristicUUID//Position1PWMCharUUID
        {
            self.positionCharacteristic = (characteristic as! CBCharacteristic)
            peripheral!.setNotifyValue(true, forCharacteristic: characteristic as! CBCharacteristic)

            // Send notification that Bluetooth is connected and all required characteristics are discovered
            self.sendBTServiceNotificationWithIsBluetoothConnected(true)
        }
    }

    //end of code to set the UUID


    // Need a mutable var to pass to writeValue function
    //var positionValue = position
   //let data = NSData(bytes: &positionValue, length: sizeof(UInt16))
    let data = NSData(bytes: bytes, length: 2)
   self.peripheral?.writeValue(data, forCharacteristic: self.positionCharacteristic, type: CBCharacteristicWriteType.WithResponse)



}

1 个答案:

答案 0 :(得分:0)

请记住,在第二个for循环中,您正在寻找CBCharacteristic,您仍在从外设迭代服务而不是您的特征服务(外围设备具有服务和服务具有特征)。

以下代码是为了获得您需要的CBCharacteristic

var theService: CBService?

// Find service
for service in peripheral.services as! [CBService] {
    if service.UUID == BLEServiceUUID {
        theService = service

        break
    }
}

var theCharacteristic: CBCharacteristic?

// Find characteristic
for characteristic in theService?.characteristics as! [CBCharacteristic] {
    if characteristic.UUID == characteristicUUID {
        theCharacteristic = characteristic

        break
    }
}

// Write
if let characteristic = theCharacteristic {
    peripheral.writeValue(data, forCharacteristic: characteristic, type: .WithResponse)
}

在您的代码中,您始终在写self.positionCharacteristic。只需将您的数据写入您找到的CBCharacteristic

另外,如果您需要更多帮助,我写了一个简单的swift class来管理中央连接,读写任务。

希望它有所帮助!