IOS Objective-c 蓝牙开发教程一蓝牙的连接

     一开始使用swift连接蓝牙,接收数据,但是因为需求又改成用oc写了,写了swift再写oc非常快的!

     开发蓝牙,首先要理解几个概念什么是中心(centrol)什么是周边(peripheral),这些比较基础百度一下就行。有了这些基本概念以后再上手会快些;

     首先从targets------>Build Phases------>导入corebluetooth.framework的框架。如下图


    然后在ViewController.h的文件中添加两个协议:CBCentralManagerDelegate和CBPeripheralDelagate具体代码如下:

//  Copyright © 2016 Eagan Dong. All rights reserved.

//

#import

@protocol CBCentralManagerDelegate;

@protocol CBPeripheralDelagate;


@interface ViewController : UIViewController


@end

然后在ViewController.m文件中导入

#import "CoreBluetooth/CoreBluetooth.h"蓝牙框架的头文件,并且实现继承协议,和定义蓝牙连接的指针

#import "ViewController.h"

#import "CoreBluetooth/CoreBluetooth.h"


@interface ViewController ()<CBCentralManagerDelegate,CBPeripheralDelegate>

@property  CBCentralManager *manager;

@property  NSMutableArray *peripherals;

@property  CBPeripheral    *peripheral;

@property  CBCharacteristic *characteristic;

@property  NSString        *data;

@end

这些设置完毕之后开始连接蓝牙代码:在 @implementation ViewController和@end中实现对象方法

(1)创建一个中心;创建中心是蓝牙连接的开始,如果想要添加一个按钮控制蓝牙的话,可以设置按钮点击触发中心创建,我是把它放在了viewDidLoad里

- (void)viewDidLoad {

    [super viewDidLoad];

    // Do any additional setup after loading the view, typically from a nib.

    //1环境搭好(.h.m文件的参数/协议/框架)创建一个中心

    _manager = [[CBCentralManager alloc]initWithDelegate:self queue:nil];

    self.manager.delegate = self;

    //创建数组来管理外设

    self.peripherals = [NSMutableArray array];

}

(2)在连接蓝牙前先检查中心的蓝牙是否打开(比如,针对ipad的app开发就是检查你的ipad的蓝牙是否打开),确认蓝牙打开后开始扫描蓝牙。

-(void) centralManagerDidUpdateState:(CBCentralManager *)central{

    switch (central.state){

        case CBCentralManagerStatePoweredOn:

        //扫描周边蓝牙外设.

     

        //CBCentralManagerScanOptionAllowDuplicatesKeytrue表示允许扫到重名,false表示不扫描重名的。

           NSLog(@"蓝牙已打开,准备扫描外设");

      

           [_manager scanForPeripheralsWithServices:nil options:nil]; //扫描语句:nil表示扫描所有蓝牙外设,如果传上面的kServiceUUID,那么只能扫描出FFEO这个服务的外设

            break;

  

    case CBCentralManagerStateUnauthorized:

           NSLog(@"这个应用程序是无权使用蓝牙低功耗");

            break;

    case CBCentralManagerStatePoweredOff:

            NSLog(@"蓝牙目前已关闭");

            break;

    default:

            break;

    }

}

(3)成功扫描到了蓝牙会自动进入: didDiscoverPeripheral 这个函数。peripheral.name和RSSI是你所扫描到的蓝牙的名字和距离,这个函数里面可以看到你所搜索到的蓝牙的信息,我是只连接特定的蓝牙:HC-08。这个函数有多少个蓝牙就会被调用几次。

-(void)centralManager:(CBCentralManager *)central didDiscoverPeripheral:(CBPeripheral *)peripheral advertisementData:(NSDictionary<NSString *,id> *)advertisementData RSSI:(NSNumber *)RSSI{

  

  if ([peripheral.name isEqualToString:@"HC-08"]) {//只连接HC-08的蓝牙

      

       //尝试着连接蓝牙

        self.manager.delegate = self;//?委托?

        NSLog(@"尝试连接蓝牙:%@", peripheral.name);

        self.peripheral=peripheral;//useful

        [self.manager connectPeripheral:peripheral options:nil];

    }

   

}

(4)检测蓝牙是否成功连接:如果你的蓝牙板子是有指示灯的话,你看指示灯就可以啦。在程序里面蓝牙已经成功连接的话,会自动进入didConnectPeripheral。蓝牙成功连接之后,蓝牙停止扫描。

-(void)centralManager:(CBCentralManager *)central didConnectPeripheral:(CBPeripheral *)peripheral{

    //检测是否连接到设备

    NSLog(@"did connect to peripheral:%@", peripheral);

    //停止扫描

        [_manager stopScan ];

    //发现服务

    self.peripheral = peripheral;

    self.peripheral.delegate = self;

    [self.peripheral discoverServices:nil];

   

    

如果程序成功执行会成功   执行NSLog(@"did connect to peripheral:%@", peripheral);后台可以看到已经连上的蓝牙的信息

  //如果蓝牙没有连接会调用此函数,错误也会在后台显示

-(void)centralManager:(CBCentralManager *)central didDisconnectPeripheral:(CBPeripheral *)peripheral error:(NSError *)error{

    NSLog(@"did not  connect to peripheral:%@", error);

}

现在蓝牙已经成功连接上了,接下来就是收蓝牙的数据了,发送数据还没有实现,下一个帖子更新蓝牙数据的接收。



你可能感兴趣的:(IOS Objective-c 蓝牙开发教程一蓝牙的连接)