章节连接

iOS Core Bluetooth_1 概述
iOS Core Bluetooth_2 基础知识
iOS Core Bluetooth_3 用作中央设备的常用方法(1/2)[swift实现]
iOS Core Bluetooth_4 用作中央设备的常用方法(2/2)[swift实现]

写在前面

核心蓝牙框架可让您的iOS和Mac应用程序与低功耗蓝牙设备进行通信。例如,您的应用程序可以发现,探索低能量的外围设备,并与之交互,例如心率监视器,数字恒温器,甚至其他iOS设备。

该框架是用于低能耗设备的蓝牙4.0规范的抽象。就是说,它向开发人员隐藏了规范的许多底层细节,使您更容易开发与蓝牙低功耗设备交互的应用。因为该框架基于规范,所以已经采用了规范中的一些概念和术语。本章向您介绍了开始使用Core Bluetooth框架开发出色应用程序所需的关键术语和概念。

重要提示: 在iOS 10.0或更高版本上链接的iOS应用程序必须在其Info.plist文件中包含使用说明键,以说明需要访问的数据类型,否则它将崩溃。要专门访问蓝牙外围设备数据,它必须包含NSBluetoothPeripheralUsageDescription。

1 中央设备与外围设备在蓝牙通信中的角色

所有低功耗蓝牙通信都涉及两个主要参与者:中央和外围设备。基于某种程度上传统的客户端-服务器体系结构,外围设备通常具有其他设备所需的数据。一个中心通常使用由外围设备提供了信息来完成一些特定的任务。正如下图所示,例如,心脏监测仪可能有用的信息,你的Mac或iOS应用可能需要以用户交互的方式显示用户的心脏速率。

(1) 中央设备发现和链接正在广播的外围设备

外围设备以广播包的形式广播他们拥有的某些数据。一个通告数据包是可以包含哪些外设所提供的信息,如外围设备的名称和主要功能的有用信息数据。例如,数字恒温器可以声明其提供房间的当前温度。在低功耗蓝牙技术中,广播是使外围设备被知道存在的主要方式。

另一方面,中央设备可以扫描和侦听任何正在发布其有用的信息的外围设备,如下图所示。中心可以要求连接到发现广播的任何外围设备。

(2)外围设备的数据构建

连接到外围设备的目的是开始探索并与其提供的数据进行交互。但是,在执行此操作之前,应当了解外围设备数据的结构。

外围设备可能包含一项或多项服务,或者提供有关其连接信号强度的有用信息。服务是用于实现设备的功能或特征数据和相关联的行为(或该设备的各部分)的集合。例如,心率监视器的一项服务可能是公开来自监视器的心率传感器的心率数据。

服务本身由特征或对其他服务的引用组成。一个特征提供了有关外设的服务进一步的细节。例如,刚刚描述的心率服务可能包含一个描述设备心率传感器的预期身体位置的特征,以及另一个传输心率测量数据的特征。下图说明了心率监测器的服务和特性的一种可能结构。

(3)中央设备探索并与外围设备进行交互(读或写)

中心成功建立与外围设备的连接后,便可以发现外围设备必须提供的全部服务和特性(广告数据可能只包含一部分可用服务)。

中心还可以通过读取或写入该服务的特性值来与外围设备的服务进行交互。例如,您的应用程序可能从数字恒温器请求当前的室温,或者可能为恒温器提供一个用于设置室温的值。

2 中央设备与外围设备的数据表示

低功耗蓝牙通信中涉及的主要参与者和数据以一种简单,直接的方式映射到Core Bluetooth框架。

(1)用作在中央设备时的对象

当您使用本地中央设备与远程外围设备进行交互时,您正在蓝牙低功耗通信的中央设备上执行操作。除非您设置本地为外围设备(并使用它来响应中央设备的请求),否则您的大部分蓝牙交易都将在中央设备上进行。

  • 本地的中央设备与远程外围设备
    在中央侧,本地中央设备由CBCentralManager对象表示。这些对象用于管理发现或连接的远程外围设备(以CBPeripheral对象表示),包括扫描,发现和连接到广告外围设备。下图显示了如何在Core Bluetooth框架中表示本地中心和远程外围设备。
  • 远程外围设备的数据由CBService和CBCharacteristic对象表示
    在与远程外围设备(由CBPeripheral对象表示)上的数据进行交互时,您正在处理其服务和特征。在Core Bluetooth框架中,远程外围设备的服务由CBService对象表示。类似地,远程外围设备的服务特征由CBCharacteristic对象表示。下图说明了远程外围设备的服务和特征的基本结构。

(2)用作在外围设备时的对象

从macOS 10.9和iOS 6开始,Mac和iOS设备可以用作低功耗蓝牙外围设备,向其他设备(包括其他Mac,iPhone和iPad设备)提供数据。设置设备以实现外围设备角色时,您正在蓝牙低功耗通信的外围设备上执行操作。

  • 本地用作外围设备和远程中心
    用作在外围侧,本地外围设备由CBPeripheralManager对象表示。这些对象用于管理本地外围设备的服务和特征数据库中的已发布服务,并将这些服务通告给远程中央设备(由CBCentral对象表示)。外围设备管理器对象还用于响应来自这些远程中心的读取和写入请求。下图显示了如何在Core Bluetooth框架中表示本地外围设备和远程中心。
  • 本地用作外围设备的数据由CBMutableService和CBMutableCharacteristic对象表示
    在本地外围设备(由CBPeripheralManager对象表示)上设置数据并与之交互时,您正在处理其服务和特性的可变版本。在Core Bluetooth框架中,本地外围设备的服务由CBMutableService对象表示。同样,本地外围设备的服务特征由CBMutableCharacteristic对象表示。下图说明了本地外围设备的服务和特征的基本结构。

