蓝牙开发分为中心者和管理者模式:
1.中心者模式是常用模式(99.99%),即我们的手机作为主机,连接蓝牙外部设备;
2.管理者模式用得比较少,这种模式是手机作为外设,自己创建服务和特征,由其他设备连接手机。
蓝牙开发需要先了解几个概念:
服务 (services) :蓝牙外设对外广播必定会有一个服务,可能有多个,服务下面包含一些特征,服务可以理解成一个模块的窗口;
特征 (characteristic) :存在于服务下面的,一个服务下面可以存在多个特征,特征可以理解成具体实现功能的窗口,一般特征都会有value,也就是特征值,特征是与外界交互的最小单位;
UUID:可以理解成蓝牙上的唯一标识符 (硬件上肯定不是这个意思,但是这样理解便于我们开发) ,为了区别不同的服务和特征,或者给服务和特征取名字,我们就用UUID来代表服务和特征。
蓝牙连接大致分为以下几个步骤:
1.建立一个central Manager实例进行蓝牙管理
2.搜索外围设备
3.连接外围设备
4.获取外围设备的服务
5.获取服务的特征
6.从外围设备读取数据
7.给外围设备发送数据
//导入系统的BLE框架
#import <CoreBluetooth/CoreBluetooth.h>
//遵守2个协议
@interface ViewController ()<CBCentralManagerDelegate,CBPeripheralDelegate>
@property (nonatomic, strong) CBCentralManager *cbManager; //中心管理者
@property (nonatomic, strong) CBPeripheral *peripheral; //连接到的外围设备
@end
初始化中心管理者,并设置代理
_cbManager = [[CBCentralManager alloc] initWithDelegate:self queue:nil];
#pragma mark - delegate
//只有中心管理者初始化,就会触发此代理方法,判断手机蓝牙状态
- (void)centralManagerDidUpdateState:(CBCentralManager *)central {
/*
{
CBManagerStateUnknown = 0,
CBManagerStateResetting,
CBManagerStateUnsupported,
CBManagerStateUnauthorized,
CBManagerStatePoweredOff,
CBManagerStatePoweredOn,
}
*/
switch (central.state) {
case 0:
NSLog(@"CBManagerStateUnknown");
break;
case 1:
NSLog(@"CBManagerStateResetting");
break;
case 2:
NSLog(@"CBManagerStateUnsupported");
break;
case 3:
NSLog(@"CBManagerStateUnauthorized");
break;
case 4:
NSLog(@"CBManagerStatePoweredOff");