iOS开发

ios蓝牙开发教程,ios手机app开发教程视频

本文来自 姚兜兜的简书,作者 不灭的小灯灯当下蓝牙开发可谓是越来越火,不论是智能穿戴的兴起还是蓝牙家具,车联网蓝牙等等,很多同学也会接触到蓝牙的项目,我从事蓝牙开发也有一段时间了,经手了两个项目。废话不多说了,先向大家简单的介绍有关蓝牙开发的知识。蓝牙低能耗(BLE),以下介绍的都是围绕iOS的框架展开的。

蓝牙开发分为中心者模式和管理者模式:1.常用的(其实99.99%)就是使用中心者模式作为开发,就是我们手机作为主机,连接蓝牙外设;2.管理者模式,这个基本用到的比较少,我们手机自己作为外设,自己创建服务和特征,然后有其他的设备连接我们的手机。

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

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

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

UUID:可以理解成蓝牙上的唯一标识符(硬件上肯定不是这个意思,但是这样理解便于我们开发),为了区分不同的服务和特征,或者给服务和特征取名字,我们就用UUID来代表服务和特征。

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

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

4.获得外围设备的服务

7.给外围设备发送数据

首先我们先导入系统的BLE的框架

#import

@property (nonatomic, strong) CBCentralManager *cMgr;

/* 连接到的外设 /

@property (nonatomic, strong) CBPeripheral *peripheral;

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

-(CBCentralManager *)cmgr{    if (!_cmgr) {        _cMgr = [[CBCentralManager alloc] initWithDelegate:self queue:nil];    }    return _cMgr;}//只要中心管理者初始化 就会触发此代理方法 判断手机蓝牙状态- (void)centralManagerDidUpdateState:(CBCentralManager *)central{    switch (central.state) {        case 0:            NSLog(@”CBCentralManagerStateUnknown”);            break;        case 1:            NSLog(@”CBCentralManagerStateResetting”);            break;        case 2:            NSLog(@”CBCentralManagerStateUnsupported”);//不支持蓝牙            break;        case 3:            NSLog(@”CBCentralManagerStateUnauthorized”);            break;        case 4:        {            NSLog(@”CBCentralManagerStatePoweredOff”);//蓝牙未开启        }            break;        case 5:        {            NSLog(@”CBCentralManagerStatePoweredOn”);//蓝牙已开启              // 在中心管理者成功开启后再进行一些操作            // 搜索外设            [self.cMgr scanForPeripheralsWithServices:nil // 通过某些服务筛选外设                                              options:nil]; // dict,条件            // 搜索成功之后,会调用我们找到外设的代理方法            // – (void)centralManager:(CBCentralManager *)central didDiscoverPeripheral:(CBPeripheral *)peripheral advertisementData:(NSDictionary *)advertisementData RSSI:(NSNumber *)RSSI; //找到外设        }            break;        default:            break;    }}2.搜索外围设备 (我这里为了举例,采用了自己身边的一个手环)

// 发现外设后调用的方法- (void)centralManager:(CBCentralManager *)central // 中心管理者 didDiscoverPeripheral:(CBPeripheral *)peripheral // 外设     advertisementData:(NSDictionary *)advertisementData // 外设携带的数据                  RSSI:(NSNumber *)RSSI // 外设发出的蓝牙信号强度{    //NSLog(@”%s, line = %d, cetral = %@,peripheral = %@, advertisementData = %@, RSSI = %@”, __FUNCTION__, __LINE__, central, peripheral, advertisementData, RSSI);    /*     peripheral = , advertisementData = {     kCBAdvDataChannel = 38;     kCBAdvDataIsConnectable = 1;     kCBAdvDataLocalName = OBand;     kCBAdvDataManufacturerData = <4c69616e 0e060678 a5043853 75>;     kCBAdvDataServiceUUIDs =     (     FEE7     );     kCBAdvDataTxPowerLevel = 0;     }, RSSI = -55     根据打印结果,我们可以得到运动手环它的名字叫 OBand-75     */    // 需要对连接到的外设进行过滤    // 1.信号强度(40以上才连接, 80以上连接)    // 2.通过设备名(设备字符串前缀是 OBand)    // 在此时我们的过滤规则是:有OBand前缀并且信号强度大于35    // 通过打印,我们知道RSSI一般是带-的    if ([peripheral.name hasPrefix:@”OBand”]) {        // 在此处对我们的 advertisementData(外设携带的广播数据) 进行一些处理        // 通常通过过滤,我们会得到一些外设,然后将外设储存到我们的可变数组中,        // 这里由于附近只有1个运动手环, 所以我们先按1个外设进行处理        // 标记我们的外设,让他的生命周期 = vc        self.peripheral = peripheral;        // 发现完之后就是进行连接        [self.cMgr connectPeripheral:self.peripheral options:nil];        NSLog(@”%s, line = %d”, __FUNCTION__, __LINE__);    }}3.连接外围设备

// 中心管理者连接外设成功- (void)centralManager:(CBCentralManager *)central // 中心管理者  didConnectPeripheral:(CBPeripheral *)peripheral // 外设{    NSLog(@”%s, line = %d, %@=连接成功”, __FUNCTION__, __LINE__, peripheral.name);    // 连接成功之后,

Similar Posts

发表评论

邮箱地址不会被公开。 必填项已用*标注