ios智能硬件开发,iOS研发

iOS BLE 开发小记[1] - CoreBluetooth 是什么

现在我们都知道,很多智能硬件设备都已经集成了低功耗蓝牙模块,这样我们就可以开发一个 iOS 或者 Mac APP 与它们进行交互。从 macOS 10.9 和 iOS 6 以后,Mac 和 iOS 设备就支持 低功耗蓝牙技术了,我们可以通过 CoreBluetooth 这个框架与底层的各种蓝牙协议栈进行交互,比如 GATT、ATT 和 L2CAP 等。

公司主营业务:网站设计制作、成都网站建设、移动网站开发等业务。帮助企业客户真正实现互联网宣传,提高企业的竞争能力。创新互联建站是一支青春激扬、勤奋敬业、活力青春激扬、勤奋敬业、活力澎湃、和谐高效的团队。公司秉承以“开放、自由、严谨、自律”为核心的企业文化,感谢他们对我们的高要求,感谢他们从不同领域给我们带来的挑战,让我们激情的团队有机会用头脑与智慧不断的给客户带来惊喜。创新互联建站推出遂川免费做网站回馈大家。

与底层交互的过程如下图所示:

开始下文之前,我们需要了解几个概念。对蓝牙不够了解的可以看一下维基百科关于 蓝牙 的简介。

Bluetooth 4.0 : 蓝牙 4.0 是 Bluetooth SIG 于2010年7月7日推出的新的规范,其最重要的特性是功耗低,省电!

BLE : Bluetooth low energy wireless technology,也就是低功耗无线蓝牙技术。

BLE 是关于蓝牙4.0 的详细说明,它定义了一套用于低功耗设备之间通信的协议。而CoreBluetooth 则是对 BLE 协议栈的抽象。也就是说,它隐藏了许多底层的详细实现细节,这样对我们开发者来说,开发一个 APP 与 BLE 设备进行交互将会很便捷。

CoreBluetooth 中最关键的两个角色就是 Central(中心) 和 Peripheral(周边), Peripheral 一般是提供数据的一方,而 Central 一般获取 Peripheral 提供的数据然后来完成特定的任务。举个例子,一个集成 BLE 的数字室温计可能提供房间中的实时温度,我们通过 APP 就可以读取、分析和显示房间中的温度。

Peripheral 通过向空中广播数据的方式来使我们能感知到它的存在。Central 通过扫描搜索来发现周围正在广播数据的 Peripheral, 找到指定的 Peripheral 后,发送连接请求进行连接,连接成功后则与 Peripheral 进行一些数据交互, Peripheral 则会通过合适的方式对 Central 进行响应。

CoreBluetooth 对通用的蓝牙任务进行了简化处理,你在 App 中通过 CoreBluetooth 来集成 BLE 功能将会变得简单,如果你开发的 APP 遵循了 Centrals 的开发规范,CoreBluetooth 将会帮你处理与 Peripheral 的扫描、连接以及数据交互的过程,除此之外,通过 CoreBluetooth 将你的设备设置为 本地 Peripheral 也会很便捷。

iOS APP 的状态也会影响蓝牙的行为,当你的 APP 在后台运行或者处于暂停状态中,蓝牙的行为将会受到影响。默认情况下,当你的 APP 在后台运行时或者处于暂停状态中,你的 APP 是不能与 BLE 进行数据通信的,也就是说,当 APP 后台运行时,你需要与 BLE 进行数据通信,你需要声明你的 APP 支持蓝牙后台运行模式,即使你声明了支持后台运行模式,蓝牙在后台运行模式下的数据处理方式也会变得不同,当开发你的 BLE APP 时,你需要注意这些不同点。

即使 APP 在后台运行时,当系统内存过低时也会杀掉 APP 的后台进程,对于 iOS 7,CoreBluetooth 支持 Central 和 Peripheral 的状态信息的保存和恢复。可以通过这个功能来实现与 BLE 设备的长期交互。

CoreBluetooth 框架为你的 APP 与许多常见的 BLE 设备进行交互提供了交互接口,通过合理的利用和实践将会提高用户的体验。

举个例子,当你实现 Central 或 Peripheral 的功能时,会利用设备携带的无线电广播设备(Radio)向空中广播信号,这样就会影响到电池的续航时间,因此当你设计 APP 时,需要尽可能的减少 Radio 的使用频率。

