轻松上手 Android蓝牙基础开发(3)

蓝牙的发展历史

蓝牙技术最初是由爱立信创制的。技术始于爱立信公司 1994 方案,它是研究在移动电话和其他配件间进行低功耗、低成本无线通信连接的方法。发明者希望为设备间的通讯创造一组统一规则(标准化协议)用来解决用户间相互不兼容的移动电子设备。

1998 年 5 月 20 日,索尼以立信、国际商业机器、英特尔、诺基亚及东芝公司等业界龙头创立“特别兴趣小组”(Special Interest Group SIG),即蓝牙技术联盟的前身,目标是开发一个成本低、效益高、可以在短距离范围内随意无线连接的蓝牙技术标准。负责蓝牙规范的制定和推广的国际组织。

1998年推出了 0.7 规格,1999 年推出了 0.8、0.9等等。1999 年 7 月正式公布 1.0 版本,使用 2.4GHz频谱,最高资料传输速度 1Mbps。2001 年的 1.1 版本正式列入 IEEE 标准。

蓝牙其实就是一种近距离无线通信技术。

image
  • 低功耗蓝牙 BLE
    全称是 Bluetooth Low Energy 简称 BLE 。最大的特点就是低功耗,有些 BLE 设备一个纽扣电池可以使用一两年。这对于现在的穿戴设备以及各种物联网传感器来说是一个很大的突破。同时它的传输的数据就很少。
  • 在 Android 4.3 的时候开始支持低功耗蓝牙。仅仅支持中心模式,就是只可以连接其他蓝牙外设。到了 2014 年 Android 5.0 开始也支持周边模式。

协议栈

image

图片来自网络

从下到上分别为:控制器(Controller)-->主机(host)-->应用(Application)

控制器:协议栈的底层的实现,直接和硬件相关,由芯片厂商实现,包括物理层、链路层、主机控制接口。

主机:协议栈的上层实现是硬件的抽象,与具体的硬件厂商没有关系。

应用层:使用主机层提供的 API 开发的应用。

详细介绍各个层的含义:

  • PHY(Physical Layer)物理层,蓝牙是工作在 2.4GHz 附近,这是工业、科学、医疗 ISM 的频段,免许可证。WIFI 也是工作在同一个频段。蓝牙把频段切分为 40 个通道,其中 3 个广播通道,37 个数据通道,按照一个规律跳频通信。
  • LL(Linker Layer)链路层,用于控制设备的射频状态,设备将处于五种状态之一:等待、广告、扫描、初始化、连接。广播设备不需要建立连接就可以发送数据,而扫描设备接受广播设备发送的数据;发起连接的设备通过发送连接请求来回应广播设备,如果广播设备接受请求,那么广播设备与发起连接的设备将会进入连接状态。发起连接的设备称为主机,接受连接请求的设备称为从机。
  • HCI(Host Controller Interface):主机和控制器就是通过这个接口来进行通讯的,通讯的介质就是 HCI 命令。这层在协议栈中是可选的,一些小型终端可能没有,但是 Android 设备上肯定有,这层是蓝牙上层和芯片的交互必经之路,对于蓝牙硬件开发者,这里的 log 能够很好的帮助解决问题。
  • HOST 部分要复杂。有链路控制和适配层(L2CAP),安全管理(SM)等。重点看属性协议层,也就是 ATT。它是整个 BLE 通信的基础。ATT负责数据封装,向外暴露为 “属性”,提供“属性”的为服务端,获取“属性”的为客户端。ATT 是专门为 BLE 低功耗蓝牙而设计的传输协议,结构简单,传输数据短。
  • GATT(Generic Attribute Profile):全称叫做通用属性配置文件,是基于 ATT 做的进一步的逻辑封装,定义数据的交互方式和含义,APP 开发就是用的这一层。GATT 定义了三个非常重要的概念:服务(Service)、特征(Characteristic)、描述(Descripter)。他们的关系如下图
image

一个 Service 可以包含若干个 Characteristic,一个 Characteristic 可以包含属性(properties)和值(value),还可以包含多个 descripter 。Characteristic 实际上具有读、写、通知等权限。我们在对一个 BLE 设备发起连接成功以后,对他进行读写操作,其实就是对 Characteristic 的操作。图中的 Profile 是一组服务的集合,这些服务组个起来就形成了一个特定的使用场景了,里面的服务是嵌入式工作人员可以添加的。BLE 蓝牙使用 UUID 来区分 Service、Characteristic 、Descripter。

  • GAP(Generic Access Profile):通用访问控制配置文件。定义了 BLE 整个通信过程中的流程,负责处理设备访问模式和程序,包括设备发现、建立连接、终止连接等等。GAP 层总是作为下面四种角色之一:(1)广播者:不可连接的广播设备。(2)观察者:扫描设备,但不发起建立连接 (3)外部设备:可连接的广播设备,可以在单个链路层连接中作为从机。(4)集中器:扫描广播设备并发起连接,可以在单链路层连接中作为主机。

应用开发

BLE 应用可以分为两大类:基于非连接的和基于连接的

基于非连接的:

意思就是外设和周边设备不发生连接,主要靠扫描到的广播来获取信息。发送广播的一方叫做 broadcaster 监听广播的一方叫做 oberver 在 GAP 层有对应的角色定义。

网络拓扑图:

image

这种方式就是广播设备不断的向外发送广播(含有特定的信息),然后观察者接受到广播按照两者之间约定好的协议进行解析拿到有用的信息。例如:iBeacon,通过这种设备我们可以实现室内定位。

其实这些设备的角色可以即使广播者又是观察者。接收到广播后作出了处理,然后又发送广播。这样就形成了双向的网络,类似于因特网,这就是蓝牙 Mesh 组网。

广播数据包格式:

image

每个广播数据包由 31 byte 组成。分为有效数据和无效数据两部分。

  • 无效数据部分:因为广播数据包的长度必须是 31 字节,如果有效数据不够 31 个字节那么剩下的就用 0 来补全。这一部分就是无效的,也就是无效数据。
  • 有效数据部分:包含若干个广播数据单元,称为 AD Structure。每个 AD Structure 的组成格式是:第一个字节是长度值 Length,表示接下来的 Length 个字节是数据部分。数据分别的第一个字节表示数据类型 AD Type,剩下的 Length - 1 是真正的数据。数据类型很重要,有标准的规定,决定了数据代表什么意思和怎么解析

例子:

E/TAG:scandata:02011A05FFAC0134560000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000

这里是扫描的数据包(转换成了 16 进制,两个代表一个字节),第一个字节是 02 表示后面的两个字节是数据部分,然后第二个字节是 01 表示了数据的类型。后面一个字节就是真正的数据了。这个广播数据单元就分析完了。下面就是另一个数据单元了。依次类推,关于数据类型的解释,官网有。

image

这是数据类型对应的含义表。

基于连接的:

就是两个设备建立 GATT 连接,需要双方进行通信。这里的两个角色是,外设设备(Peripheral)和中心设备(一般是手机)Centeral。

网络拓扑图:

image

一个中心设备可连接多个外设,但是一个外设只能连接一个中心(外设连接成功后就会停止对外广播,别人就发现不了它了)。其中一个中心设备的连接外设的数量也是有限的。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,324评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,303评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,192评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,555评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,569评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,566评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,927评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,583评论 0 257
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,827评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,590评论 2 320
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,669评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,365评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,941评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,928评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,159评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,880评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,399评论 2 342

推荐阅读更多精彩内容