健身怪兽划船机蓝牙通讯协议

英文名称: FIT MONSTER Fitness Device BLE Protocol for Rower

文档信息
Document Information

项目 / Item 内容 / Content
当前版本 / Current Version V1.0
修订日期 / Revision Date 2024.12.01
修订人 / Editor Sam

修订记录 / Revision History

版本号 / Version 修订日期 / Revision Date 修订人 / Editor 修订内容 / Revision Content
V1.0 2024.12.01 Sam 新建 / New File

1. 基本定义

1.1 通信方式

1.1.1 通信硬件和技术

采用蓝牙(BLE)无线通信技术,通信模式为一对一的数据通信,一个手机连接一个设备。

1.1.2 蓝牙服务和设备特征

通信中用到的蓝牙服务(Service):

特征值(Characteristic)
0000ffe1
0000ffe2
补充:暂时使用0000ffe0-0000-1000-8000-00805f9b34fb服务进行通讯,以下位机使用的BLE模块为准,随时修改。

1.2 数据格式

1.2.1 包头包尾

包头固定为 0xf9,包尾固定为 0xfd

解释:0x 为十六进制表示,数据包中省略。

1.2.2 校验码

校验码一般在包尾的前两位,规则为求和校验。将数据包的各个字节相加(除了校验码本身和包尾),求和取16进制结果的最低两位即可。

以20位数据包举例:

数据包:f9c33424192a101632030f0214552cfd

求和:将 f9 c3 34 24 19 2a 10 16 32 03 0f 02 14 55 相加求和为 32c,取最低两位 2c 为校验码的值。

1.3 超时和重传机制

暂无,后续补充

2. 通讯协议内容

2.1 查询划船器当前数据(频率间隔150ms)

2.1.1 移动端请求

请求格式

D0 D1 D2 D3 D4
包头 控制码 查询指令 校验码 包尾

数据字典

字段 数据 长度 说明
D0 0xf9 1 包头,固定
D1 0xc4 1 控制码
D2 0x01 1 表示查询当前所有数据(后续待补充)
D3 - 1 校验码:将数据包的各个字节相加(除了校验码本身和包尾)
D4 0xfd 1 包尾,固定

2.1.2 下位机应答

应答格式

D0 D1 D2 D3 D4 D5 D6 D7 D8 D9
包头 - 1段 2段 3段 4段 5段 6段 7段 8段
D10 D11 D12 D13 D14 D15 D16 D17 D18 D19
桨频 阻力 心率 状态 座椅 座椅 次数 次数 校验码 包尾

数据字典

字段 数据 长度 数值范围 说明
D0 0xf9 1 - 包头
D1 0xc5 1 - 控制码
D2 - 1 - 第1段时间
D3 - 1 - 第2段时间
D4 - 1 - 第3段时间
D5 - 1 - 第4段时间
D6 - 1 - 第5段时间
D7 - 1 - 第6段时间
D8 - 1 - 第7段时间
D9 - 1 - 第8段时间
D10 - 1 - 桨频
D11 - 1 - 当前阻力
D12 - 1 - 心率
D13 - 1 - 状态(1-拉桨;2-回桨;0-空桨)
D14 - 1 - 座椅L
D15 - 1 - 座椅H
D16 - 1 - 划桨次数L
D17 - 1 - 划桨次数H
D18 - 1 - 校验码:将数据包的各个字节相加(除了校验码本身和包尾)
D19 0xfd 1 - 包尾
补充:1. 从D2-D9是分8段显示拉桨和回桨的长度,每次拉桨长度不同,返回的段数数据也不同;
2. 下位机应答分查询应答和主动应答,当每次拉桨和回桨转换时,下位机会主动应答整个拉桨数据或回桨数据。

2.1.3 代码示例

移动端发送:f9c401befd
下位机应答:f9c33424192a101632030f0214552cfd

2.2 移动端设置机器

2.2.1 移动端请求

请求格式

D0 D1 D2 D3 D4 D5 D6 D7 D8 D9
包头 控制码 阻力 座椅 座椅 - - 状态 验证码 包尾

数据字典

字段 数据 长度 数值范围 说明
D0 0xf9 1 - 包头
D1 0xc2 1 - 控制码
D2 - 1 - 阻力
D3 - 1 - 座椅L
D4 - 1 - 座椅H
D5 - 1 - 待定
D6 - 1 - 待定
D7 - 1 - 状态(1-开始;2-结束;3-暂停;0-默认无操作)
D8 - 1 - 校验码:将数据包的各个字节相加(除了校验码本身和包尾)
D9 0xfd 1 - 包尾

2.2.2 下位机应答

应答格式

D0 D1 D2 D3 D4
包头 控制码 执行结果 校验码 包尾

数据字典

