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

问题描述 投票:0回答:1

我需要您的帮助才能了解如何从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!")

}

但是这段代码永远不会执行。这是我关于swift的第一个程序,所以我需要一些帮助才能理解并知道我必须做些什么。

swift
1个回答
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?)
© www.soinside.com 2019 - 2024. All rights reserved.