1

尝试将小米手环与 GATT 服务和特性配对,但手环没有响应。问题同样适用于 android 和 iOS。仅适用于 Mi Fit 官方应用。

除电池、日期和其他信息外,既不更新也不通知任何特性的更新。

注意:- 尝试过的服务/特性 -

  • FF0F
  • 2A37
  • 2A39
  • 0000180d-0000–1000–8000–00805f9b34fb
  • 0000fee0–0000–1000–8000–00805f9b34fb
  • 0000009–0000–1000–8000–00805f9b34fb
4

2 回答 2

2

在开始获取数据之前,您需要对应用程序进行身份验证。步骤是:

  1. 启用身份验证特征“0009”的通知
  2. 发送 18 个字节到 auth 特征
  3. 一旦通知 {0x10, 0x01, 0x01},编写另一个请求,发送 (2) 中的前两个字节
  4. 收到通知 {0x10, 0x02, 0x01} 后,编写另一个请求,发送使用 AES 加密的字节
  5. 一个通知 {0x10, 0x03, 0x01},您可以继续执行其他操作,例如获取数据。
于 2019-04-03T07:04:33.160 回答
0

我注意到在Mi Band 3中,即使没有配对(身份验证),您也可以访问心率数据和详细信息以进行心率测量:

let BLE_Heart_Rate_Service_CBUUID = CBUUID(string: "0x180D")
let Heart_rate_UUID = CBUUID(string: "2A37")

现在将下面的代码放入didUpdateValueFor

if characteristic.uuid == Heart_rate_UUID {
            print("HeartRate_UUID reading: ", characteristic.value)
            peripheral.readValue(for: characteristic)
            print("HEART RATE:  ", getHeartRate(heartRateData: characteristic.value!))

        }

使用getHeartRate()读取心率。

func getHeartRate(heartRateData:Data) -> Int{
        print("--- UPDATING Heart Rate..")
        var buffer = [UInt8](repeating: 0x00, count: heartRateData.count)
        heartRateData.copyBytes(to: &buffer, count: buffer.count)
        
        var bpm:UInt16?
        if (buffer.count >= 2){
            if (buffer[0] & 0x01 == 0){
                bpm = UInt16(buffer[1]);
            }else {
                bpm = UInt16(buffer[1]) << 8
                bpm =  bpm! | UInt16(buffer[2])
            }
        }
        
        if let actualBpm = bpm{
            return Int(actualBpm)
        }else {
            return Int(bpm!)
        }
    }
于 2021-04-19T11:55:25.403 回答