BLE速度踏频公有协议
BLE(Bluetooth Low Energy)
不知道从哪一年开始,BLE突然火了起来,可能是苹果推动的iBeacon,推了BLE一把吧
BLE模块越做越小,越做越省点,于是他们就纷纷往智能硬件上面去集成了,比如说什么手环啊,码表啊,门锁,窗帘啊,灯啊,炫轮啊,之类的.
How does it work
这里不是说BLE在底层如何工作,只是从上层软件开发的角度,讲讲BLE怎么工作
BLE必须提到的几个名词
- peripheral
- central
- service
- characteristic
- UUID
Peripheral
传说中的外设,也就是那些个手环啊,码表啊,炫轮啊之类的东西,他们在不停地广播自己存在的信号,可以让别人知道自己存在,自己的名字,自己有些什么Service.别人也可以根据这个广播计算以下RSSI(信号强度)
Central
暂且叫他主机吧,因为在定义中,并不是叫Peripheral和Central,而是Master和Slave(太难听了,还是使用iOS中的外设
和中心
吧).
Central可以接收到广播帧,并且知道它的Mac地址啊,拥有哪些Service啊,名字啊……
Service
服务,假设一个蓝牙可以提供很多信息,比如说,电量啊,心率啊,速度啊,还有自定义的一些数据.如果通过数据帧头来区分他们,会非常的麻烦.所以BLE有Service这个概念,一个Service负责一件事情,清晰明了.
Characteristic
特征值,每个服务可以拥有多个特征值,每个特征值都有权限,比如Read,Write,Write Without Response,Notify……
UUID
好吧,这么多东西,怎么标示嘞?用UUID咯…
BLE有专用UUID是16位的,然而标准的UUID是128位的.
总结一下
每一个外设(Peripheral)可以拥有很多的服务(Service),每一个服务(Service)可以拥有多个特征值(Characteristic),使用UUID来确定Service和Characteristic.
说说公有协议
由于BLE的Service和Characteristic的UUID是16位的,那就说有很多很多很多的UUID可以被定义.选择太多,就容易出乱子.所以大概是IEEE还是IEC还是SIG之类的组织专门定了一大堆公有协议
这个链接里面的Service是他们定的,貌似已经被大家接受了.
速度和踏频
为什么只说速度与踏频的公有协议呢?
因为我们刚好在做这个……
Service UUID: 0x1816
Characteristic UUID: 0x2A5B (至少得有Notify,Read权限)
有了这两个东西,你的App或者其他智能硬件就可以进行过滤扫描和连接了
具体协议
Flag(必须):8位
0x01==(速度数据)
0x02==(踏频数据)
0x03= (速度数据+踏频数据)
速度数据:
32位:累计轮胎圈数[溢出清零]
16位:时间(精确到1/1024秒)[溢出清零]
踏频数据:
16位:累计曲柄圈数[溢出清零]
16位:时间(精确到1/1024秒)[溢出清零]
举个例子
轮子在3.7353秒转动了103
圈,曲柄在54.1093秒转动了202
下
03 67 00 00 00
f1 0e 00 ca
d8 70