iOS Core Bluetooth_2 基础知识相关推荐

  1. iOS Core Bluetooth 基础知识

    原文:The Utimate Guide to Apple's Core Bluetooth – PunchThrough 本文假设您了解蓝牙低能耗(BLE)和iOS编程的基础知识(包括许多iOS原生 ...

  2. ios音频相关基础知识

    最近在看音频相关的知识,然后就搜集了些基础知识记录下来,以便日后查看和供需要的人学习 1.音频(audio) 指人耳可以听到的声音频率在20HZ~20kHz之间的声波,称为音频. 2.音频采样(aud ...

  3. 小范笔记:ASP.NET Core API 基础知识与Axios前端提交数据

    跟同事合作前后端分离项目,自己对 WebApi 的很多知识不够全,虽说不必要学全栈,可是也要了解基础知识,才能合理设计接口.API,方便与前端交接. 晚上回到宿舍后,对 WebApi 的知识查漏补缺, ...

  4. 拥抱.NET Core,学习.NET Core的基础知识补遗

    前言 .NET Core的新特性之一就是跨平台,但由于对之前框架的兼容导致编写一个.NET Core类库变得相当复杂,主要体现为相当多的框架目标和支持平台,今天我们就对.NET Core的跨平台特性进 ...

  5. iOS Core Bluetooth_1 概述

    章节连接 iOS Core Bluetooth_1 概述 iOS Core Bluetooth_2 基础知识 iOS Core Bluetooth_3 用作中央设备的常用方法(1/2)[swift实现 ...

  6. iOS Core Bluetooth_3 用作中央设备的常用方法(1/2)[swift实现]

    章节连接 iOS Core Bluetooth_1 概述 iOS Core Bluetooth_2 基础知识 iOS Core Bluetooth_3 用作中央设备的常用方法(1/2)[swift实现 ...

  7. iOS Core Bluetooth_4 用作中央设备的常用方法(2/2)[swift实现]

    章节连接 iOS Core Bluetooth_1 概述 iOS Core Bluetooth_2 基础知识 iOS Core Bluetooth_3 用作中央设备的常用方法(1/2)[swift实现 ...

  8. IOS Socket 01-网络协议基础知识

    IOS Socket 01-网络协议基础知识 1. 网络参考模型 OSI参考模型                                          TCP/IP参考模型 2. 七层简述 ...

  9. iOS开发基础知识--碎片44

    iOS开发基础知识--碎片44  iOS开发基础知识--碎片44 1:App跳转至系统Settings 跳转在IOS8以上跟以下是有区别的,如果是IOS8以上可以如下设置: NSURL *url = ...

最新文章

  1. 在Ubuntu 14.04 64bit上安装Markdown编辑器Remarkble
  2. 分布式系统 一致性模型的介绍 以及 zookeeper的 “线性一致性“ 讨论
  3. See the World 2015-6-10
  4. 如何在 ASP.NET Core 中使用 Quartz.NET 执行任务调度
  5. Spring的REST服务发现性,第5部分
  6. Linux系统中用stat命令查看文件的三个时间属性
  7. 一个敲有趣的R语言拼图工具
  8. 脚本录制软件python 按键精灵 tc_Keymouse Go鼠标键盘脚本录制下载|开源版按键精灵软件_最火软件站...
  9. 计算机内录,如何电脑内部录音,介绍一款可以录制电脑内部声音的工具
  10. MATLAB数据拟合学习总结
  11. Ingenuous Cubrency——完全背包
  12. springboot接口签名统一效验_Spring Boot 优雅地实现接口参数校验
  13. 勒索病毒WannaCry深度技术分析:详解传播、感染和危害细节
  14. mybatis 的大于号 小于号 大于等于 小于等于
  15. 2016阿里巴巴73款开源产品全向图
  16. 淘宝/天猫获取商品历史价格信息 API
  17. 把音频中的某个人声去掉_怎样去掉音频中的背景音乐 只保留人声?
  18. msvcr120.dll丢失如何修复
  19. 如何将pdf修改编辑
  20. 【Unity3D Shader编程】之六 暗黑城堡篇 表面着色器 Surface Shader 的写法 一

热门文章

  1. python实现三级菜单_Python3.5实现的三级菜单功能示例
  2. 用户开启了iCloud 照片库,选择了“优化 iPhone/iPad 储存空间”获取图片失败
  3. LHS 和 RHS---你所不知道的JavaScript
  4. js逆向爬虫某openLaw网站
  5. html多级列表不连续如何显示,完美解决word多级列表的编号不显示问题
  6. 题解 洛谷 P4042 [AHOI2014/JSOI2014]骑士游戏
  7. DOS命令dir是否能查看隐藏文件夹
  8. Mac 系统下查看隐藏文件夹的方法
  9. 论文翻译:2020_RNNoise:A Hybrid DSP/Deep Learning Approach to Real-Time Full-Band Speech Enhancement...
  10. 一篇文章让你搞懂什么是Iaas、Paas、Saas