可穿戴设备(CC2541)上微信(3)

来源:互联网 发布:php 模板引擎 排行 编辑:程序博客网 时间:2024/05/29 03:02

微信規定了藍牙 BLE 需要有以下兩個特點。

1:可以傳輸無限長度的數據。

2:雙工,讀寫可以並發,互不干擾。

藍牙無法傳輸無限長度的數據,為了實現這個目的,需要定議一個規範。     

ps:当然是把数据截成奋斗奋斗奋斗奋斗奋斗的,然后再发送了。。。要不然怎么办。。。就是下面的这个东东了。。。

注:把一个特征值一次传输的数据,称为一帧(不同类型的特征值一次传输的数据长度是不一样的)。


藍牙設備需暴露兩個特徵值﹝Characteristics﹞:Write 特徵值,Indication 特徵值。藍牙設備從 Write 特徵值接受數據,從 Indication 特徵值發送數據。

UUID 0xFEC8  Properties:Indicate            

UUID 0xFEC7  Properties:Read Write   


蓝牙的数据传输是通过特征值实现的,那既然已经有了接受和发送的特征值,那就可以读写了数据了。。。

蓝牙设备写过程:

1. 分帧:假设蓝牙手环上有1k数据,要发给手机微信。由于一个特征值长度有限(如20个字节),显然需要分多次才能传输完成。1k 数据,要分成 1024 字节/ 20 字节=51 个帧。剩下的 4 个字节,不足一帧(20个字节),需补齐为一帧并对剩下的 16 个字节赋 0。总共是 52 帧。

2. 发送第一个帧:把第一个帧的内容放入特征值里面。然后通知手机读取数据,通知有两种方式,Indication 和 notify,这里使用 Indication 方式,即带响应的通知。当通知完成的时候,可以认为手机已经读完数据。这就完成了发送第一个帧。

3. 按照 2 的步骤,依次发送剩下的帧。

按照此方法可以发送无线长度的数据。

蓝牙设备读过程:                                                                                              

当蓝牙设备发现读特征值收到数据的时候,就接收数据,并追加到设备的 buf 里。

 

注意:蓝牙设备必须等微信 app 订阅了 Characteristics 之后,才能 indicate 数据,否者会造成设备发送数据丢失的问题。


0 0