iOS蓝牙原生封装,助力智能硬件开发
代码地址如下:
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 *)peripheralcompleteBlock:(FZConnectSuccessBlock)completionBlockfailBlock:(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蓝牙原生封装,助力智能硬件开发相关推荐
- Android 系统(252)---Android:BLE智能硬件开发详解
Android:BLE智能硬件开发详解 目录 前言 BLE是个什么鬼 BLE中的角色分工 主要的关键词和概念 GATT(Generic Attribute Profile ) Characteris ...
- 这是智能硬件开发门槛被降得最低的一次
这是智能硬件开发门槛被降得最低的一次--如果"智键"."米键"和"快按钮"算智能硬件的话.这三个与耳机接头外形相似的"按钮&quo ...
- HarmonyOS硬件创新合作伙伴,【HarmonyOS】HarmonyOS智能硬件开发学习指南 - HDC2020
2020年9月10日,华为HarmonyOS 2.0版本正式官宣!这一次,借助 HarmonyOS 全场景分布式系统和设备生态,将定义全新的硬件.交互和服务体验,打开焕然一新的全场景世界,不愧是Har ...
- 高通QCC302x,QCC512X,QCC303X完成智能硬件开发目录
本专栏将从一个只会简单C语言以及简单硬件知识的角度出发,由浅到深循序渐进的,讲解使用QCC3034进行智能硬件开发的调试过程.希望给初学QCC3034,QCC302x,QCC512X,QCC303X的 ...
- 鸿蒙开发起步系列 | 环境搭建、HarmonyOS应用开发及智能硬件开发
本文从鸿蒙环境搭建开始说起,并汇总了HarmonyOS智能硬件开发和应用开发的一手资料,全场景剖析HarmonyOS系统究竟是什么.如何助力开发者更便捷高效地开发应用. 1.我的鸿蒙起步--开发环境搭 ...
- 软硬整合技术、智能硬件开发与顶层设计应用_课程
来自台湾的高焕堂老师,和来自美国硅谷的柯博文老师,共同指导... 课程名称:软硬整合技术.智能硬件开发与顶层设计应用 指导老师:高焕堂.柯博文 课程说明: 在智能&大数据时代,系统开发不仅仅攸 ...
- Android智能硬件开发心得总结(二)
Android智能硬件开发心得总结(一) 6.关于屏幕显示 每次一个新项目的开发,我所做的第一件事就是确定所选定显示屏的型号规格,然后将规格书发给主板供应商让其先调屏参. 调屏参是很可能会出现无法点亮 ...
- 什么是智能硬件?智能硬件开发对物联网有哪些重要性?
智能硬件是继智能手机之后的一个科技概念,通过硬件和软件相结合的方式,对传统设备进行改造,让其拥有智能化的功能.随着技术升级.基础设施完善和市场的不断成熟,智能硬件产品经历了从单个行业到多个行业的转变, ...
- 智能硬件开发神器免费送!距离产品智能化,只差一个“三明治”的距离
重磅资料包免费领取 针对人群:如果您对"人工智能+物联网"感兴趣,尤其是您的企业想做产品/行业智能化,一定不能错过这份"物联网人必备的终极大礼包"哦- 这 ...
最新文章
- Docker操作笔记(四)使用网络
- httpClient post方法 解析json数据(向服务器传递,接受服务器传递)
- 说实话,你工作5年,不知道什么是Java agent技术,让我很吃惊...
- 薅羊毛丨5个平价好物,终于终于终于打折了!
- Android Studio 选项菜单和动画结合_Android 应用与iOS 应用之间的设计差异对比!
- Java多对多关系示例
- 浅析:18个影响网站流量下降的原因!
- hdu3076ssworld VS DDD 概率dp
- 《研磨设计模式》读书笔记之:适配器模式、单例模式
- 常用的SQL多表连接查询
- 零基础搭建双端影视盒子——二、搭建影视管理后台
- AD采样SPS和计算能采的频率
- python中一元二次方程的判别式_一元二次方程根的判别式知识点
- YTU oj 3272: 公民身份号码
- 背单词App开发日记0
- Redis 服务器常用配置参数
- iOS开发 swift 3dTouch实现 附代码
- 虚拟服务器共享文件夹禁用,虚拟机共享文件夹禁用,vm虚拟机共享文件夹
- 127.0.0.1是什么地址?localhost呢?
- ahri8.php,文件上传处理 - [ php中文手册 ] - 在线原生手册 - php中文网