您的位置:首页 > 移动开发 > IOS开发

iOS蓝牙4.0开发流程

2015-10-20 10:27 447 查看
//
//  ViewController.m
//  CoreBluetooth
//
//  Created by rimi on 15/10/19.
//  Copyright © 2015年 RIMI. All rights reserved.
//

#import "ViewController.h"
#import <CoreBluetooth/CoreBluetooth.h>

@interface ViewController ()<CBCentralManagerDelegate,CBPeripheralDelegate>

@property (nonatomic,strong) NSMutableArray *peripherals;

@property (nonatomic,strong) CBCentralManager *mgr;

@property (nonatomic,strong) CBPeripheral *test_peripheral;

@property (nonatomic,strong) CBCharacteristic   *writeCharcteristic;

@property (nonatomic,strong) CBCharacteristic   *readCharcteristic;

@end

@implementation ViewController

- (NSMutableArray *)peripherals{

if (!_peripherals) {
_peripherals = [NSMutableArray array];
}
return _peripherals;
}

- (void)viewDidLoad {
[super viewDidLoad];

//1.创建中心设备
CBCentralManager *mgr = [[CBCentralManager alloc]init];
self.mgr = mgr;

//设置代理
mgr.delegate = self;

//利用中心设备扫描外部设备
/*
如果指定数组代表只烧苗指定的设备
*/
[mgr scanForPeripheralsWithServices:nil options:nil];

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

#pragma mark --<CBCentralManagerDelegate>

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

//保存扫描得到外部设备
//    判断如果数组中不包含当前扫描到得外部设备才保存
if (![self.peripherals containsObject:peripheral]) {

peripheral.delegate = self;
[self.peripherals addObject:peripheral];
}
}

/*
模拟点击,然后连接所有的外设

*/

- (void)start{

for (CBPeripheral *peripheral in self.peripherals) {

[self.mgr connectPeripheral:peripheral options:nil];
}
}

/*
连接外设成功调用
*/
- (void)centralManager:(CBCentralManager *)central didConnectPeripheral:(CBPeripheral *)peripheral{

//扫描外设中得服务
[peripheral discoverServices:nil];

}

/*
连接外设失败调用
*/

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

NSLog(@"failed");
}

#pragma mark --CBPeripheralDelegate

/*
只要扫描到服务就会调用
*/

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

//获取外设中所有扫描到得服务
NSArray *services = peripheral.services;
for (CBService *service in services) {
if ([service.UUID.UUIDString isEqualToString:@"123"]) {

//从需要的服务中查找需要的特征
//从peripheral中得service中扫描特征
[peripheral discoverCharacteristics:nil forService:service];
}
}

}

/*
只要扫描到特征就会调用
*  @param peripheral 特征所属的外设
*  @param service    特征所属的服务
*/

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

//拿到服务中所有的特征
NSArray *characteristics = service.characteristics;
//    便利特征,拿到需要的特征处理

for (CBCharacteristic *characteristic in characteristics) {

if ([characteristic.UUID.UUIDString isEqualToString:@"write"]) {
NSLog(@"设置闹钟");

}

if ([characteristic.UUID.UUIDString isEqualToString:@"read"]) {

NSLog(@"可读的特征");
}

}

}

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

}

//与外设做数据交互
- (void)write:(NSData*)data{

[self.test_peripheral writeValue:data forCharacteristic: _writeCharcteristic type:CBCharacteristicWriteWithoutResponse];
}

- (void)sendMessage{

unsigned char commod[512] = {0};

unsigned char *ptmp;

int sendLength = 0;

ptmp = commod;

NSData *data = [[NSData alloc]initWithBytes:&commod length:sendLength];

[self write:data];//写入数据到特征中

}

//监听设备
- (void)startSubscribe{

[_test_peripheral setNotifyValue:YES forCharacteristic:_readCharcteristic];
}

//当设备有数据返回时,同样是通过一个系统回调通知我,如下所示:
- (void)peripheral:(CBPeripheral *)peripheral didUpdateValueForCharacteristic:(CBCharacteristic *)characteristic error:(NSError *)error{

}

- (void)didReceiveMemoryWarning {
[super didReceiveMemoryWarning];

// Dispose of any resources that can be recreated.
}

@end


苹果官方推荐文档地址:https://developer.apple.com/library/ios/samplecode/BTLE_Transfer/Listings/BTLE_Transfer_BTLECentralViewController_m.html#//apple_ref/doc/uid/DTS40012927-BTLE_Transfer_BTLECentralViewController_m-DontLinkElementID_6
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: