`
_wyh
  • 浏览: 61078 次
社区版块
存档分类
最新评论

ios CoreBluetooth中央设备的实现

    博客分类:
  • ios
阅读更多

中央设备的实现大体分为以下步骤:

1,创建中央管理类,CentralManager

2,扫描并发现外设。

3,连接外设。

4,扫描连接上外设的所有服务。

5,扫描所有搜索到的服务的特征。

6,读或写或订阅特征。

 

 

具体实现:

 

1,同外设相同,先引入CoreBluetooth。之后实现两个协议,分别是CBCentralManagerDelegate,CBPeripheralDelegate。在.h中声明一个CBCentralManager,名为centralManager。在声明一个可变数组,用来存取所有连接的外设。

#import <CoreBluetooth/CoreBluetooth.h>
@property (strong, nonatomic) CBCentralManager *centralManager;
@property (strong, nonatomic) NSMutableArray *peripherals;

 

2,在.m中初始化.h中声明过的centralManager.

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

 

3,实现代理方法centralManagerDidUpdateState,和外围设备的实现一样,检测设备是否支持是否打开了蓝牙。

- (void)centralManagerDidUpdateState:(CBCentralManager *)central{
    switch (central.state) {
    case CBPeripheralManagerStatePoweredOn:
        [central scanForPeripheralsWithServices:nil options:nil];
        break;
    default:
        NSLog(@"不支持或未打开蓝牙功能.");
        break;
    }
}

    上面的scanForPeripheralsWithServices:nil是用来执行扫描外设的方法。

 

4,因为上面执行了scanForPeripheralsWithServices:nil,所以接下来应该实现扫描到外设后的方法。

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

    if ([peripheral.name isEqualToString:kPeripheralName]) {

        if(![self.peripherals containsObject:peripheral]){
            [self.peripherals addObject:peripheral];
        }        
        [self.centralManager connectPeripheral:peripheral options:nil];
    }
}

     如果数组中已经有了搜索到的设备,就直接connect。如果没有,就将该外设加入到数组中,然后再connect。connectPeripheral方法是用来连接搜索到的外设。

 

5,连接到外部设备

- (void)centralManager:(CBCentralManager *)central 
        didConnectPeripheral:(CBPeripheral *)peripheral
        {
    [self.centralManager stopScan];
    peripheral.delegate = self;
    [peripheral discoverServices:@[[CBUUID UUIDWithString:kServiceUUID]]];
}

    因为连接了外设,所以使用stopScan方法停止扫描。之后执行discoverService来扫描服务。

 

6,扫描到外设的服务后,会调用didDiscoverServices。所以实现didDiscoverServices方法。

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

    CBUUID *serviceUUID = [CBUUID UUIDWithString:kServiceUUID];
    CBUUID *characteristicUUID = [CBUUID UUIDWithString:kCharacteristicUUID];
    for (CBService *service in peripheral.services) {
        if([service.UUID isEqual:serviceUUID]){
            [peripheral discoverCharacteristics:nil forService:service];
        }
    }
}

    搜索到了服务后,执行discoverCharacteristics方法来搜索所有的特征。

 

7,扫描到了服务的特征之后,为特征实现读或写或订阅。

- (void)peripheral:(CBPeripheral *)peripheral 
        didDiscoverCharacteristicsForService:(CBService *)service 
             error:(NSError *)error
{
    CBUUID *serviceUUID = [CBUUID UUIDWithString:kServiceUUID];
    CBUUID *characteristicUUID = [CBUUID UUIDWithString:kCharacteristicUUID];
    if ([service.UUID isEqual:serviceUUID]) {
        for (CBCharacteristic *characteristic in service.characteristics) {
            if ([characteristic.UUID isEqual:characteristicUUID]) {

                [peripheral setNotifyValue:YES forCharacteristic:characteristic];

            }
        } 
    }
}

      以上是搜索服务中的所有特征,如果某个特征符合我要寻找的特征,就对该特征执行一些操作。

      上面代码用的是订阅,还可以读,写,这取决于该特征在外设中定义时定义的类型。

readValueForCharacteristic   //读
setNotifyValue   //订阅
writeValue   //写

 

0
0
分享到:
评论

相关推荐

    IOS corebluetooth

    - **中央设备(Central)**:iOS设备通常作为中央设备,负责扫描、连接和管理多个外围设备。 - **外围设备(Peripheral)**:外围设备是BLE网络中的服务提供者,可以是各种BLE硬件,如传感器或者执行器。 - **...

    IOS-coreBluetooth开发、soket通信

    1. **初始化Central Manager**:首先,你需要创建一个CBCentralManager实例,它是中央设备的管理者,负责搜索、连接和管理外围设备。 ```swift let centralManager = CBCentralManager(delegate: self, queue: nil)...

    CoreBluetooth

    CoreBluetooth是iOS、macOS和watchOS平台上的一个框架,用于实现低功耗蓝牙(Bluetooth Low Energy,也称为Bluetooth 4.0或Bluetooth Smart)通信。这个框架允许开发者创建能够与支持蓝牙4.0的外围设备进行交互的...

    CoreBluetooth的中心模式查找全部蓝牙设备

    在iOS应用中,我们通常会设置应用为中央设备,寻找周围的外设。 3. **初始化CBCentralManager**: 首先,我们需要创建一个CBCentralManager实例,这是处理所有中心管理任务的核心对象。初始化时,需要指定一个...

    CoreBlueTooth蓝牙通信

    总之,"CoreBlueTooth蓝牙通信"涉及到的是iOS开发中的低功耗蓝牙技术,通过CoreBluetooth框架实现设备间的交互。理解并掌握这一技术,开发者可以创建出各种与蓝牙设备互动的应用,例如健康监测、智能家居控制等。

    CoreBluetoothExample:示例CoreBluetooth外围设备和中央应用程序

    在iOS和macOS上,CoreBluetooth允许应用程序作为中央设备(Central)去扫描和连接到外围设备(Peripheral),同时也支持设备作为外围设备广播自己的服务和特性。 **二、CoreBluetooth组件与概念** 1. **...

    iOS BLE Demo 中央和周边

    用CoreBluetooth实现的BLE周边和中央,资源包含两个工程,一个是周边工程,一个是中央工程,你需要用两个iOS设备同时Run两个工程,才会看到完整的BLE通讯效果。详细介绍:...

    SwiftBLEPeripheral:使用CoreBluetooth,Swift 2.1,iOS Device创建外围BLE设备的示例代码

    CoreBluetooth是Apple提供的一个框架,用于在iOS、macOS、watchOS和tvOS平台上实现蓝牙低功耗通信。它支持中央和外围角色,使得设备可以发现、连接、交换数据与其他BLE设备。在SwiftBLEPeripheral中,重点在于外围...

    蓝牙4.0BLE源码(Android和IOS)

    你需要在Xcode工程中导入`CoreBluetooth`框架,并创建`CBCentralManager`实例来管理蓝牙中央设备,以及`CBPeripheral`实例来表示外围设备。同时,你需要实现`CBCentralManagerDelegate`和`CBPeripheralDelegate`协议...

    IOS 蓝牙4.0

    CoreBluetooth框架的核心概念包括中央设备(Central)和外围设备(Peripheral),它们分别代表了设备连接中的主设备和从设备角色。在iOS应用中,用户通常将iPhone或iPad作为中央设备,而其他BLE设备则作为外围设备。 **...

    IOS BLE server&client background mode

    在iOS平台上,Bluetooth Low Energy (BLE) 技术被广泛应用于设备间的短距离通信,尤其在移动设备上,如智能手机和平板电脑。标题"iOS BLE server&client background mode"涉及的关键知识点是iOS设备如何作为BLE...

    swift-EasyBluetooth一款iOSBLE蓝牙调试工具

    - **核心组件**:BLE系统包含中央设备(Central)和外围设备(Peripheral),中央设备通常为智能手机,而外围设备可以是各种传感器或其他BLE设备。 2. **Swift开发环境** - **Swift编程语言**:Apple的开源编程...

    iOS蓝牙指南

    - **定义与功能:** CoreBluetooth是iOS中的一个框架,它为开发者提供了在iOS设备上实现蓝牙低功耗(BLE)通信的能力。该框架支持两种角色:中心设备(Central)和外围设备(Peripheral)。 - **关键组件:** - **...

    ios蓝牙通信

    iOS蓝牙通信技术主要涉及到苹果设备间的短距离无线通信,它基于Core Bluetooth框架,允许iOS应用在设备间交换数据,甚至可以连接低功耗蓝牙设备(BLE,...通过这些知识点,可以实现iOS应用与蓝牙设备的高效通信。

    iOS蓝牙功能介绍-蓝牙Demo

    它是Apple提供的一个面向对象的框架,用于在iOS、watchOS和macOS设备上实现蓝牙LE通信。开发者可以通过这个框架创建后台运行的应用,使设备能够作为中央管理者(Central Manager)发现并连接到外围设备(Peripheral...

    iOS端简单蓝牙对话

    该框架支持GATT(Generic Attribute Profile)协议,允许iOS设备作为中央设备(Central)发现并连接到外围设备(Peripheral),也可以作为外围设备被其他中央设备发现。 二、初始化CBCentralManager 在iOS应用中,...

    ble4.0代码

    - **多连接**:一个中央设备可以同时连接多个外围设备,实现一对多通信。 - **安全加密**:支持AES-128加密,确保数据传输的安全性。 **3. GATT(通用属性配置文件)** BLE的核心是GATT(Generic Attribute Profile...

    蓝牙4.0资料APP

    提供的Android demo可能是展示如何在Android平台上创建一个BLE客户端应用,而开源的iOS项目可能包含了一个完整的BLE中央设备应用,可以帮助开发者快速上手和理解BLE工作流程。 总之,蓝牙4.0技术在IoT领域中扮演着...

    ios开发实例

    4. **蓝牙中央管理器**(Bluetooth Central Manager):在蓝牙低功耗(BLE)设备相关应用中,可以请求后台模式来维持与蓝牙设备的连接。使用`CoreBluetooth`框架可以实现在后台接收蓝牙数据。 5. **后台任务完成**...

Global site tag (gtag.js) - Google Analytics