# 蓝牙SDK **Repository Path**: mange/bluetooth_sdk ## Basic Information - **Project Name**: 蓝牙SDK - **Description**: No description available - **Primary Language**: Objective-C - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 5 - **Forks**: 3 - **Created**: 2018-11-13 - **Last Updated**: 2022-03-31 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 蓝牙SDK ### 项目介绍 SDK是用Objective-C语言编写,此SDK兼容了我司大部分的手环。用户不再需要看蓝牙协议,不再需要知道指令的具体实现,通过直接调用此SDK就可以快速和手环接通,进而开发属于自己的APP。 ### 各种手环与SDK的关系 我司按功能区分有如下几款手环: 1) 普通手环 (功能:计步、睡眠、普通心率、血压、血氧) 2) 连续心率手环 (功能:计步、睡眠、连续心率) 3) 连续心率血压手环 (功能:计步、睡眠、连续心率、血压) 4) 连续心率血氧手环 (功能:计步、睡眠、连续心率、血氧) 5) 连续心率血压血氧手环 (功能:计步、睡眠、连续心率、血压、血氧) 6) 心电手环 (功能:计步、睡眠、普通心率、血压、血氧、心电) SDK目前除了心电手环外,其他的手环都支持。手环有两种芯片,分别为nordic、汉天下,对于iOS来说,两种芯片的差别在于固件升级,其他的通讯指令没有差别,SDK目前只支持汉天下芯片的升级。 ### 软件架构 1) BleManager 蓝牙核心类 2) BleBaseHeader 头文件,包含项目所有的类 3) SendModel 指令方法所需要的参数对象都在此文件夹 4) BackModel 代理方法所需要的参数对象都在此文件夹 5) 蓝牙核心类里面,指令方法与代理回调方法一一对应 6) 协议指令均以ble_send开头 7) 协议指令代理回调均以bleBack_get开头 ### 安装教程 把class里面的内容拖进贵司项目内,引入头文件BleBaseHeader即可使用。 ### 使用说明 1) 我司有wearfit 1.0 和 wearfit 2.0两个手环APP,两个APP跟手环通讯协议上有一点小差距,具体差距会在使用方法时体现。 2) 贵司使用我们SDK,可以咨询我司固件开发人员手环适合使用哪个APP。 3) 调用获取版本号方法(`ble_sendVersion`),通过代理返回来的参数可判断手环具体适合使用wearfit 1.0 还是 wearfit 2.0。 4) 调用获取版本号方法返回来的参数,还可以通过参数知道当前手环是哪一款手环,这款手环有哪些功能是支持还是不支持,如果不支持的功能,不需要调用,也不需要接收相应的代理方法。所有的指令,如果没有找到相应的代理方法,说明是没有回调的。 ### 属性说明 0) delegate 代理 1) centralManager 蓝牙管理者 2) activePeripheral 处于连接状态的设备 3) UUIDString 蓝牙的信息,可用来重连 ### 指令方法说明 #### 蓝牙库指令 0) +(instancetype)sharedBleManager; 类方法(直接使用宏即可,不需要自己直接调用) 1) -(void)ble_startScanBleDevicesWithDuration:(NSInteger)duration; 开始搜索设备(可通过duration设置搜索多少秒、当调用连接设备方法会自动停止搜索) * duration 持续时间(单位:秒) 2) -(void)ble_stopScanBleDevices; 停止搜索设备 3) -(void)ble_connectBleDevice:(CBPeripheral *)peripheral; 连接设备 * peripheral 需要连接的设备 4) -(void)ble_disconnectBleDevice; 断开设备 5) -(void)ble_readRSSI; 获取实时蓝牙信号 #### 协议通讯指令 6) -(void)ble_sendBondSystem; 配对(未配对,系统会弹配对对话框;已配对,没有任何反应) 7) -(void)ble_sendUserTime:(UserDateModel *)userDateModel; 同步时间 * userDateModel 用户时间模型 8) -(void)ble_sendUserInfoNormal:(UserInfoNormalModel *)userInfo; 用户信息(适用于我司wearfit 1.0的设备,具体情况请咨询我司固件开发人员,或看VersionModel模型的type属性) * userInfo 用户信息模型 9) -(void)ble_sendUserInfoAlertBPM:(UserInfoAlertBpmModel *)userInfo; 用户信息(适用于我司wearfit 2.0的设备,具体情况请咨询我司固件开发人员,或看VersionModel模型的type属性) * userInfo 用户信息模型 10) -(void)ble_sendAlert:(TimeAlertModel *)timeAlertModel; 设备闹钟(每次APP连上设备,设备都会清空所有的闹钟设置,所以APP每次连接上设备都需要重新下发所有的闹钟设置) * timeAlertModel 闹钟对象 11) -(void)ble_sendFindDevice; 查找设备 12) -(void)ble_sendLongTimeSit:(LongTimeSitModel*)longTimeSitModel; 久坐提醒 * longTimeSitModel 久坐提醒模型 13) -(void)ble_sendIgnore:(IgnoreModel *)ignoreModel; 勿扰模式 * ignoreModel 勿扰模式模型 14) -(void)ble_sendSleepTimeRange:(SleepTimeRangeModel *)sleepTimeRangeModel; 设置睡眠时间范围(根据获取版本号代理参数判断是否支持) * sleepTimeRangeModel 睡眠时间范围模型 15) -(void)ble_sendLightWithOn:(BOOL)isOn; 抬手亮屏 * isOn YES:打开 NO:关闭 16) -(void)ble_sendHourMeasureWithOn:(BOOL)isOn; 整点测量(连续心率设备没有整点测量功能,无需调用;普通设备需要开启整点测量才有整点数据) * isOn YES:打开 NO:关闭 17) -(void)ble_sendTakePictureWithOn:(BOOL)isOn; 摇一摇拍照 * isOn YES:打开 NO:关闭 18) -(void)ble_sendAntiLostWithOn:(BOOL)isOn; 防丢提醒 * isOn YES:打开 NO:关闭 19) -(void)ble_sendSwitchLanguageWithOn:(BOOL)isOn; 中英文切换 * isOn YES:英文 NO:中文 20) -(void)ble_sendSwitchTimeFormatterWithOn:(BOOL)isOn; 时间制度切换(根据获取版本号代理参数判断是否支持) * isOn YES:12小时制 NO:24小时制 21) -(void)ble_sendBatteryLevel; 获取电量 22) -(void)ble_sendVersion; 获取版本号 23) -(void)ble_sendDeleteDeviceData; 清空设备数据 24) -(void)ble_sendDeviceInit; 恢复出厂设置(不删除数据) 25) -(void)ble_sendMeasureAllWithOn:(BOOL)isOn; 一键测量(普通设备;开始测量一分钟后,需要下发关闭测量指令,才会有一个值返回) * isOn YES:打开 NO:关闭 26) -(void)ble_sendRealTimeDurationHeartWithOn:(BOOL)isOn; 获取实时心率(连续心率设备) * isOn YES:开始获取 NO:停止获取 27) - (void)ble_sendRealTimeDurationAnimalHeatWithOn:(BOOL)isOn; 获取实时体温(连续体温设备) * isOn YES:开始获取 NO:停止获取 28) -(void)ble_sendBpmPowerSavingModeWithOn:(BOOL)isOn; 连续心率省电模式(连续心率设备) * isOn YES:打开 NO:关闭 #### 整点数据、睡眠数据指令(51、52) ``` 整点数据指令注意: 1、请求整点数据,返回来的数据除了整点数据外,还有实时数据、单机测量数据、实时测量数据 2、如果未开启整点测量就不会有整点数据,但是不管什么设备依旧会返回实时数据、单机测量数据、实时测量数据 3、请求整点数据分为普通设备和连续心率设备两种情况 4、普通设备:需要先通过开启整点测量(ble_sendHourMeasureWithOn),并且测有整点数据的情况下才会返回整点数据 5、连续心率设备:连续心率设备无需开启或关闭整点测量(关闭不了),默认就是开启的 6、连续心率设备发送整点数据指令,获取的整点数据没有心率、血压、血氧,其他数据如果有,则返回 7、设备实时数据不做保存,其他数据只保存7天 8、设备传过来数据的时间都是24小时制,体温都是摄氏度 9、例子:发送2018年11月1日0点时间给设备,设备返回2018年11月1日0点到2018年11月7日0点的数据(如果有) 睡眠数据指令注意: 1、睡眠数据,设备也是只保存7天 2、例子:发送2018年11月2日时间给设备,设备返回2018年11月1日到2018年11月7日0点的数据 ``` 29) -(void)ble_sendAllDataWithDateModel:(DateModel *)dateModel; 请求整点数据(普通设备) * dateModel 时间模型 30) -(void)ble_sendAllDataBpmWithDateModel:(BpmDateModel *)bpmDateModel; 请求整点数据(连续心率设备) * bpmDateModel 连续心率时间模型 31) -(void)ble_sendSleepWithDateModel:(SleepDateModel *)sleepDateModel; 请求详细的睡眠数据 * sleepDateModel 睡眠时间模型 #### 单次测量、实时测量指令 ``` 注意:1、以下单次测量、实时测量指令,手环支持相应功能才有效 2、开始测量40秒后,需要下发关闭测量指令,才会有一个值返回 ``` 32) -(void)ble_sendOneMeasureHeartWithOn:(BOOL)isOn; 单次测量心率 * isOn YES:开始测量 NO:关闭测量 33) -(void)ble_sendRealTimeMeasureHeartWithOn:(BOOL)isOn; 实时测量心率 * isOn YES:开始测量 NO:关闭测量 34) -(void)ble_sendOneMeasureBloodWithOn:(BOOL)isOn; 单次测量血压 * isOn YES:开始测量 NO:关闭测量 35) -(void)ble_sendRealTimeMeasureBloodWithOn:(BOOL)isOn; 实时测量血压 * isOn YES:开始测量 NO:关闭测量 36) -(void)ble_sendOneMeasureOxygenWithOn:(BOOL)isOn; 单次测量血氧 * isOn YES:开始测量 NO:关闭测量 37) -(void)ble_sendRealTimeMeasureOxygenWithOn:(BOOL)isOn; 实时测量血氧 * isOn YES:开始测量 NO:关闭测量 38) - (void)ble_sendOneMeasureAnimalHeatWithOn:(BOOL)isOn; 单次测量体温 * isOn YES:开始测量 NO:关闭测量 #### 消息提醒指令 ``` 注意:1、需要先配对并且勿扰模式为关闭的情况下才能正常使用 2、消息提醒指令有些设备只支持部分消息提醒,具体情况请咨询我司固件开发人员 3、下发获取版本号指令(ble_sendVersion),可根据代理方法的VersionModel模型参数判断是否支持 ``` 39) -(void)ble_sendNotificationCallWithOn:(BOOL)isOn; 来电提醒 * isOn YES:打开 NO:关闭 40) -(void)ble_sendNotificationMessageWithOn:(BOOL)isOn; 短信提醒 * isOn YES:打开 NO:关闭 41) -(void)ble_sendNotificationQQWithOn:(BOOL)isOn; QQ消息提醒 * isOn YES:打开 NO:关闭 42) -(void)ble_sendNotificationSkypeWithOn:(BOOL)isOn; Skype消息提醒 * isOn YES:打开 NO:关闭 43) -(void)ble_sendNotificationWechatWithOn:(BOOL)isOn; 微信消息提醒 * isOn YES:打开 NO:关闭 44) -(void)ble_sendNotificationWhatsAppWithOn:(BOOL)isOn; WhatsApp消息提醒 * isOn YES:打开 NO:关闭 45) -(void)ble_sendNotificationLineWithOn:(BOOL)isOn; Line消息提醒 * isOn YES:打开 NO:关闭 46) -(void)ble_sendNotificationTwitterWithOn:(BOOL)isOn; Twitter消息提醒 * isOn YES:打开 NO:关闭 47) -(void)ble_sendNotificationFacebookWithOn:(BOOL)isOn; Facebook消息提醒 * isOn YES:打开 NO:关闭 48) -(void)ble_sendNotificationFacebookMessagerWithOn:(BOOL)isOn; FacebookMessager消息提醒 * isOn YES:打开 NO:关闭 49) -(void)ble_sendNotificationInstagramWithOn:(BOOL)isOn; Instagram消息提醒 * isOn YES:打开 NO:关闭 50) -(void)ble_sendNotificationWeiboWithOn:(BOOL)isOn; 微博消息提醒 * isOn YES:打开 NO:关闭 51) -(void)ble_sendNotificationKakaoTalkWithOn:(BOOL)isOn; KakaoTalk消息提醒 * isOn YES:打开 NO:关闭 52) -(void)ble_sendNotificationSnapchatWithOn:(BOOL)isOn; Snapchat消息提醒 * isOn YES:打开 NO:关闭 #### 固件升级指令 53) -(void)ble_sendEnterISP; 进入ISP模式 54) -(int)ble_sendFileData:(NSMutableData*)data length:(int)length; 发送文件数据 * data 数据 * length 数据长度 55) -(void)ble_sendCmdData:(NSMutableData *)data; 设备复位 * data 数据 ### 代理回调说明 #### 蓝牙库回调 0) -(void)bleBack_state_On; 手机蓝牙状态为打开的回调方法 1) -(void)bleBack_state_Off; 手机蓝牙状态为关闭的回调方法 2) -(void)bleBack_scanDevicesWithBleArray:(NSMutableArray *)bleArray; 搜索到设备回调方法 * bleArray 设备数组(数组里面是BleModel) 3) -(void)bleBack_connectDeviceSuccessWithPeripheral:(CBPeripheral *)peripheral; 连接设备成功回调方法 * peripheral 设备对象 4) -(void)bleBack_disconnectDeviceWithPeripheral:(CBPeripheral *)peripheral error:(NSError *)error; 断开设备回调方法 * peripheral 设备对象 * error 错误信息 5) -(void)bleBack_readRSSI:(NSNumber *)RSSI error:(NSError *)error; 获取实时蓝牙信号回调方法 * RSSI 信号对象 * error 错误信息 #### 协议通讯指令回调 6) -(void)bleBack_getVersion:(VersionModel *)versionModel; 获取版本号(wearfit 1.0 和 wearfit 2.0返回来的步长、睡眠区间、12和24小时制度切换是不一致的,详见VersionModel) * versionModel 版本号模型 7) - (void)bleBack_getVersion2:(VersionModel2 *)versionModel2; 获取版本号(追加) * versionModel2 版本号模型 8) -(void)bleBack_getBatteryLevelWithState:(int)state value:(int)value; 电池电量 * state 电池状态(0:未充电 1:充电中) * value 电量值(固定为:0、20、40、60、80、100六个值) 9) -(void)bleBack_getDeviceSearchIphoneWithState:(int)state; 设备查找手机 * state 查找状态(0:停止查找 1:开始查找) 10) -(void)bleBack_getTakePicture; 摇一摇拍照 11) -(void)bleBack_getMeasureAllWithHeart:(int)heart oxygen:(int)oxygen maxBlood:(int)maxBlood minBlood:(int)minBlood; 一键测量 * heart 心率值 * oxygen 血氧值 * maxBlood 收缩压 * minBlood 舒张压 12) -(void)bleBack_getRealTimeDurationHeart:(int)heart; 获取实时心率(连续心率设备) * heart 心率值 13) - (void)bleBack_getRealTimeDurationAnimalHeat:(int)maxAnimalHeat minAnimalHeat:(int)minAnimalHeat; 获取实时体温(连续体温设备) * maxAnimalHeat 整数部分体温值 * minAnimalHeat 小数部分体温值 #### 整点数据、睡眠数据指令回调(51、52) 14) -(void)bleBack_getRealTimeData:(RealTimeDataModel *)realTimeDataModel; 实时数据 * realTimeDataModel 实时数据模型 15) -(void)bleBack_getOffLineHeart:(OffLineHeartModel *)offLineHeartModel; 设备单机测量的心率(普通手环为每个整点一条数据,连续心率默认为5分钟一条数据) * offLineHeartModel 设备单机测量心率模型 16) -(void)bleBack_getOffLineBlood:(OffLineBloodModel *)offLineBloodModel; 设备单机测量的血压 * offLineBloodModel 设备单机测量血压模型 17) -(void)bleBack_getOffLineOxygen:(OffLineOxygenModel *)offLineOxygenModel; 设备单机测量的血氧 * offLineOxygenModel 设备单机测量血氧模型 18) - (void)bleBack_getOffLineAnimalHeat:(OffLineAnimalHeatModel *)offLineAnimalHeatModel; 设备单机测量的体温 * offLineAnimalHeatModel 设备单机测量体温模型 19) -(void)bleBack_getAllData:(AllDataModel *)allDataModel; 设备整点数据 * allDataModel 返回整点数据时间模型 20) - (void)bleBack_getAllData2:(AllDataModel2 *)allDataModel2; 设备整点数据(追加) * allDataModel2 返回整点数据模型 21) -(void)bleBack_getSleepWithSleepDataModel:(SleepDataModel *)sleepDataModel; 详细睡眠数据 * sleepDataModel 睡眠数据模型 #### 单次测量、实时测量指令回调 22) -(void)bleBack_getOneMeasureHeart:(int)heart; 单次测量心率 * heart 心率值 23) -(void)bleBack_getRealTimeMeasureHeart:(int)heart; 实时测量心率 * heart 心率值 24) -(void)bleBack_getOneMeasureBloodWithMaxBlood:(int)maxBlood minBlood:(int)minBlood; 单次测量血压 * maxBlood 收缩压 * minBlood 舒张压 25) -(void)bleBack_getRealTimeMeasureBloodWithMaxBlood:(int)maxBlood minBlood:(int)minBlood; 实时测量血压 * maxBlood 收缩压 * minBlood 舒张压 26) -(void)bleBack_getOneMeasureOxygen:(int)oxygen; 单次测量血氧 * oxygen 血氧值 27) -(void)bleBack_getRealTimeMeasureOxygen:(int)oxygen; 实时测量血氧 * oxygen 血氧值 28) - (void)bleBack_getOneMeasureAnimalHeat:(int)maxAnimalHeat minAnimalHeat:(int)minAnimalHeat; 单次测量体温 * maxAnimalHeat 整数部分体温值 * minAnimalHeat 小数部分体温值 #### 固件升级指令回调 29) -(void)bleBack_getOtaData:(NSMutableData *)data type:(int)type; OTA数据 * data 数据 * type 数据类型(0:错误数据 1:正常数据 2:复位数据) ### 资料下载 1) 普通手环蓝牙协议 2) 连续心率手环蓝牙协议 3) 汉天下升级demo ##### 均在附件下载 ### 参与贡献 1. 毛哥