重要提醒: 在 iOS 10以后,通过 CoreBluetooth 与 BLE 设备进行数据通信时,必须在项目的 Info.plist 文件中包含关于 NSBluetoothPerpheralUsageDescription 的描述,否则会导致 APP 闪退,详情见 NSBluetoothPerpheralUsageDescription 。

在 BLE 通信中主要包含两种角色:Central(中心)和 Peripheral(周边),基于传统的客户-服务器架构,Peripheral 通常会提供其他设备需要的数据,Central 通常利用通过 Peripheral 获取的信息来完成特定的任务,如图所示,心率监视器 提供数据给 Mac 或 iOS APP,然后来显示用户的心率数据。

Peripheral 以广播数据包的形式广播服务中的数据,广播数据包指的是包含 Peripheral 有用信息的一个较小数据包,比如 Peripheral 的名字和主要功能数据。比如,一个数字室温计广播的数据中可能包括当前室温,对于 BLE,广播是显示它们存在的主要方式。

如图,对于一个 Central 来说,它能够搜索和获取到它想要的 Peripheral 的广播信息。

连接 Peripheral 的目的就是和 Peripheral 提供的数据进行交互,在你理解这一点后,可以更好的明白 Peripheral 的数据组成结构。

Peripheral 包含一个或多个 Service(服务)和连接信号强度的有用信息。Service 可以理解成是一个完成指定功能的数据集合。举个例子,一个心率监测服务的功能就是可能就是从心率传感器中读取心率数据。

Service 是由 Characteristic(特征) 组成的,Characteristic 为 Peripheral 的 Service 提供更详细的信息,举个例子,心率服务可能包含一个测量不同体位的心率数据的 Characteristic 和一个传输心率数据的 Characteristic,下图所示的是一个心率监测设备的数据组成结构。

当 Central 与 Peripheral 建立成功的连接后,Central 可以发现 Peripheral 提供的全系列的 Service 和 Characteristic,广播数据包中的数据仅仅是可用服务的一小部分而已。

Central 可以通过读取或写入 Service Characteristic 值的方式与 Service 进行交互。你的 APP 也许需要从数字室温计中获取当前室内的温度或者设置一个温度值到数字室温计中。

BLE 通信过程中涉及到的主要角色和数据处理已经简单的集成到 CoreBluetooth 框架中了。

当你通过本地 Central 与周边 Peripheral 进行交互时,你只需要调用 Central 方面的方法就可以了,除非你设置一个本地 Peripheral,并用它来响应其他的 Central 的交互请求,实际运用中,你的蓝牙处理大部分会在 Central 方面。

在 Central 方面,用 CBCentralManager 对象来表示一个Local Central 设备,这个对象被用来管理 Remote Peripheral 设备(用 CBPeripheral 对象来表示),包括搜索和连接正在广播数据的 Peripheral。如图所示的是 CoreBluetooth 框架中如何表示 Local Central 和 Remote Peripheral。

当你与 Remote Peripheral 进行数据交互时,你将处理它的 Service 和 Characteristic,在 CoreBluetooth 框架中,用 CBService 对象来表示 Peripheral 中的服务,同样地,用 CBCharacteristic 对象来表示 Service 中的特征。下图所示的是 Remote Peripheral 的服务特征结构树。

对于 macOS 10.9 和 iOS 6, Mac 和 iOS 设备可以实现 BLE Peripheral 的功能,如为其他设备(包括 Mac,iPhone,和 iPad)提供数据。当你遵循 Peripheral 的开发规范时,就可以调用 BLE 通信的 Peripheral 方面的方法。

在 Peripheral 方面,一个 Local Peripheral 可以用 CBPeripheralManager 对象来表示,这个对象被用来管理发布包含的服务,包括组织构建 Peripheral 的数据结构以及向中心设备广播数据,Peripheral Manager 也对 Remote Central的读写交互请求做出响应。如图所示的是一个 Local Peripheral 和 Remote Central。

当你设置并与 Local Peripheral 进行数据交互时,你处理的是它的可变的 Service 和 Characteristic,在 CoreBluetooth 框架中,用 CBMutableService 对象来表示 Local Peripheral 中的服务,同样地,用 CBMutableCharacteristic 对象来表示Local Peripheral 服务中的特征。下图表示的是一个 Local Peripheral 中的服务特征结构树。

后续章节会进一步补充关于 BLE 开发的知识。

