iOS—swift版蓝牙解析

        对于iOS蓝牙我就不做过多的介绍了,请自行百度。

        此处我们用的是ble4.0低功耗蓝牙,下面我们来说一下蓝牙解析。

        当我们对发送数据的特征开启监听的时候,下面的回掉会为我们返回数据

蓝牙数据

            此处当我们收到数据后,我们用另一个队列来解析它,也许这个时候你会问,蓝牙的发送速率是最低20ms,否则不满足协议,在这个时间里我们拥有足够的时间来解析数据,此处不是我多此一举啊,听我慢慢解释。ble要求我们发送间隔大于20ms,但是有些人不听话你就没办法了,说安卓可以啊,你的lightblue也可以啊,如下图

iOS—swift版蓝牙解析_第1张图片
lightblue示意图

        这个时候你需要创建队列来执行你的任务

iOS—swift版蓝牙解析_第2张图片
data数据转换

    先简单介绍下我们的蓝牙数据格式

iOS—swift版蓝牙解析_第3张图片
蓝牙数据

        上图中我画出了两个数据包,但是他们出现在3帧数据里

        0 :消息头

        1:消息长度

        2:消息编号(第几条消息)

        3:组系统id(暂时不管)

        4:组件id(暂时不管)

        5 ~ (n-2):消息数据

        n-1:crc第八位

        n:crc高八位

        对于上面的消息,我们发现数据包错乱了,因此我们得首先获取正确的数据包,根据上面的数据类型,我们可以把解析分为8个步骤

iOS—swift版蓝牙解析_第4张图片
解析步骤

    现在开始获取完整数据包。此处我们每校验一个数据就开始进入下一个步骤一旦数据错误,我们就会到之前开始校验数据的下一位,并且移除掉开始检验数据的那一位

iOS—swift版蓝牙解析_第5张图片
获取正确的消息包-01
iOS—swift版蓝牙解析_第6张图片
获取正确的消息包-02
iOS—swift版蓝牙解析_第7张图片
获取正确的消息包-03

当获得一个完整的数据包之后,就要解析数据了,数据解析尽量用位运算,这种操作运行速度快,如果是oc,我们可以直接采用结构体解析,其中注意结构体的对其就行 ,此处解析的时候,大家一定要先类型转换再位运算,防止越界

iOS—swift版蓝牙解析_第8张图片
蓝牙数据解析

    float数据解析(我swift刚入门几个月,必要的时候还的靠OC)

iOS—swift版蓝牙解析_第9张图片
float数据解析

你可能感兴趣的:(iOS—swift版蓝牙解析)