美文网首页蓝牙iOS Developer程序员
IOS蓝牙4.0(BLE)开发(二)

IOS蓝牙4.0(BLE)开发(二)

作者: 在海边的人 | 来源:发表于2016-09-10 14:37 被阅读956次

      其实IOS的BLE开发并不是特别复杂,难度也不是很大。它的实质就是CoreBluetooth.framework这一个框架的使用,即使你以前对蓝牙毫无了解,如果你花时仔细研究一下API,也是很容易上手的。我这里就是想把当时自己摸索的过程尽可能详细的整理出来,这样可以让刚开始接触蓝牙开发的小伙伴们,更加快速的了解这方面的东西,进行开发工作。

CoreBluetooth框架中心模式介绍:

1.准备工作:

我们新建一个BLE工程之后首先要做的事情就是导入CoreBluetooth库,我们在TARGETS——>Build Phases-->Link Binary With Libraries中搜索添加,如下图所示:

接下来就是在需要使用CB的时候引入头文件,并且声明代理:

       我么可以看到我们定义了一些宏,这就是具体你需要连接的外设中的服务与特征的UUID了,你的硬件工程师会给你相应的说明文档的。同事我们还声明了一些属性,方便我们接下来的使用,下边做一个解释:

CBCentralManager *centralManager:中心设备管理员对象。

CBPeripheral *peripheral:外设对象。

CBCharacteristic *Characteristic1;

CBCharacteristic *Characteristic2;

以上两个是其中一个服务的两个特征值,我们就是通过这些特征值和设备做交互的,1是读取设备发送给我的数据的,2是向设备写入数据发送数据的。

CBCharacteristic *characteristicTx;

CBCharacteristic *characteristicRx;这是另外一个服务中的两个特征值,作用同上。


2.创建中心设备管理员对象扫描外设

创建对象:

self.centralManager = [[CBCentralManager alloc] initWithDelegate:self queue:nil];

创建完对象之后,需要判断其工作状态,如果正常开启,就开始扫描外设。这是require代理方法,此方法由系统调用:

扫描外设:

[self.centralManager scanForPeripheralsWithServices:nil options:options]; (第一个参数为空的话,默认扫描所有外服务,也可以给个参数设置过滤条件)我们在上边已经调用过了

[self.centralManager stopScan];//停止扫描

一般情况下我们会将扫描到的设备添加到一个数组里边,然后建一个TableView来显示我们搜索到的设备对象。

系统有一个搜索到设备之后自动调用的代理方法,(一般带did的都是自动调用的)在这个方法中我们可以得到搜索到外设信息,每搜索到一个设备就会调用一次该方法:

- (void)centralManager:(CBCentralManager )central didDiscoverPeripheral:(CBPeripheral )peripheral advertisementData:(NSDictionary )advertisementData RSSI:(NSNumber )RSSI

