How to get data out of bluetooth characteristic in Swift

后端 未结 2 881
别那么骄傲
别那么骄傲 2021-02-04 16:41

I\'ve got a Polar h7 device around me right now (it\'s BTLE) and I\'ve got everything working but I am confused about how to get the BPM our of the characteristic.value

2条回答
  •  陌清茗
    陌清茗 (楼主)
    2021-02-04 17:10

    This seems like it should be simple enough, but trying to confirm what you're saying. Does “bytes” end up with a value of “16447d03”? It's a pointer to the data, not the data itself, so you need to do something like this to get the actual value:

    var data = characteristic.value
    var values = [UInt8](count:data.length, repeatedValue:0)
    data.getBytes(&values, length:data.length)
    

    In this, “values” is an array containing the actual values.

    From a private discussion we had, you listed the output as:

    [22, 77, 22, 3] 
    [22, 78, 27, 3, 18, 3] 
    [22, 79, 2, 3] 
    [22, 78, 15, 3] 
    

    The first byte is the flags, which has been 22 in all the cases you've listed. This makes sense as it's all from the same heart rate hardware.

    The bits are grouped like this: | 3 bits are reserved | 1 bit for RR-Interval | 1 bit for Energy Expended Status | 2 bits for Sensor Contact Status | 1 bit for Heart Rate Value Format | 22 is 00010110 in binary, which is | 000 | 1 | 0 | 11 | 0 |.

    Heart Rate Value Format bit: 0 (Heart Rate Value Format is set to UINT8)
    Sensor Contact Status bits: 3 (Sensor Contact feature is supported and contact is detected)
    Energy Expended Status bit: 0 (Energy Expended field is not present)
    RR-Interval bit: 1 (One or more RR-Interval values are present)

    This means that the following byte is the heart rate (C1 field) and the remaining bytes are RR-Interval values, whatever they are (C4 field).

    So for this data the heart rates were 77, 78, 79, 78.

提交回复
热议问题