iOS蓝牙编程指南 -- 核心蓝牙概述

小引

随着穿戴设备和智能家居的热情不断,app蓝牙的开发也很火热,基于iOS蓝牙的开发资料有不少,但是最最值得学习的必然是apple自家的文档啦,我之前的项目基于蓝牙4.0,开发过程中用到Core Bluetooth框架,算是我学习的笔记吧!涉及到几个部分,我打算分开把他们整理出来,本篇文章通过对Core Bluetooth Programming Guide的翻译,为大家介绍iOS蓝牙4.0编程的一些术语和概念,后续文章将会简单介绍下代码的流程。本人实力有限,了解的深度不是很广,还请各位看官轻点拍砖!

话不多说说,让我们进入正题吧:

注:本文译自Core Bluetooth Programming Guide

核心蓝牙概述

Core Bluetooth 框架使你的 Mac/iOS app 能够与低功耗蓝牙设备进行通讯。例如,你的app能够搜寻,探索低功耗蓝牙设备,并与之互动,如心率监听器,数字恒温器,甚至能够与其它iOS设备进行交互。

该框架基于BLE4.0规范,直接适用于蓝牙低功率设备的使用。也就是说,该框架隐藏了很多开发规范的底层实现细节,使您更容易开发出与蓝牙低功耗设备进行交互的app。因为该说明中涉及到蓝牙框架的一些概念和术语在本说明中已经被广泛采用,本文将向你介绍这个 Core Bluetooth 框架中的一些关键术语和概念。

Central 和 Peripheral 在蓝牙交互中的角色

所有涉及蓝牙低功耗的交互中有两个主要的角色:中心Central和外围设备Perpheral。根据一些传统的客户端-服务端结构,Peripheral通常具有其他设备所需要的数据,而Central通常通过使用Perpheral的信息来实现一些特定的功能。如下图所示,例如,一个心率监听器可能含有一些有用的信息,你的 Mac/iOS app 可能需要以用户友好的方式显示用户的心率。

Alt text

Central 发现并连接广播中的 Peripheral

Peripheral向外广播一些广告包形式的数据,广告包是一个相对较小的束,可能包含Peripheral提供的有用信息资料,如外设的名称和主要功能。例如,一个数字恒温器可以广告包含其中的一个房间的即时温度。在低功耗蓝牙中,广播是Peripheral被获知的主要方式。

从另一方面说,Central可以扫描和监听任何对广播内容感兴趣的Peripheral。如下图,Central可以请求连接任何已对外广播内容的Peripheral

Alt text

数据在 Peripheral 中如何构成

连接到Peripheral的目的是为了对它所提供的数据进行探索和交互。在此之前,理解数据在Peripheral中是怎样构成的将会对我们有所帮助。

Peripheral包含一个或者多个Service以及有关其连接信号强度的有用信息。Service是指实现一个函数或者功能的设备(或者设备的一部分)的数据采集和相关行为的集合。例如,一个心率监听器的Service可能包含从监听心率传感器采集的心率数据。

Service本身由Characteristic或者其他被包含的Service所组成。Characteristic提供了更多有关PeripheralService中的详细内容。例如,刚才描述的心率service中可以包含一个用来描述该设备的心率传感器所记录身体位置的characteristic或者包含发送测量心率数据的Characteristic。如下图,表示了一个心率监听器可能包含的ServiceCharacteristic

Alt text

Central 在 Peripheral 上的数据探索及交互

Central成功与Peripheral建立连接后,就能发现到Peripheral提供的所有的ServiceCharacteristic。(广播数据可能只包含一部分可见的Service)

Central可以通过读取或者写入ServiceCharacteristicvaluePeripheral进行交互。例如,你的 app 可能从数字恒温器上请求当前的室内温度,或者为恒温器提供一个数值以设置室内温度。

Central,Peripherals 以及 Peripheral数据如何表示

有关低功耗蓝牙交互中的主要角色和数据在Core Bluetooth中以简单明了的方式表示。

Central 端的对象

当你使用本地Central和远程Peripheral进行交互,您将在低功耗蓝牙Central侧执行操作。除非你是建立一个本地Peripheral设备,并使它由一个Central端请求响应,大多数的蓝牙交互由Central端完成。

本地 Central 和远程 Peripheral

Central端,本地Central设备表示为CBCentralManager。这些对象用来管理发现或连接远程Peripheral设备(表示为CBPeripheral),包括扫描,发现和连接广播中的Peripheral。如下图所示:

Alt text

远程 Peripheral 数据表示为 CBService 和CBCharacteristic

当你与远程Peripheral(表示为CBPeripheral)进行数据交互时,你将处理它的ServiceCharacteristic。在Core Bluetooth框架中,远程PeripheralService表示为CBService。相类似的,远程PeripheralServiceCharacteritic表示为CBCharacteristic。如下图所示:

Alt text

Peripheral 端的对象

OS X v10.9和iOS6以上的Mac/iOS设备能够可以设置成低功耗蓝牙的Peripheral,为其他Mac/iPhone/iPad 传输数据。当你设置好你的设备使其能够实现Peripheral的角色,你就可以完成低功耗蓝牙交互的Peripheral端功能。