1、 TP40013257-CH1-SW1

2、 CoreBluetoothOverview

欢迎在本文下面留言一起交流心得...

IOS 家庭 APP 如何添加支持 HomeKit 的 WiFi 设备?

简单说,HomeKit要打破现在各个智能硬件厂家各自为政,用户体验参差不齐的混乱市场格局,让各个厂家的智能家居设备能在iOS层面互动协作,而无需这些厂家直接对接。仔细研究这个架构后,我们发现Home Kit是一套协议,是一个iOS上的数据库,更是智能家居产品互联互通的新思维模式。苹果留给了智能硬件开发商以及第三方开发者很多的发展空间。

首先说说通讯协议。 HomeKit规范了智能家居产品如何和iOS终端连接和通信。苹果软件高级副总裁 Craig Federighi 在WWDC Keynote里轻描淡写地说通过Home Kit协议的绑定功能(Secure Pairing)能确保只有你的iPhone能够开你的车库门。当然软硬件通信协议学问大了。在宣布的芯片合作伙伴里有Broadcom, Marvell和Ti,这几家都是植入式Wi-Fi芯片的主流供应商,所以可以确认HomeKit前期主要支持Wi-Fi或者直连以太网的设备。目前Wi-Fi智能硬件开发上有不少难点要克服,包括设备如何与手机配对, 如何得到Wi-Fi密码并且加入家里的热点,如何保证稳定和安全的远程连接等等。

在数据库层面,苹果推出了一个有利于行业发展的基础设施:在iOS上建立了一个可以供第三方app查询和编辑的智能家居数据库。这个数据库包含几个非常重要的概念是对现在的智能硬件开发商有借鉴意义的:家庭,房间,区域,设备,服务, 动作,触发。

HomeKit把家庭看作一个智能家居设备的集合,通过家庭,房间,区域把这些设备有机的组合起来。设备和服务这两个概念很有意思。这里苹果引入了一个对于硬件产业相对陌生,但是相当“互联网”的概念:面向服务设计(Service Oriented Architecture)。硬件设备被定义成一个提供一个或者多个服务的单元,而这些服务可以被第三方应用发现和调用。例如飞利浦的Hue LED灯就可以理解成提供照明服务的设备,其中开关控制,颜色和亮度的控制都是属于这个服务的具体功能。同样,海尔的天尊空调可以理解为一个提供制冷,制热,空气净化等多个和空气质量相关的服务的设备。

家庭里所有的支持HomeKit标准的智能设备把支持的服务发布出来,通过iOS的发现机制被收录到一个统一的数据库里。 在设备和服务这些基本单位之上,HomeKit定义了家,房间,区域(多个房间的组合)等场景单元来让家里的多台设备形成有机的组合。例如睡房里的电器(例如灯和窗帘)可以被组织成一个场景,统一控制。区域可以把多个房间的设备组合起来一起控制。

HomeKit除了遥控还能干什么?

说到控制,HomeKit的设计远远不像有些媒体解读的那样,简单地把iPhone变成一个万用摇控器。Home Kit的控制体系里有两个重要的自动化概念: 触发 (Trigger)和操作 (Action)。 这个非常像国外比较火的IFTTT应用,用户可以用简单的“IF X THEN Y” 公式和很多现成的数据接口实现非常多元化的自动提醒和操作功能。同样,通过Home Kit的触发和操作机制可以实现各种场景的自动化操作:例如 “当睡房灯被打开时把窗帘拉上”等。

当然以苹果的做事风格,他们把HomeKit作为一个开发框架,不会也不可能参与到这些具体的场景的定义和实现。就好比在iOS上可以具有开发游戏的基础设施,但苹果不会做游戏一样,HomeKit开放数据接口给开发者,方便他们实现智能家居的创新。Home Kit的一个卖点是Siri的整合。用户可以通过语音输入控制指令。这其实也是为开发者所用的设施,因为指令本身是开发者定义的。

通过对HomeKit架构和第一批合作伙伴的分析,我们可以认为苹果在智能家居其实是在打造一个厂家+开发者共同服务用户的生态环境。通过一个开放的设计理念,苹果预留了相当大的空间给合作方,同时也细化了他们的分工。硬件厂家的专长在提供好的产品,而在手机上建立良好的用户体验则是开发者,特别是第三方开发者的长处。而苹果本身则继续以平台的定位。在公创造推进智能家居行业发展的环境,在私巩固iOS设备在家庭中的核心地位。

