关闭

ios编程之蓝牙交互

368人阅读 评论(0) 收藏 举报

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

字数1607 阅读1904 评论9

小引

随着穿戴设备和智能家居的热情不断,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
Alt text

Central 发现并连接广播中的 Peripheral

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

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

Alt text
Alt text

数据在 Peripheral 中如何构成

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

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

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

Alt text
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
Alt text

远程 Peripheral 数据表示为 CBService 和CBCharacteristic

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

Alt text
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
Alt text

本地 Peripheral 数据表示为 CBMutableService 和 CBMutableCharacteristic

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

Alt text
0
0
查看评论

iOS 浅析蓝牙交互之蓝牙客户端

蓝牙客户端-中心设备 本节主要内容 1. 创建`中央管理器` 2. 发现并且连接外设 3. 寻找连接上的外设数据 4. 发送读或写`特征值`的请求 5. 订阅外设特征值 1. 创建中心管理器 因为CBCentralManager代表着本地中央设备,所以你必须先创建一个中央管理器对象,通...
  • RuoShangM
  • RuoShangM
  • 2016-07-13 22:49
  • 1339

编程之禅 浅谈封装

作为一个整天与代码打交道的人,你真的会coding吗? 今天依旧来反思一下自身。伊始大一的时候,刚接触到了C语言,一门神奇的语言。老师就教导我们要多敲例子,照着书本敲就可以了。可能当时并没有真正的理解老师的意思,所以就只是照着课本敲,(尴尬的是,我真的就只是照着课本上一字一字的敲,-_-!!!)也因...
  • Marksinoberg
  • Marksinoberg
  • 2016-06-17 10:00
  • 6830

JDBC编程之程序优化

首先,新建包package com.djx.entity;,其中类为 Identity ,实现代码如下: package com.djx.entity; public abstract class Identity { protected Long id; public Long...
  • dengjiaxing0321
  • dengjiaxing0321
  • 2016-03-16 15:49
  • 127

项目实战:自定义ListView、数据库操作和Activity交互

在项目中做了列表页面和详情页面,用到了以下几个知识点,在这里和大家分享一下: 1.数据库模块的完善: 1.1升级数据库,抽出版本字段; 如果xxx.db 数据库已经存在了,之后不管我们怎样Create database ,MyDatabaseHelper 中的onCreate()方法都不会再次执...
  • hxqneuq2012
  • hxqneuq2012
  • 2016-08-22 17:32
  • 536

传智168期--Linux&LAMP编程之Linux2016版额外笔记(2017年8月25日18:50:55)

学Linux的过程中做的一点点笔记,学了几天。 笔记下载地址:http://download.csdn.net/download/juliantem/9950769 http://download.csdn.net/download/juliantem/9950771 或者 链接:http:/...
  • juliantem
  • juliantem
  • 2017-08-25 18:50
  • 225

GPS模块编程之NMEA0183协议

原文地址:http://blog.csdn.net/northcan/article/details/7261310 #################################################################  GPS模块编程之NMEA0183协...
  • heli200482128
  • heli200482128
  • 2016-06-14 15:23
  • 366

《编程之禅》 转自BlackEagle_的专栏

前言  《编程之道》的出版在程序设计业内得到了普遍的接受,出版社邀请我翻译一些与之相关的文章,以作为那部著名的经典之作的补充。虽然,我申明我的能力难以胜任,但我最终还是被说服试一试。  本书是许多个月来研究和翻译的结果,它试图通过对那些传统著作的摘录,来馐一个...
  • sghe
  • sghe
  • 2006-02-17 13:20
  • 399

编程之禅·水

一程序不过是梦,生于无形无象的禅中,我们只是那做梦的人。二我编程三日,两耳不闻人声,只有硬盘在歌唱。三编译程序在运行,像一条湍急的河流,我静静地等侯。四为何要用LISP?COBOL语言我不懂,所以我用LISP。五编程一整夜,透过窗户,照到屏幕上,初升的太阳。六硬件和软件,我们是你们的主人和奴隶,我们...
  • ccanan
  • ccanan
  • 2007-03-17 00:38
  • 1719

COM编程之二 接口

【1】接口 DLL的接口是它所输出的那些函数。 C++类的接口是该类的一个成员函数集。 COM接口是包含一个函数指针数组的内存结构。 每一个数组元素包含的是一个由组件所实现的函数的地址。 在COM中接口就是一切。对于客户而言,一个组件就是一个接口集。 客户只能通过接口才能同COM组件打交...
  • liujiayu2
  • liujiayu2
  • 2015-04-16 18:30
  • 356

第五周(2) 后台代码解耦与客户端具体功能设计

引言 本周恰巧是开发周期的中期,我们按部就班有条不紊的按照原计划进行开发,这一阶段我们主要的任务有以下几个方面: DAO层的代码重写与解耦评论功能+@我的消息 下面我就我所编写的客户端@我的消息功能做吓介绍: @我的消息 @我的消息界面显示的是邀请我作为flag监督人的...
  • qq_26610669
  • qq_26610669
  • 2017-06-05 11:28
  • 66
    个人资料
    • 访问:216919次
    • 积分:4745
    • 等级:
    • 排名:第7250名
    • 原创:271篇
    • 转载:0篇
    • 译文:0篇
    • 评论:20条
    最新评论