nibiewabc 发表于 2021-6-1 18:03

求大佬帮看看蓝牙协议,小白看不懂

这最近公司突然要说弄个蓝牙接收发送的项目,就直接丢个了蓝牙通信协议过来自己看,但是看了半天查了下资料还是搞不太懂啥意思,几进制什么的倒是明白,但是这怎么又分byte字节序号位的,还有要校验的完全搞不懂呀,这发送什么指令过去根本不知道怎么发送,文档是下面这样的说明。

APP发送:(参数变化时发送数据)
头码命令数据长度数据(11bytes)校验尾码
0x5A0xCx0x10Byte1Byte2……Byte111bytes0xA5

校验=头码^命令……^ Byte11命令0xC1:
字节序号Bit位位描述
Byte17关机标志位:0-开机;1-关机
6锁车标志位:0-解锁;1-锁车
5速度单位标志位:0-公里;1-英里
4巡航功能标志位:0-关闭;1-开启
3零启动标志位:0-非零启动;1-零启动
0-2档位值(1、2、3)
Byte27前灯标志位:0-关灯;1-开灯
6前灯模式标志位:0-手动;1-自动(光感)
5氛围灯标志位:0-关灯;1-开灯
4电子刹标志位:0-无电子刹;1-有电子刹
3恢复出厂设置标志位:0-不恢复;1-恢复出厂设置
0-2侧灯设置:000-关闭侧灯;001-A模式;010-B模式;011-C模式;100-D模式;101-E模式;110-F模式;111-G模式。
Byte37总里程清零标志位:0-不清零;1-清零
0-6备用标志位
Byte40-7备用标志位
Byte50-7侧灯色卡号状态-0-255
Byte60-7自动关机时间(单位:分钟)0-255
Byte70-7起步力度:0-100
Byte80-7刹车力度:0-100
Byte90-7大灯亮度:0-100
Byte100-7备用
Byte110-7备用

这Byte1到Byte11完全不明白,还有怎么这里又有个发送命令的16进制0xC1,这前面的校验又是什么回事,小白的我表示全懵逼了看不懂。查网上也查不到多少有用的东西,模模糊糊的就能知道一些进制什么的还有bit位。但是这里又是11个Byte又是校验的是什么情况。这我假如要发送Byte1的开机关机进制指令,和Byte2的前灯0-关灯,1-开灯进制指令,Byte3的清零不清零进制指令,这发送的指令要发送什么指令过去,这校验又是怎么校验的,求大佬解析下这发送指令是怎么推算过来的,完全不懂怎么发指令过去,发几进制的过去,而且发送的是什么。有没有做硬件的大佬帮看看,这指令前端是怎么发过去给蓝牙,到底是发什么指令过去。


求大佬给分析下是怎么看这些文档!!
求大佬给分析下是怎么看这些文档!!
求大佬给分析下是怎么看这些文档!!


感激不尽

cdj68765 发表于 2021-6-1 22:26

如果你有单片机开发经验的话,可以很容易理解这些的 我举个例子吧
就拿Byte1来说,所谓的Bit位就是二进制,
一共8位
0 1 2 3 4 5 6 7
1 1 1 1 1 0 0 0
三挡,零启动,巡航功能开启,单位公里,解锁,开机
以上就是根据你发的文档,按照位描述写的
然后你把那串01的组合用进制换算下
11111000二进制换算成十六进制就是0xF8,那也就是说Byte1的值就是0XF8
后面还有10个Byte都按照这个格式来写
写完以后,你会得到一串根据位描述不同组成的十六进制串
然后把你上面也写了 校验码就等于从头码0x5A开始,到最后一个Byte11 按照异或运算得到的一个十六进制数,再加上尾码组成一段数组发送过去
不知道这样子说明不明白

骚客 发表于 2021-6-1 22:53

蹲一个大佬 我也想学学

cube 发表于 2021-6-1 23:33

本帖最后由 cube 于 2021-6-1 23:47 编辑

> 头码、尾码、命令、长度这四个是固定的
头码、尾码、命令、长度、校验码占5个字节、数据占11个字节,共0x10个字节
`校验码`采用你们协商的校验方式计算出校验码`校验码=头码^命令^长度^Byte1^…Byte11`
***这里有个奇怪的问题,命令码是`0xcx` ,0xcx是多少?***
另外长度是否是固定的,我保持存疑态度。或许也可以这样: `0x5a 0xcx 0x0A Byet1-Byte5 校验码 0xa5`

