# Wosmart小程序demo **Repository Path**: priodigit/wosmar-mini-program-demo ## Basic Information - **Project Name**: Wosmart小程序demo - **Description**: 本项目用于wosmart 小程序 SDK Open项目 许可说明 本项目采用 **GNU General Public License v3.0** 进行许可。 但这不意味着您可以免费将它用于商业闭源产品。如果您希望将本SDK集成到自有(尤其是与手表硬件配套的)商业软件中,而无需公开您的源代码,则必须从我们公司获得一份单独的**商业许可。商业许可将解除GPL对您代码的开源要求,并为您提供更灵活使用 - **Primary Language**: JavaScript - **License**: Unlicense - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-04-25 - **Last Updated**: 2026-09-18 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # ws-ble-sdk 多厂商统一蓝牙 SDK(当前支持 `jw` / `vp` 设备),提供统一的扫描、连接、设置、功能控制与数据同步 API。 ## 1. 核心设计 - 统一入口:`WSBLE` - 统一成功返回:`{ code: 0, data: ... }` - 统一错误返回:`throw { code, message, stack }` - 自动按设备路由到对应 provider(`jw` / `vp`) ## 2. 快速开始 ### 2.1 引入 Demo 工程中建议统一通过 `common/sdk.js` 引入: ```javascript import WSBLE from '@/common/sdk.js'; ``` 如果你是在其他 uni-app 工程使用打包产物: ```javascript import WSBLE from '@/utils/ws-ble-sdk.esm.js'; ``` ### 2.2 标准调用流程 ```javascript import WSBLE from '@/common/sdk.js'; // 1) 初始化 await WSBLE.init({ config: {} }); // 2) 扫描 let foundDevice = null; await WSBLE.startScan({ onDeviceFound(device) { // device 里会包含 provider: 'jw' | 'vp' console.log('Found device:', device); foundDevice = device; } }); // 3) 连接(建议直接使用扫描返回的 device 对象) await WSBLE.connectDevice(foundDevice); // 4) 获取当前状态 const state = WSBLE.getBaseManager().getState(); console.log('Current state:', state); // 5) 业务调用(设置/功能/数据同步) const battery = await WSBLE.getSettingsManager().readBatteryLevel(); console.log('Battery:', battery.data); // 6) 断开 await WSBLE.disconnectDevice(); ``` ## 3. Manager 使用方式 ### 3.1 BaseManager(生命周期与连接) ```javascript const baseManager = WSBLE.getBaseManager(); await WSBLE.init({ config: {} }); await WSBLE.startScan({ onDeviceFound: (device) => console.log(device) }); await WSBLE.stopScan(); await WSBLE.connectDevice({ deviceId: 'xxx', provider: 'jw' }); console.log(WSBLE.getCurrentProvider()); // 'jw' | 'vp' | null console.log(WSBLE.getCurrentDevice()); // 当前设备信息 console.log(baseManager.isDeviceConnected()); ``` > 注意:`login(userID)` 仅 `jw` 设备支持,`vp` 设备不支持登录概念。 ### 3.2 SettingsManager(设备设置) ```javascript const settingsManager = WSBLE.getSettingsManager(); await settingsManager.syncTime(); await settingsManager.setLanguage('en'); await settingsManager.setHourSystem(true); await settingsManager.setTemperatureUnit(true); const battery = await settingsManager.readBatteryLevel(); console.log(battery.data.batteryLevel); ``` ### 3.3 FeatureManager(功能控制) ```javascript const featureManager = WSBLE.getFeatureManager(); await featureManager.findDevice(true); await featureManager.controlHeartRateMeasurement(true); await featureManager.controlHeartRateMeasurement(false); await featureManager.setTakePhotoControl(true); ``` ### 3.4 DataManager(健康/运动数据同步) ```javascript const dataManager = WSBLE.getDataManager(); const listener = { onSyncDataProgress(progress) { console.log('Progress:', progress); }, onStepDataReceived(stepDataList) { console.log('Step:', stepDataList); }, onSportDataReceived(sportDataList) { console.log('Sport:', sportDataList); }, onSyncDataFinished(totalPackage) { console.log('Sync done:', totalPackage); }, onSyncDataFailed(error) { console.error('Sync failed:', error); } }; // JW await dataManager.syncHealthDataByJW({ listener }); // VP (day/package: caller-owned cache to avoid re-fetch) await dataManager.syncHealthDataByVP({ listener, day: 0, package: 1 }); ``` ## 4. 事件监听 建议统一使用 `WSBLE.EVENT` 常量: ```javascript WSBLE.on(WSBLE.EVENT.DEVICE_CONNECTED, (data) => { console.log('Connected:', data); }); WSBLE.on(WSBLE.EVENT.HEART_RATE_DATA_RECEIVED, (data) => { console.log('Heart rate:', data); }); WSBLE.off(WSBLE.EVENT.HEART_RATE_DATA_RECEIVED, handler); ``` 常用事件包括: - `DEVICE_CONNECTING` - `DEVICE_CONNECTED` - `DEVICE_DISCONNECTED` - `CONNECTION_FAILED` - `DEVICE_FOUND` - `HEART_RATE_DATA_RECEIVED` - `SPO2_DATA_RECEIVED` - `BLOOD_PRESSURE_DATA_RECEIVED` - `BLOOD_SUGAR_DATA_RECEIVED` - `PHOTO_TRIGGER` ## 5. 错误处理建议 所有 API 建议统一用 `try/catch`: ```javascript try { const result = await WSBLE.getSettingsManager().readBatteryLevel(); console.log(result.data); } catch (error) { console.error('SDK error:', error.code, error.message, error.stack); } ``` ## 6. 开发文档索引 - `docs/WSBaseManager开发说明.md` - `docs/WSSettingsManager开发说明.md` - `docs/WSFeatureManager开发说明.md` - `docs/WSDataManager开发说明.md` - `docs/WSBaseManager-Developer-Guide.md` - `docs/WSSettingsManager-Developer-Guide.md` - `docs/WSFeatureManager-Developer-Guide.md` - `docs/WSDataManager-Developer-Guide.md`