Mi Band 3配对和获取数据(心率,步数等)问题

时间:2018-11-23 10:54:28

标签: android ios mi

尝试将Mi Band与GATT服务和特征配对,但Band没有响应。对于Android和iOS发行相同。仅适用于Mi Fit官方应用。

除了电池,日期和其他信息外,没有更新或通知更新任何特征。

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

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

2 个答案:

答案 0 :(得分:0)

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

  1. 为身份验证特征“ 0009”启用通知
  2. 向身份验证特征发送18个字节
  3. 一旦收到通知{0x10,0x01,0x01},请编写另一个发送(2)中前两个字节的请求
  4. 一旦收到通知{0x10,0x02,0x01},请编写另一个请求,该请求发送使用AES加密的字节
  5. 一个已通知{0x10、0x03、0x01}的用户,可以继续执行其他操作,例如获取数据。

this one之类的几种教程。

答案 1 :(得分: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!)
        }
    }