代码地址如下:
http://www.demodashi.com/demo/12010.html

人工智能自1956年提出以来,一直默默无闻,近年来人工智能的发展得到重视逐渐发展起步,智能硬件、智能手环、智能家居等等逐渐走进人们的生活,大大方便人们的同时也带来了全新的用户体验和互联网一个新的发展方向。

前言

最近公司也在做硬件设备,作为一名iOS开发人员,主要负责手机软件、硬件的连接方面,开发连接硬件使用的SDK,其中主要模块是蓝牙连接,通过蓝牙与硬件设备连接,发送指令使硬件工作。

功能说起来很简单,但是寻找了好几天的蓝牙方面的Demo,看到了很多前人大神们封装的Bluetooth方法,感觉对于我等小白实在是有点深奥,方法繁多,不知从何处下手。所以最后考虑再三,还是从底层基础入手,自己重新整理、封装了一份蓝牙的查找、连接、写入、断开的类,本着程序员的开源精神,分享出来,欢迎大家指正。

下面 ,我对封装类从功能方面分类进行说明:

系统蓝牙状态监听

这个很方便,在系统蓝牙方法centralManagerDidUpdateState中就可以实时获取到蓝牙状态的改变,所以用一个Block回调就可以得到状态,根据状态变化做对应操作即可。

方法代码如下:

/**
系统当前蓝牙的状态 @param stateBlock 实时返回当前蓝牙状态
*/
- (void)returnBluetoothStateWithBlock:(FZStateUpdateBlock)stateBlock;

蓝牙搜索

蓝牙搜索的功能方法中,用系统原生的方法scanForPeripheralsWithServices:options:,在蓝牙搜索的代理方法centralManager:didDiscoverPeripheral:advertisementData:RSSI:里获取搜索结果,用Block返回搜索结果。另外添加了方法通过设置参数nameStr来筛选返回的设备名称,nameStr为设备模糊搜索参数,设备中包含nameStr字段即可返回搜索结果。

封装后的代码调用方法如下:

/**
* 开始搜索蓝牙外设,每次在block中返回一个蓝牙外设信息
*
* @param nameStr 模糊搜索设备名称,目标设备名称包含字段
* 返回的block参数可参考CBCentralManager 的 centralManager:didDiscoverPeripheral:advertisementData:RSSI:
*
* @param discoverBlock 搜索到蓝牙外设后的回调
*/
- (void)scanForPeripheralsWithPrefixName:(NSString *)nameStr discoverPeripheral:(FZDiscoverPeripheralBlock)discoverBlock;

蓝牙设备的连接

蓝牙的连接为系统方法connectPeripheral:options:,连接设备的结果分别通过代理方法centralManager:didConnectPeripheral:返回成功、centralManager:didFailToConnectPeripheral:error:返回失败,通过两个Block分别返回成功和失败。其中成功后要停止搜索stopScan,失败要返回失败原因。

代码方法如下:

/**
* 连接某个蓝牙外设,并查询服务,特性,特性描述
*
* @param peripheral 要连接的蓝牙外设
* @param completionBlock 操作执行完的回调
*/
- (void)connectPeripheral:(CBPeripheral *)peripheral
completeBlock:(FZConnectSuccessBlock)completionBlock
failBlock:(FZConnectFailBlock)failBlock;

写入数据

写入数据,在大多数的第三方方法里会有UUID、characteristic、peripheral等很多参数,混乱不易理解。这里我封装后只留了一个characteristic特性参数,而且已经帮大家筛选出来了,可以在封装方法头文件里,连接设备成功后直接获取到。另一方面,写入内容直接用NSString类型就可以,内部会自动转成NSData格式写入设备。

写入数据原生方法为writeValue:forCharacteristic:type:,写入数据后会在代理方法peripheral:didWriteValueForCharacteristic:error:方法里得到是否写入成功,成功与否用Block返回了结果。另外,如果蓝牙设备有应答的时候,会在peripheral:didUpdateValueForCharacteristic:error:方法里返回,也一并封装到了写入方法里,通过Block返回应答结果。

代码封装后的接口为:

/**
* 往某个特性中写入数据
*
* @param dataStr 写入的数据
* @param characteristic 特性对象
* @param completionBlock 写入完成后的回调,只有type为CBCharacteristicWriteWithResponse时,才会回调
*/
- (void)writeValue:(NSString *)dataStr forCharacteristic:(CBCharacteristic *)characteristic completionBlock:(FZWriteToCharacteristicBlock)completionBlock returnBlock:(FZEquipmentReturnBlock)equipmentBlock;

这里需要注意的是:实际开发中,可以用一个叫lightBlue的蓝牙开发辅助APP,看一下设备有多少特征值,我们实际用的时候需要用哪个,这个可以直接询问硬件厂商或硬件开发人员,然后在调用写入方法前,设置封装类中的属性UUIDString的对应值,可以保证连接过程中稳定不出问题

蓝牙的断开

蓝牙的断开,只留了一个方法,断开当前连接的设备,使用系统原生方法cancelPeripheralConnection:,设备的信息在连接时已自动记录,所以不需要传入参数

代码封装后的方法如下:

/**
* 断开蓝牙连接
*/
- (void)cancelPeripheralConnection;

获取蓝牙设备的距离

用原生方法readRSSI获取设备的RSSI值,在方法peripheral:didReadRSSI:RSSI:error:方法里可以获取到,然后用RSSI值转换为距离值,Block返回结果。

封装后的方法如下:

/**
* 获取某外设的距离
*
* @param getRSSIBlock 获取信号完成后的回调
*/
- (void)readRSSICompletionBlock:(FZGetRSSIBlock)getRSSIBlock;

