diff --git a/index/index.js b/index/index.js index dd2fb99..c8d73df 100644 --- a/index/index.js +++ b/index/index.js @@ -71,11 +71,12 @@ Page({ getBluetoothDevices() { wx.onBluetoothDeviceFound((res) => { // 过滤出名称以 "GJ-SH-01" 开头的设备 - const targetDevices = res.devices.filter(device => device.name && device.name.startsWith("J2203")); + const targetDevices = res.devices.filter(device => device.name && (device.name.startsWith("J2203") || device.name.startsWith("小柏智能手表"))); // 遍历并连接符合条件的设备 targetDevices.forEach(device => { console.log("找到符合规则的蓝牙设备:", device); + console.log("device.advertisData:",new Uint8Array(device.advertisData)) const hexStr = this.uint8ArrayToMac(new Uint8Array(device.advertisData)) console.log("advertisData: ",hexStr) // 连接指定设备 @@ -232,7 +233,7 @@ Page({ // 需要调用下一个指令(血氧) this.sendHealthCommand(0x66) } - // console.log("心率数据:",heartRateList); + console.log("心率数据:",heartRateList); // console.log("呼吸率数据:",respList); // 调用后台接口 todo .... @@ -299,7 +300,7 @@ Page({ let list = this.data.sleepList; if(list.length > 0){ let arr = CommonUtil.assembleSleepData(list); - arr.forEach(item =>{ + arr.forEach((item,index) =>{ // 排序算法 item.sleepList.sort((a, b) => { // 先比较 yyyyMMdd @@ -309,12 +310,15 @@ Page({ // 再比较 minute return a.minute - b.minute; }); + + item.sleepList[index].minute = item.sleepList[index].minute -1; + item.sleepList[index].status = 1 }) console.log("接口需要的睡眠数据:",arr); - // // 更新缓存 - // HealthDataCache.updateSleepData(list[0].time); + // 更新缓存 + HealthDataCache.updateSleepData(list[0].date); // 调用接口传睡眠后,清空数据 this.setData({ @@ -325,20 +329,19 @@ Page({ let sleepList = ParseDataPacket.parseSleepList(dataView,0); // 排序,minute 越大排前面 sleepList.sort((a, b) => { - return Number(b.minute) - Number(a.minute); // b.minute > a.minute 排前面 + return Number(a.minute) - Number(b.minute); // b.minute > a.minute 排前面 }); console.log("排序后数据:",sleepList) // 获取当前已存在的 sleepList(如果有) let currentSleepList = this.data.sleepList || []; - // 将新的 sleepList 追加到现有的 sleepList 中 - let updatedSleepList = currentSleepList.concat(sleepList); + // 将 sleepList 放在前面,currentSleepList 放在后面,实现新的数据插入在前 + let updatedSleepList = sleepList.concat(currentSleepList);; // 更新 data 中的 sleepList this.setData({ sleepList: updatedSleepList }); - console.log("data数据:",this.data.sleepList) } break; default: @@ -364,7 +367,11 @@ Page({ // const batteryPacket = DataPacket.generateBatteryCheckPacket(); // SendCommandUtil.sendPackage(this.data.deviceId,batteryPacket); + // const HRPacket = DataPacket.generateReadHRDataPacket(); + // SendCommandUtil.sendPackage(this.data.deviceId,HRPacket); + this.sendHealthCommand(0x53) + }, getStep(){ @@ -378,6 +385,31 @@ Page({ if(cmd == null){ cmd = 0x55; } + if(cmd == 0x55){ + // 获取当前时间 + let currentTime = Math.floor(new Date().getTime() / 1000); + // 如果是第一次调用,则不判断时间,如果是第二次调用,要判断本次调用与上次是否间隔18秒(因手表机制问题,不能频繁发送指令给手表端) + console.log(this.data.initTime,this.data.initIndex) + if(this.data.initIndex === 0){ + this.setData({ + initIndex: this.data.initIndex + 1, + initTime: currentTime + }) + } else { + // 初始时间 + let initTime = this.data.initTime + let timeDifference = currentTime - initTime; + if(this.data.initIndex > 0 && timeDifference > 20){ + this.setData({ + initIndex: this.data.initIndex + 1, + initTime: currentTime + }) + } else { + return; + } + } + } + let packet = DataPacket.generateReadDataPacket(cmd); console.log("发送指令到设备端>>>:", this.uint8ArrayToHex(packet)); SendCommandUtil.sendPackage(this.data.deviceId, packet); diff --git a/index/index.wxml b/index/index.wxml index bd48c8b..2506c49 100644 --- a/index/index.wxml +++ b/index/index.wxml @@ -8,6 +8,6 @@ - + \ No newline at end of file diff --git a/utils/CommonUtil.js b/utils/CommonUtil.js index 79dc7c9..43d90a9 100644 --- a/utils/CommonUtil.js +++ b/utils/CommonUtil.js @@ -190,29 +190,32 @@ const CommonUtil = { let firstSleepData = sleepArray[0]; resItem.date = firstSleepData.yyyyMMdd; resItem.sleepList.push(firstSleepData); // 将第一个数据放入到 `sleepList` - sleepArray.forEach(item => { - // 判断是否是同一天的数据 - let isSameDay = this.timeComparison(dateObj.yyyyMMdd, item.yyyyMMdd, item.minute); - - // 如果状态发生变化,且日期不同,就表示开始新的睡眠数据 - if (item.status !== firstSleepData.status) { - if (isSameDay) { - resItem.sleepList.push(item); // 如果是同一天,继续添加到当天的睡眠数据 - } else { - res.push(resItem); // 否则,将当天的数据推入结果数组 - resItem = { // 新的一天开始 - date: item.yyyyMMdd, - sleepList: [item] // 将当前项作为新的睡眠数据开始 - }; - dateObj = item; // 更新 `dateObj`,用于比对后续数据 - } + sleepArray.forEach((item,index) => { + // 判断是否是同一天的数据 + let isSameDay = this.timeComparison(dateObj.yyyyMMdd, item.yyyyMMdd, item.minute); + + // 如果状态发生变化,且日期不同,就表示开始新的睡眠数据 + if (item.status !== firstSleepData.status) { + if (isSameDay) { + resItem.sleepList.push(item); // 如果是同一天,继续添加到当天的睡眠数据 + } else { + // 取出数据 + resItem.sleepList[resItem.sleepList.length - 1] = sleepArray[index - 1]; + res.push(resItem); // 否则,将当天的数据推入结果数组 + resItem = { // 新的一天开始 + date: item.yyyyMMdd, + sleepList: [item] // 将当前项作为新的睡眠数据开始 + }; + dateObj = item; // 更新 `dateObj`,用于比对后续数据 } - firstSleepData = item; // 更新当前比对的睡眠数据 - }); + } + firstSleepData = item; // 更新当前比对的睡眠数据 + }); // 最后一次的睡眠数据也需要被加入到 `res` if (resItem.sleepList.length > 0) { - res.push(resItem); + resItem.sleepList[resItem.sleepList.length - 1] = sleepArray[sleepArray.length - 1]; + res.push(resItem); } return res; // 返回按天拆分后的睡眠数据 diff --git a/utils/DataPacket.js b/utils/DataPacket.js index dc1fa08..c41a083 100644 --- a/utils/DataPacket.js +++ b/utils/DataPacket.js @@ -196,6 +196,23 @@ const DataPacket = { return packet; }, + // 获取心率数据 + generateReadHRDataPacket() { + // 创建 Uint8Array 数据包 + const packet = new Uint8Array(16); + + // 填充命令数据包 + packet[0] = 0x55; // 命令字节 + packet[1] = 0x00; // 读取记步总数据 + packet.fill(0x00, 2, 15); // 填充其他字节为0 + + // 计算并设置 CRC 校验字节 + const crc = calculateCRC(packet.subarray(0, 15)); + packet[15] = crc; + + return packet; + }, + // 获取睡眠数据 generateReadSleepDataPacket() { const packet = new Uint8Array(16); diff --git a/utils/HealthDataCache.js b/utils/HealthDataCache.js index c8b7260..3b83bba 100644 --- a/utils/HealthDataCache.js +++ b/utils/HealthDataCache.js @@ -68,7 +68,7 @@ const HealthDataCache = { } }, - // 更新睡眠数据 + // 更新睡眠数据 ,睡眠计算可能不一样,因为存的是date updateSleepData(newDate) { let lastTime = this.getLastTimeField('sleepLastTime'); if(newDate > lastTime){