Swift:如何从Sensortag 2.0设备恢复数据

时间:2019-02-18 09:29:26

标签: swift

我需要您的帮助,以了解如何从Sensortag 2.0设备恢复数据。

我有以下信息:

  • 传输:BLE

  • 服务:f000fff0-0451-4000-b000-000000000000

  • 特征:f000fff1-0451-4000-b000-000000000000

  • 具有以下特征的通知: f000fff2-0451-4000-b000-000000000000

  • 启动命令:0x73或0x53

  • 结束命令:0x65或0x45

  • 1个数据包20Byte

  • 第二个字节用作判别代码。

我的测试:

为了帮助我理解,我使用以下源代码: https://github.com/degtiarev/DataCollector

1)在Device.swift文件上,我添加了如下的UUID:

static let TestServiceUUID = "f000fff0-0451-4000-b000-000000000000"
static let TestCharacteristicsUUID = "f000fff1-0451-4000-b000-000000000000"
static let TestNotificationUUID = "f000fff1-0451-4000-b000-000000000000"

2)在CollectingDataVC.swift上,我这样更改了sensorTagName:

let sensorTagName = "my-device"

3)我添加了我的服务:

if let services = peripheral.services {
    for service in services {
        print("Discovered service \(service)")
        // If we found movement service, discover the characteristics for those services.
        if (service.uuid == CBUUID(string: Device.MovementServiceUUID)) ||
            (service.uuid == CBUUID(string: Device.TestServiceUUID)) ||
            (service.uuid == CBUUID(string: Device.IOServiceUUID)) || (service.uuid == CBUUID(string: Device.SimpleKeyUUID)) {
            peripheral.discoverCharacteristics(nil, for: service)
        }
    }
}

4)我添加了特征

for characteristic in characteristics {

    // Test
    if characteristic.uuid == CBUUID(string: Device.TestCharacteristicsUUID) {
        movementCharacteristics[peripheral.identifier.uuidString] = characteristic
        sensorTags[peripheral.identifier.uuidString]?.setNotifyValue(true, for: characteristic)
    }

    if characteristic.uuid == CBUUID(string: Device.TestNotificationUUID) {
        movementCharacteristics[peripheral.identifier.uuidString] = characteristic
        sensorTags[peripheral.identifier.uuidString]?.setNotifyValue(true, for: characteristic)
    }

}

该程序之所以有效,是因为我的设备已连接,并且我的控制台上有以下信息:

SENSOR TAG FOUND! ADDING NOW!!!
**** SUCCESSFULLY CONNECTED TO SENSOR TAG!!!


======= SERVICES ========
▿ Optional([<CBService: 0x1c0677a40, isPrimary = YES, UUID = Device Information>, <CBService: 0x1c0678180, isPrimary = YES, UUID = F000FFF0-0451-4000-B000-000000000000>])
  ▿ some: 2 elements
    - <CBService: 0x1c0677a40, isPrimary = YES, UUID = Device Information> #0
      - super: CBAttribute
        - super: NSObject
    - <CBService: 0x1c0678180, isPrimary = YES, UUID = F000FFF0-0451-4000-B000-000000000000> #1
      - super: CBAttribute
        - super: NSObject
==========


Discovered service <CBService: 0x1c0677a40, isPrimary = YES, UUID = Device Information>
Discovered service <CBService: 0x1c0678180, isPrimary = YES, UUID = F000FFF0-0451-4000-B000-000000000000>


======= CHARACTERISTICS ========
▿ 2 elements
  - <CBCharacteristic: 0x1c42a3c60, UUID = F000FFF1-0451-4000-B000-000000000000, properties = 0xA, value = (null), notifying = NO> #0
    - super: CBAttribute
      - super: NSObject
  - <CBCharacteristic: 0x1c42a4320, UUID = F000FFF2-0451-4000-B000-000000000000, properties = 0x12, value = (null), notifying = NO> #1
    - super: CBAttribute
      - super: NSObject
==========

4)从这里开始,我不知道该怎么办。

我创建了一个“ Hello World”:

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

  print("Hello World!")

}

但是此代码永远不会执行。 这是我的第一个快速程序,因此我需要一些帮助来理解和了解我必须做什么。

1 个答案:

答案 0 :(得分:0)

我已经检查了您正在使用的项目,他们已经给出了有关方法使用以及何时调用的描述:

 Invoked when you retrieve a specified characteristic’s value,
 or when the peripheral device notifies your app that the characteristic’s value has changed.

 This method is invoked when your app calls the readValueForCharacteristic: method,
 or when the peripheral notifies your app that the value of the characteristic for
 which notifications and indications are enabled has changed.

 If successful, the error parameter is nil.
 If unsuccessful, the error parameter returns the cause of the failure.

还有

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

上方方法是CBPeripheralDelegate的委托方法,

optional public func peripheral(_ peripheral: CBPeripheral, didUpdateValueFor characteristic: CBCharacteristic, error: Error?)