iOS蓝牙硬件开发小结

        前段时间一直在忙手上的一个智能物流配送的项目,最近项目赶的不太紧,领导让我协助做一下同事项目上的蓝牙相关功能。我上一次接触蓝牙开发还是在16年,当时的领导说会做一个手环相关的项目,最后因为种种原因不了了之,所以从知识储备的维度上讲,这次蓝牙开发也算是从零开始吧。

        先大致了解一下iOS端蓝牙的开发历史,在蓝牙2.0时代,那个时候iOS的版本为3.0,苹果为蓝牙开发推出GameKit.framework框架,顾名思义,这个框架大多用于游戏开发并且仅限于iOS设备之间连接。之后又推出了一个MultipeerConnectivity.framework的框架,用于iOS设备相互传输文件。再后来又推出一个ExternalAccessory.framework框架,这个可以使iOS设备与第三方蓝牙连接使用,不过需要通过苹果MFI认证,可以直接弃用这个框架。现在用的是CoreBluetooth.framework框架,只需硬件设备的蓝牙版本大于4.0即可。为什么大家都又称蓝牙开发为BLE开发呢?因为蓝牙4.0又称为Bluetooth Low Energy,耗能很少。现在很火的智能家居、手环、耳机等等除了很少部分使用WiFi连接开发,其余绝大部分都是用这个开发的。

对于我们移动端开发者而言,苹果其实对iOS和OSX做了很好的封装。蓝牙开发的难点在于理解其工作模式和清理一些关键的概念,比如:Central(中心设备)、Peripheral(外围设备)、Services(服务)、Characteristic(特征))......iOS端蓝牙开发的大致流程如下:

1.新建Central Manager实例进行蓝牙管理;

2.搜索外围设备;

3.连接外围设备;

4.获取外围设备的服务;

5.获取服务的特征;

6.给外围设备发送数据;

 7.读取外围设备的数据;

如下图所示:

连接流程

这里要着重理解一下服务和特性这两个关键概念。通常情况下一个外部硬件设备包含多个服务,每个服务又包含多个特征,特征里包含特征值和特征描述。并不是每个服务都具有读写的功能,当我们硬件相关文档缺失的时候(例如我,几乎没拿到什么文档),我们可以下载一个LightBlue软件,这里使用该软件连接我的笔记本做一下演示:

蓝牙设备列表
查看设备包含的服务以及属性
找到可读可写的服务

当我们找到可读可写的服务和属性之后就可以放心的去写代码了。注意我第三张图标记的Without Response,有的设备是With Response,这样就导致在写入数据的时候选择哪种类型进行写入,后面也会再次提及。

下面开始按照步骤来写代码:

添加属性
添加常量(因涉及公司硬件数据,故不能将数值展示出来)

注意:硬件设备中可读可写的服务值和特征值可以自己去查找,也可以找硬件的同事提供。

创建用于盛放连接后的硬件数组,创建中心管理者
扫描设备和连接设备

注意:在扫描设备和连接设备之前应该先判断手机蓝牙状态,只有扫到设备后才会进入相应的扫描和连接设备的代理方法。

扫描到设备后,进入的代理方法,demo中我设定根据设备的ID来连接
连接成功后的代理方法,之后开始扫描硬件的服务
扫描到服务

注意:扫描到服务后,我们要筛选到可以读写的那个服务,只有这样后期才可以使用蓝牙对硬件进行发指令操作,之后再调用扫描该服务的特征方法。

筛选特征并写入数据

注意:这一步其实很关键,我和负责调试蓝牙同事都卡在了这里,究其原因是数据源形式和方法不对,导致无法将数据写入蓝牙。蓝牙那边只支持16进制,所以我们要把信息流转成双方可识别的16进制。拿我们项目来说,我需要把传输的指令字符串,先转成byte,再转成16进制的字符串,最后再转成data类型写入蓝牙。上图我标注了一个类型,这个类型有两种,分别是CBCharacteristicWriteWithoutResponse和CBCharacteristicWriteWithResponse,其中使用CBCharacteristicWriteWithResponse这个类型是有回调的方法来告诉我们是写入了还是没写入,使用CBCharacteristicWriteWithoutResponse是没有直接回调的方法,我们只能根据订阅的通知来看是否写入成功。根据LightBlue的显示,我司的硬件需要使用CBCharacteristicWriteWithoutResponse才符合要求。调用了写入的方法,还需手动订阅通知。如果不手动订阅通知的话,该特征值的通知则无法激活。

检验通知是否订阅成功
根据特征读取蓝牙设备的反馈值

就这样,我们利用蓝牙与硬件完成了一次简单的写读交互操作。

iOS蓝牙开发中还有一些代理方法,例如连接失败、断开连接等等,在此就不一一叙述了。总之,在我看来,电子元件和代码结合起来,才能演绎更多的精彩。

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

推荐阅读更多精彩内容