字段 数据 长度 说明
D0 0xf9 1 包头
D1 0xc3 1 控制码
D2 - 1 结果码 0x00为执行成功回执
D3 - 1 校验码:将数据包的各个字节相加(除了校验码本身和包尾)
D4 0xfd 1 包尾

2.2.3 代码示例

移动端发送:f9c20101010101c0fd
下位机应答:f9c500befd

2.3 连接后查询标记机器状态

2.3.1 移动端请求

请求格式

D0 D1 D2 D3 D4
包头 控制码 查询/查询标记 校验码 包尾

数据字典

字段 数据 长度 数值范围 说明
D0 0xf9 1 - 包头
D1 0xc0 1 - 控制码
D2 0x00 1 - 查询机器状态(是否标记、版本号L、版本号H)和查询标记机器状态
0x00-查询;0x01-查询&标记
D3 - 1 - 校验码:将数据包的各个字节相加(除了校验码本身和包尾)
D4 0xfd 1 - 包尾

2.3.2 下位机应答

应答格式

D0 D1 D2 D3 D4 D5 D6
0xf9 控制码 标记状态 版本号L 版本号H 校验位 0xfd

数据字典

字段 数据 长度 说明
D0 0xf9 1 包头
D1 0xc1 1 控制码
D2 - 1 0x01表示未标记过(重新上电了),0x00表示已标记
D3 - 1 版本号L
D4 - 1 版本号H
D5 - 1 校验码:将数据包的各个字节相加(除了校验码本身和包尾)
D6 0xfd 1 包尾

2.4 设置灯带灯效

2.4.1 移动端请求

请求格式

D0 D1 D2 D3 D4 D5 D6 D7
包头 控制码 模式 红色值 绿色值 蓝色值 校验码 包尾

数据字典

字段 数据 长度 数值范围 说明
D0 0xf9 1 - 包头
D1 0xc6 1 - 控制码
D2 - 1 - 模式:0常灭,1常亮,2快闪,3呼吸
D3 - 1 0-100 红色份量
D4 - 1 0-100 绿色份量
D5 - 1 0-100 蓝色份量
D6 - 1 - 校验码:将数据包的各个字节相加(除了校验码本身和包尾)
D7 0xfd 1 - 包尾

2.4.2 下位机应答

应答格式

D0 D1 D2 D3 D4
包头 控制码 执行结果 校验码 包尾

数据字典

字段 数据 长度 说明
D0 0xf9 1 包头
D1 0xc7 1 控制码
D2 - 1 结果码 0x00为执行成功
D3 - 1 校验码:将数据包的各个字节相加(除了校验码本身和包尾)
D4 0xfd 1 包尾

2.5 连接后查询机器型号

2.5.1 移动端请求

请求格式

D0 D1 D2 D3 D4
包头 控制码 查询指令 校验码 包尾

数据字典

字段 数据 长度 数值范围 说明
D0 0xf9 1 - 包头
D1 0xc8 1 - 控制码
D2 0x00 1 - 0x00为查询
D3 - 1 - 校验码:将数据包的各个字节相加(除了校验码本身和包尾)
D4 0xfd 1 - 包尾

2.5.2 下位机应答

应答格式

D0 D1 D2 D3 D4 D5 D6
0xf9 控制码 品类 型号L 型号H 校验位 0xfd

数据字典

字段 数据 长度 说明
D0 0xf9 1 包头
D1 0xc9 1 控制码
D2 - 1 0x01为划船器品类
D3 - 1 型号L:0x0c为划船器M1
D4 - 1 型号H(补充)
D5 - 1 校验码:将数据包的各个字节相加(除了校验码本身和包尾)
D6 0xfd 1 包尾
连接上蓝牙后APP主动发送查询请求,下控收到查询后回复型号。APP如果没有收到回复会继续发2次查询,3次都没有收到回复默认型号为划船器M1。

2.6 连接后查询机器固件版本

2.6.1 移动端请求

数据字典

字段 数据 长度 数值范围 说明
D0 0xf9 1 - 包头
D1 0xca 1 - 控制码
D2 - 1 - 校验码:将数据包的各个字节相加(除了校验码本身和包尾)
D3 0xfd 1 - 包尾
示例请求数据包:F9CAC3FD

2.6.2 下位机应答

数据字典

字段 数据 长度 说明
D0 0xf9 1 包头
D1 0xcb 1 控制码
D2 - 1 版本号
D3 - 1 型号L:0x0c为划船器M1,0x0e为懒人车R1
D4 - 1 型号H
D5 - 1 语言:0x00-简中,0x01-繁中,0x02-英语,0x03-韩语,0x04-日语,0x05-德语
D6 - 1 公英制:0x00-公制单位,0x01-英制单位
D7 - 1 客制化编号:公版默认为0x00,后面如果有客制化版本在这里添加
D8 - 1 校验码:将数据包的各个字节相加(除了校验码本身和包尾)
D9 0xfd 1 包尾