本地 Peripheral 和远程 Central

Peripheral端,一个Peripheral设备表示为CBPeripheralManager
。该对象用于管理那些包含本地Peripheral设备的ServiceCharacteristic数据的Service,通过广播这些服务的方式发布到远程Central设备(表示为CBCentral)。Peripheral manager对象同样可以响应远程Central的读取和写入请求。如下图所示:

Alt text

本地 Peripheral 数据表示为 CBMutableService 和 CBMutableCharacteristic

当你设置好和本地Peripheral(表示为CBPeripheralManager)数据交互,就可以处理ServiceCharacteristic的可变版本。在Core Bluetooth框架中,本地PeripheralService表示为CBMutableService。同样地,本地PeripheralServiceCharacteristic表示为CBMutableCharacteristic。如下图所示:

时间: 2025-01-06 11:00:04

iOS蓝牙编程指南 -- 核心蓝牙概述的相关文章

线程同步-iOS多线程编程指南(四)-08-多线程

首页 编程指南 Grand Central Dispatch 基本概念 多核心的性能 Dispatch Sources 完结 外传:dispatch_once(上) Block非官方编程指南 基础 内存管理 揭开神秘面纱(上) 揭开神秘面纱(下) iOS多线程编程指南 关于多线程编程 线程管理 Run Loop 线程同步 附录 Core Animation编程指南 Core Animation简介 基本概念 渲染架构 几何变换 查看目录 中文手册/API ASIHTTPRequest Openg

(译)IOS block编程指南 1 介绍

Introduction(介绍) Block objects are a C-level syntactic and runtime feature. They are similar to standard C functions, but in addition to executable code they may also contain variable bindings to automatic (stack) or managed (heap) memory. A block ca

iOS线程编程指南

原英文网址为: https://developer.apple.com/library/ios/documentation/Cocoa/Conceptual/Multithreading/ThreadSafety/ThreadSafety.html 同步 在应用程序中的多个线程的存在开辟了潜在的问题,关于安全访问到资源从多个执行线程.两个线程修改相同的资源可能会相互干扰,以意想不到的方式.例如,一个线程可能会覆盖其他人的更改或应用程序置于未知和潜在无效的状态.如果你很幸运,已损坏的资源可能会导致

iOS多线程编程指南(二)线程管理

当应用程序生成一个新的线程的时候,该线程变成应用程序进程空间内的一个实体.每个线程都拥有它自己的执行堆栈,由内核调度独立的运行时间片.一个线程可以和其他线程或其他进程通信,执行I/O操作,甚至执行任何你想要它完成的任务.因为它们处于相同的进程空间,所以一个独立应用程序里面的所有线程共享相同的虚拟内存空间,并且具有和进程相同的访问权限. 一.线程成本 多线程会占用你应用程序(和系统的)的内存使用和性能方面的资源.每个线程都需要分配一定的内核内存和应用程序内存空间的内存.管理你的线程和协调其调度所需

iOS ---Extension编程指南

当iOS 8.0和OS X v10.10发布后,一个全新的概念出现在我们眼前,那就是应用扩展.顾名思义,应用扩展允许开发者扩展应用的自定义功能和内容,能够让用户在使用其他app时使用该项功能.你可以开发一个应用扩展来执行某些特定的任务,用户使用该扩展后就可以在多个上下文环境中执行该任务.比如说,你提供了一个能让用户把内容分享到社交网站的扩展,用户可以在阅读邮件信息或者上网时通过app扩展来发表评论.或者说,如果你提供了一个能展示当前比赛分数的扩展,那么用户可以把它放在通知中心,这样在他们打开To

View Programming Guide for iOS 视图编程指南 - iOS

1 有关 Windows and Views 每个应用都至少有一个 window 和一个 view. 1.1 添加额外的 Window 一般在有外界显示设备的时候才需要添加额外的 window 下面的代码举了一个例子,这里假定对象实现了方法 externalWindow,externalWindow 存储一个 window 的引用 - (void)configureExternalDisplayAndShowWithContent:(UIViewController*)rootVC { // C

IOS block编程指南 1 介绍

Introduction(介绍) Block objects are a C-level syntactic and runtime feature. They are similar to standard C functions, but in addition to executable code they may also contain variable bindings to automatic (stack) or managed (heap) memory. A block ca

IOS View编程指南笔记

我们所看到的程序 对于一切IOS APP来说,我们看的的内容,都是UIView所呈现的. UIView如场景,UIWindow如舞台,UIView粉墨登场在UIWindow这个舞台上,使我们看到丰富多彩的界面UI.UIWindow本身没有任何内容,它只提供了一个场所来让这些UIView来显示,切换. 通常,一个APP仅有一个UIWindow作为显示的场所,当我们要进行多屏显示时,才会使用到多个UIWindow. UIView的基本结构 1.UIView附着于UIWindow上,只有放在UIWin

(译)IOS block编程指南 2 block开始

Getting Started with Blocks(开始block) The following sections help you to get started with blocks using practical examples. 接下来这一节有实用的例子帮你开始blocks. Declaring and Using a Block (定义和使用block) You use the ^ operator to declare a block variable and to indic