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){