iOS蓝牙之扫描、链接、读写数据(一)

前段时间做了一个通过蓝牙BLE连接秤的项目,在做蓝牙的读写这块踩坑不少,在此与大家分享一下踩坑过程!同时为有些想了解蓝牙或正在踩坑的你提供一点点帮助(PS:由于自己也是第一次做蓝牙模块内容,有不对的地方还希望大神指正,小弟不胜感激......)

一、先为大家简单介绍有关蓝牙iOS开发的知识:

蓝牙一般分为传统蓝牙和蓝牙低能耗(简称:BLE)两种模式:传统蓝牙可以传输音频等较大数据量,距离近、功耗相对大;而BLE则用来传输节点数据,传输数据量十分小,多数情况处于休眠状态,因而功耗十分低,被广泛的应用于智能穿戴设备。

二、在做蓝牙开发之前,最好先了解一些概念:

GATT 连接需要特别注意的是:GATT 连接是独占的。也就是一个 BLE 外设同时只能被一个中心设备连接。一旦外设被连接,它就会马上停止广播,这样它就对其他设备不可见了。当设备断开,它又开始广播。

GATT(参考链接:https://www.race604.com/gatt-profile-intro)

三、蓝牙和版本的使用限制

蓝牙2.0 ===> 越狱设备 

蓝牙4.0 ===> IOS6 以上 

MFI认证设备(Make For ipod/ipad/iphone) ===> 无限制

四、蓝牙开发分为两种模式:管理者模式和中心者模式。

管理者模式:相当于iPhone手机作为外设,自己创建服务和特性,然后用其他设备连接iPhone手机(很少用)

中心者模式:使用中心者模式开发相当于iPhone手机作为主机,连接蓝牙外设(常用)。

下面介绍蓝牙开发的例子就是使用的中心者模式来说明

五、蓝牙常见名称和缩写

BLE:(Bluetooth low energy)蓝牙4.0设备因为低耗电;

Central:中心设备,相对比较强大,用来连接其他外围设备(手机);

Peripheral:外围设备,这一般就是非常小或者简单的低功耗设备,用来提供数据,并连接到一个更加相对强大的中心设备(小米手环);

Services:服务,蓝牙外设对外广播的必定会有一个服务,可能也有多个,服务下面包含着一些特征,服务可以理解成一个模块的窗口;

Characteristic:特征,存在于服务下面的,一个服务下面也可以存在多个特征,特征可以理解成具体实现功能的窗口,一般特征都会有value,也就是特征值,特征是与外界交互的最小单位;

Description:描述,每个Characteristic可以对应一个或多个Description用于描述Characteristic的信息或属性(暂时不太了解)

UUID:可以理解成蓝牙上的唯一标识符(硬件上是Mac值,iOS应该是被系统拦截了,所以获取不到Mac值,相对于转化而来是的UUID),为了区分不同的服务和特征,或者给服务和特征取名字,我们就用UUID来代表服务和特征。

六、蓝牙连接可以大致分为以下几个步骤

1、建立一个Central Manager实例进行蓝牙管理

2、搜索外围设备

3、连接外围设备

4、获得外围设备的服务

5、获得服务的特征

6、从外围设备读数据

7、给外围设备发送数据

具体代码实现请见下篇:iOS蓝牙之扫描、链接、读写数据(二)

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容