HomeKit这张拼图还缺了什么?

但是我们也能看到HomeKit这个智能硬件+iOS+Apps/Siri的智能家居组合显然是不完整的。当用户拿着iOS设备在家时,手机可以暂时成为 智能家居的中枢神经,但iOS的高度移动性作为part-time中枢神经显然是不合适或者说是不足够的:当用户离开家,原来完美的智能的家庭马上被打回到石器时代。

这里苹果留出了一个空缺:在iOS以外协调智能硬件的hub。这里有两种可能性:一个是偏硬件的做法 —— 苹果可以把自己的Apple TV,Airport路由器,以及未来要推出的iTV,作为persistent的智能家居中枢。另外一个偏软件的可能性是这个责任放在iCloud。

最关键的是,HomeKit给国内创业团队和硬件厂家提供了什么机会?

最后我来分析一下智能家居市场的现状和HomeKit带来的的机会。目前智能家居产品的市场策略主要有4种:

第一类是像海尔uHome或者美国的Control4这样的整体智能家居系统,通过物理布线或Zigbee等无线通讯方式把兼容的照明,影音,安防电子设备连接到一个中控系统实现统一控制。这种整体方案功能完整,用户体验统一,但需要专业的安装,而且价格不菲。国内厂家一般选择跟房地产开发商合作,主打前装市场,但是普及速度比较慢。

第二类是国际一线的家电企业先制定一套软件协议先把自家产品连接起来成为一个平台,然后通过协议的开放让其他厂家的产品加入其生态系统。三星的Smart Home和海尔的U+智慧家庭操作系统都是这个理念。三星是从强势的电视和手机方面切入,海尔则凭着白色家电的领先优势入场。

第三类是以路由器/网关方式切入,用取代路由器这样的普及性产品来降低进入家庭的门槛,占领家庭的数据入口,然后逐渐整合其他产品。最近市面上智能路由器的玩家不少。小米更是高调地用小米智能家居样板间来展示小米路由器的整合能力。

这三类走的是平台思维,门槛高而且周期长。大多数创业团队和厂家选择的是第四种策略:把单一功能的产品做到极致,单点突破进入家庭,然后逐渐扩展产品线,尝试整合其他产品。Nest(Google收购前),Dropcam,Belkin WeMo,Smartthings,Hue,墨迹天气, 幻腾智能,博联,以及大多数的家电企业和智能硬件创客都是走的这个产品方向 。

显然 HomeKit的定位对第四类的玩家更为友好,而前三类玩家将在未来受到较大冲击。

苹果希望通过一个比较开放的模式来吸引这些单品硬件厂家与其对接。除了提供完善的协议,通用数据库和庞大的iOS用户群,还引入了第三方开发者,使其为厂家产品所用,给不同场景的应用提供软件支持。

于是,有能力和野心操作前三种平台模式的玩家局面就有点尴尬。那些在硬件产品上和苹果没有直接竞争产品的企业,倒是可以尽量与苹果HomeKit兼容。而三星,小米这些定位和苹果类似的平台的发展必然会使市场形成多个具有规模的智能家居平台同时存在的群雄割据局面,给希望能与这些平台同时兼容的硬件厂家带来非常高的研发和维护成本。

帮助这些硬件厂家克服这些智能家居平台之间的兼容性问题也给物联网技术和云端服务的供应商带来了新的机遇。机智云,还有像Arrayent和Ayla Networks这些与我们定位类似的物联网服务平台在提供完善的硬件云端支持服务基础上,可以通过提供硬件产品的跨平台的接入能力而被更多的智能家居厂家接受。

总的来说,苹果HomeKit的推出对整个智能家居产业的发展是个利好。iOS8在10月份推出后会大大提升消费者对相关智能硬件的关注度。在手机操作系统上搭建了合理的架构,留出来给各路玩家的机会也相当的巨大。Google马上就要召开的Google IO开发者大会也一定会有相应的动作,让智能家居市场的热度继续升温。Show Time!

智能硬件开发板哪个最实用?

我来告诉你, 小e智能硬件开发板,他具有语音播放功能,自带WIFI接入,还有显示屏,再加上提供开发板的厂商,本身就是做云的,对于android,IOS,微信等平台支持都很好


标题名称:ios智能硬件开发,iOS研发
标题URL:http://ybzwz.com/article/dsepedo.html