字节序号, 比如第一个字节的数据`Byte1`, 每一位标识了不同的功能(`详见你贴出的附表`)。
你只需要按照你需要表达的功能为每一个字节、每一位分别赋值,然后用校验算法算出校验码就行了。
文档已经给的很详细了。

---

比如 0x5a 0xcx 0x10 Byte1=`0x00` ......... 0xa5

|头码|命令|长度|Byte1|...Byte11|校验码|尾码|
|:--:|:--:| :--:|--:|--:|:--:|:--:|
|0x5a| 0xcx| 0x10| 0x00| ...Byte11|校验码|0xa5
|0x5a| 0xcx| 0x10| b0000,0000| ...Byte11|校验码|0xa5
|0x5a| 0xcx| 0x10| 查表得: ***开机*** 解锁,公里单位,关闭巡航,非零启动,***1挡***| ...Byte11|校验码|0xa5

比如 0x5a 0xcx 0x10 Byte1=`0x01` ......... 0xa5

|头码|命令|长度|Byte1|...Byte11|校验码|尾码|
|:--:|:--:| :--:|--:|--:|:--:|:--:|
|0x5a| 0xcx| 0x10| 0x01| ...Byte11|校验码|0xa5
|0x5a| 0xcx| 0x10| b0000,0001| ...Byte11|校验码|0xa5
|0x5a| 0xcx| 0x10| 查表得: ***开机*** 解锁,公里单位,关闭巡航,非零启动,***2挡***| ...Byte11|校验码|0xa5

比如 0x5a 0xcx 0x10 Byte1=`0x81` ......... 0xa5

|头码|命令|长度|Byte1|...Byte11|校验码|尾码|
|:--:|:--:| :--:|--:|--:|:--:|:--:|
|0x5a| 0xcx| 0x10| 0x81| ...Byte11|校验码|0xa5
|0x5a| 0xcx| 0x10| b1000,0001| ...Byte11|校验码|0xa5
|0x5a| 0xcx| 0x10| 查表得: ***关机*** 解锁,公里单位,关闭巡航,非零启动,***2挡*** | ...Byte11|校验码|0xa5

nibiewabc 发表于 2021-6-2 09:33

cdj68765 发表于 2021-6-1 22:26
如果你有单片机开发经验的话,可以很容易理解这些的 我举个例子吧
就拿Byte1来说,所谓的Bit位就是二进制 ...

感谢大佬,这么说我就知道了。

nibiewabc 发表于 2021-6-2 09:36

cube 发表于 2021-6-1 23:33
> 头码、尾码、命令、长度这四个是固定的
头码、尾码、命令、长度、校验码占5个字节、数据占11个字节 ...

好的,非常感谢回答:'(weeqw,我大概知道要发什么指令了过去了。

nibiewabc 发表于 2021-6-2 09:58

cdj68765 发表于 2021-6-1 22:26
如果你有单片机开发经验的话,可以很容易理解这些的 我举个例子吧
就拿Byte1来说,所谓的Bit位就是二进制 ...

大佬还有一个问题,这个校验码文档说是1bytes这个1bytes是8bit吗,这个8bit是那些转换过来的呢,还是转换什么获取的,然后我要发什么过去是占这个校验码位置呀。

cdj68765 发表于 2021-6-2 20:32

nibiewabc 发表于 2021-6-2 09:58
大佬还有一个问题,这个校验码文档说是1bytes这个1bytes是8bit吗,这个8bit是那些转换过来的呢,还是转换 ...

我想我和楼上那位,关于检验码的问题讲的都很清楚了
校验码=头码^命令^长度^Byte1^…Byte11
校验码=0x5A^0xC1^0x10^Byte1^Byte2^Byte3直到Byte11
其中^代表的是运算符号异或运算,这样子运算出来的结果也是一个十六进制数0x??

nibiewabc 发表于 2021-6-3 09:22

cdj68765 发表于 2021-6-2 20:32
我想我和楼上那位,关于检验码的问题讲的都很清楚了
校验码=头码^命令^长度^Byte1^…Byte11
校验码=0x5 ...

好的,谢谢解答我懂了
页: [1]
查看完整版本: 求大佬帮看看蓝牙协议,小白看不懂