其他

其他的方法,头文件里开放了”RSSI转距离Double类型数据”、”NSData转16进制字符串”、”NSString类型转NSData类型数据”三个方法。

文件目录截图

结束语

最后,代码封装类的源码和Demo,我已经放在了GitHub上,大家可以自由下载、使用,后续还会陆续更新部分常用功能,欢迎大家的指正、帮助。如果可以,感谢您的star,大家的支持是我不断努力的坚强后盾。

iOS蓝牙原生封装,助力智能硬件开发

代码地址如下:
http://www.demodashi.com/demo/12010.html

注:本文著作权归作者,由demo大师代发,拒绝转载,转载需要作者授权

iOS蓝牙原生封装,助力智能硬件开发的更多相关文章

  1. Android:BLE智能硬件开发详解

    目录 前言 BLE是个什么鬼 BLE中的角色分工 主要的关键词和概念 GATT(Generic Attribute Profile ) Characteristic Service Android如何 ...

  2. 智能硬件开发如何选择低功耗MCU

    本文将市场上典型的低功耗MCU系列进行了比较,分析得出基于ARM. Cortex M0+内核的MCU系列最适合穿戴式医疗设备的开发.设备开发者当密切关注其发展动向,结合现有的市场需求.产品体系的构建和 ...

  3. Intel edison 智能硬件开发指南 基于YoctoProject

    首先简单的介绍一下edison的板子: edison 芯片 22nm工艺,quark双核SoC,采用atom架构,针对小型智能设备  X86架构 相当于一台“奔腾级电脑” 低功耗,小体积,自带wifi ...

  4. 国内物联网平台(5):机智云IoT物联网云服务平台及智能硬件自助开发平台

    国内物联网平台(5)——机智云IoT物联网云服务平台及智能硬件自助开发平台 马智 平台定位 机智云平台是致力于物联网.智能硬件云服务的开放平台.平台提供了从定义产品.设备端开发调试.应用开发.产测.运 ...

  5. 国内物联网平台初探(五) ——机智云IoT物联网云服务平台及智能硬件自助开发平台

    平台定位 机智云平台是致力于物联网.智能硬件云服务的开放平台.平台提供了从定义产品.设备端开发调试.应用开发.产测.运营管理等覆盖智能硬件接入到运营管理全生命周期服务的能力. 机智云平台为开发者提供了 ...

  6. iOS蓝牙架构搭建-2

    蓝牙架构的搭建 前言:笔者认为,如果只是单纯的传授大家代码怎么敲,那么大家很有可能在实际开发中难以运用.刚好本人曾经参与过多款智能硬件开发的架构搭建,本小节本人就现场带领大家开发出一个通用的蓝牙工具类 ...

  7. 智能硬件+App移动新生态【10.24北京站】

    活动概况 时间:2015年10月24日13:30-16:30 地点:Wepac空间(海淀区北四环西路68号左岸工社6层) 主办:APICloud.机智云.智石科技.华为云 网址:www.apiclou ...

  8. 苹果HomeKit如何牵动全国智能硬件格局

    苹果HomeKit如何牵动全国智能硬件格局 2014-06-23 15:48 发表      系统分类:消费电子      自定义分类:默认 标签:智能家居 苹果在6月的WWDC开发者大会上发布了包括 ...

  9. 为智能硬件提供一站式解决方案——机智云GoKit评测

    为智能硬件提供一站式解决方案——机智云GoKit评测 2014年12月24日 作者: ladouyu 3 17,414+ 4 EMW3162GoKit开发板STM32F103智能硬件机智云2.0 从物 ...

随机推荐

  1. 实现用http上传文件,用ftp下载文件

    1.ftp配置 1.检查安装vsftpd软件 使用如下命令#rpm -qa |grep vsftpd可以检测出是否安装了vsftpd软件, 如果没有安装,使用YUM命令进行安装. 2.启动服务 使用v ...

  2. CF 1003C Intense Heat【前缀和/精度/双层暴力枚举】

    The heat during the last few days has been really intense. Scientists from all over the Berland stud ...

  3. Hadoop-eclipse插件配置

    1.准备jar包与安装eclipse. 2.将jar包拷贝到eclipse/plugin.

  4. swagger (九)

    创建创建microservicecloud-swagger pom文件 eureka: client: #客户端注册进eureka服务列表内 service-url: defaultZone: htt ...

  5. Codeforces #428 Div2 D

    #428 Div2 D 题意 给出一些数,现在要求找出一些数满足 \(i_1 < i_2 < i_3 < ... < i_k\) 以及 \(gcd(a_{i_1}, a_{i_ ...

  6. kattis Curious Cupid (莫队算法)

    Curious Cupid There are K different languages in the world. Each person speaks one and only one lang ...

  7. 软件工程中的反面模式(anti-pattern)

    软件设计 抽象倒置(Abstraction inversion):不把用户需要的功能直接提供出来,导致他们要用更上层的函数来重复实现 用意不明(Ambiguous viewpoint):给出一个模型( ...

  8. AtCoder - 2567 RGB Sequence

    Problem Statement There are N squares arranged in a row. The squares are numbered 1, 2, …, N, from l ...

  9. 【R笔记】给R加个编译器——notepad++

    R的日记-给R加个编译器 转载▼ R是一款强大免费且开源的统计分析软件,这是R的长处,可也是其“缺陷”的根源:不似商业软件那样user-friendly.记得初学R时,给我留下最深印象的不是其功能的强 ...

  10. Social regularizations

    trust-aware :如何从隐式信任中导出显示信任.链接预测就是搞这一方面的么? 和类似谱聚类的拉普拉斯矩阵结合在一起,没怎么看.