{    [_peripheralArray addObject:peripheral];//RSSI这个参数可以获取到与设备的距离;  }

3.连接外设

当我们做完第二步,获取到了外设信息之后,当然是要开始连接设备了,如果我们使用了TableView,我们可以在cell的点击方法里里调用下边的方法:

- (void)connectPeripheral:(CBPeripheral )peripheral {

[self.centralManager connectPeripheral:peripheral options:nil];// 连接外设 传入你搜索到的目标外设对象

self.peripheral = peripheral;

peripheral.delegate = self;//设置外设的代理 }

相对应的也有一个断开连接的方法:

- (void)disConnectPeripheral:(CBPeripheral )peripheral{

[_centralManager cancelPeripheralConnection:peripheral];//断开连接

}

如果连接成功则自动调用成功的方法:

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

{ NSLog(@"didConnectPeripheral:%@",peripheral.name);

[self stopScanBluetooth]; //连接成功后停止扫描

[self.peripheral setDelegate:self];//设置代理

[self discoverService];//连接成功调用此方法来发现服务 }

如果连接失败则自动调用:

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

NSLog(@"didFailToConnectPeripheral:%@",error);//这里可以打印出失败的信息。

4.发现服务与特征

      成功的连接到外设之后,当然是要看看它的内部有什么服务和特征了,这样我们才能顺利的与之进行数据的交互。

发现服务: 我们连接成功的时候已经调用了这个方法来发现服务

- (void)discoverService {

[_peripheral discoverServices:@[[CBUUID UUIDWithString:OTA_SERVICE_UUID]]];}

       我们可以看到这个这个方法的参数是传入一个数组,因为一个外设中可能有很多个服务,但是对于我们有使用价值的可能就呢么一个或者两个,我们可以传入相应的UUID来过滤,比如我现在只传入了一个UUID那么我发现的服务就只有这一个了,如果为nil则发现所有服务。 如果成功的发现了其中的服务系统自动回调:

- (void)peripheral:(CBPeripheral )peripheral didDiscoverServices:(NSError )error {

if (error)

{ NSLog(@"didDiscoverServices error:%@",[error localizedDescription]); return; //如果连接失败就打印出失败信息 }

else   { //连接成功就遍历这些服务 来发现每个服务中的特征

           for (CBService *service in peripheral.services)

            {   NSLog(@"Service found with UUID: %@", service.UUID);

                [peripheral discoverCharacteristics:nil forService:service];//调用此方法来发现该服务中的特征值

} } }

发现特征:发现服务之后就该扫描到该服务中的特征了,发现特征值之后系统自动回调下边的方法 ,每发现一个服务都会调用一次该方法:

- (void)peripheral:(CBPeripheral )peripheral didDiscoverCharacteristicsForService:(CBService )service error:(NSError )error

{      if (!error)

      { [self didFindAllCharacteristic:service.characteristics forService:service];//如果成功,我们可以自己写一个方法,查看特征信息等操作。 }

        else  { NSLog(@"%@",error);//打印错误信息 }

}

自己写一个方法来查看所有的特征值:

我们还可以通过这一个方法监听到通知的状态:

- (void)peripheral:(CBPeripheral *)peripheral didUpdateNotificationStateForCharacteristic:(CBCharacteristic *)characteristic error:(NSError *)error {

if (!error) {

NSLog(@"注册成功!");

}else {

NSLog(@"注册失败!:%@",error);

} }

       为了避免篇幅太长,这篇文章就先介绍到这里。获取到服务与特征之后,就可以开始和设备进行数据的交互了。而整个蓝牙开发过程最复杂的地方,也是最重要的地方就是,数据的交互了。其实这篇文章介绍的内容有很多博客也都介绍的很多了,我这里为了尽可能详细的介绍,说的比较繁琐,如果有什么错误的地方大家及时指正。一起交流,共同进步!


相关文章

  • CoreBluetooth

    iOS-BLE蓝牙开发持续更新 - 简书 蓝牙打印小票 一个第三方 IOS BLE4.0蓝牙和外设连接和收发数据的...

  • iOS 蓝牙BLE4.0开发

    蓝牙开发,现在普遍的都是BLE4.0低功耗蓝牙,CoreBluetooth是iOS 开发I比较推荐的一种开发方法...

  • iOS蓝牙4.0基础开发

    1.蓝牙开发基础 蓝牙4.0是低电量模式所以也叫4.0BLE。本文将使用iOS系统提供的CoreBluetooth...

  • macOS-BLE蓝牙4.0开发

    macOS-BLE蓝牙4.0开发 !!!中心模式 !!! macOS的BLE程序代码和iOS差不多,只需要修改一些...

  • iOS CoreBluetooth 蓝牙4.0学习接入笔记

    最近公司的项目中提到了蓝牙开发,而且现在市面上的蓝牙分为普通蓝牙和低功耗蓝牙(BLE)也就是蓝牙4.0 iOS 提...

  • Android 蓝牙BLE开发流程

    关键术语和概念 蓝牙有传统蓝牙(3.0以下)和低功耗蓝牙(BLE,又称蓝牙4.0)之分,而蓝牙4.0开发需要and...

  • 蓝牙

    iOS蓝牙4.0 BLE开发总结 非自写,转过来做个笔记,原文来自这里[http://mideablog.gith...

  • iOS蓝牙4.0(BLE)开发(二)

    CoreBluetooth框架使用及工作原理介绍 1、准备工作: 新建一个BLE工程之后首先要做的事情就是导入Co...

  • IOS蓝牙4.0(BLE)开发(二)

    其实IOS的BLE开发并不是特别复杂,难度也不是很大。它的实质就是CoreBluetooth.framework...

  • iOS开发蓝牙4.0初识

    iOS开发蓝牙4.0初识转载 2015-09-20 15:26:44标签:ios开发蓝牙ios开发蓝牙4.0ios...

网友评论

    本文标题:IOS蓝牙4.0(BLE)开发(二)

    本文链接:https://www.haomeiwen.com/subject/liuyettx.html