美文网首页
iOS 蓝牙4.0简单Demo

iOS 蓝牙4.0简单Demo

作者: 猫猫橘 | 来源:发表于2020-12-25 14:07 被阅读0次

使用CBCentralMannager模式
Demo样式:

蓝牙demo示例

1.导入CoreBluetooth框架

#import <CoreBluetooth/CoreBluetooth.h>

2.遵守CBCentralManagerDelegate,CBPeripheralDelegate协议

@interface ViewController () <CBCentralManagerDelegate,CBPeripheralDelegate>

3.检测蓝牙状态

// 状态更新时调用
- (void)centralManagerDidUpdateState:(CBCentralManager *)central {
    switch (central.state) {
        case CBManagerStateUnknown:{
            NSLog(@"为知状态");
            self.peripheralState = central.state;
        }
            break;
        case CBManagerStateResetting:
        {
            NSLog(@"重置状态");
            self.peripheralState = central.state;
        }
            break;
        case CBManagerStateUnsupported:
        {
            NSLog(@"不支持的状态");
            self.peripheralState = central.state;
        }
            break;
        case CBManagerStateUnauthorized:
        {
            NSLog(@"未授权的状态");
            self.peripheralState = central.state;
        }
            break;
        case CBManagerStatePoweredOff:
        {
            NSLog(@"关闭状态");
            self.peripheralState = central.state;
        }
            break;
        case CBManagerStatePoweredOn:
        {
            NSLog(@"开启状态-可用状态");
            self.peripheralState = central.state;
            NSLog(@"%ld",(long)self.peripheralState);
        }
            break;
        default:
            break;
    }
}

4.建立中心角色

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

5.扫描设备

if (self.peripheralState == CBManagerStatePoweredOn) {
        [self.centralManager scanForPeripheralsWithServices:nil options:nil];
    }

6.发现外设

/**
 扫描到设备
 @param central 中心管理者
 @param peripheral 扫描到的设备
 @param advertisementData 广告信息
 @param RSSI 信号强度
 */
- (void)centralManager:(CBCentralManager *)central didDiscoverPeripheral:(CBPeripheral *)peripheral advertisementData:(NSDictionary<NSString *,id> *)advertisementData RSSI:(NSNumber *)RSSI {
    NSLog(@"%@",[NSString stringWithFormat:@"发现设备,设备名:%@",peripheral.name]);
}

7.连接外设
  7.1连接成功

/**
 连接成功
 
 @param central 中心管理者
 @param peripheral 连接成功的设备
 */
- (void)centralManager:(CBCentralManager *)central didConnectPeripheral:(CBPeripheral *)peripheral {
    NSLog(@"连接设备:%@成功",peripheral.name);
    [self.centralManager stopScan];
}

  7.2连接失败

/**
 连接失败
 @param central 中心管理者
 @param peripheral 连接失败的设备
 @param error 错误信息
 */
- (void)centralManager:(CBCentralManager *)central didFailToConnectPeripheral:(CBPeripheral *)peripheral error:(NSError *)error {
    NSLog(@"%@",@"连接失败");
}

  7.3连接断开

/**
 连接断开
 @param central 中心管理者
 @param peripheral 连接断开的设备
 @param error 错误信息
 */
- (void)centralManager:(CBCentralManager *)central didDisconnectPeripheral:(CBPeripheral *)peripheral error:(NSError *)error {
    NSLog(@"%@",@"断开连接");
}

8.扫描外设中的服务

// 设置设备的代理
peripheral.delegate = self;
// services:传入nil  代表扫描所有服务
[peripheral discoverServices:nil];

  8.1发现并获取外设中的服务

/**
 扫描到服务
 @param peripheral 服务对应的设备
 @param error 扫描错误信息
 */
- (void)peripheral:(CBPeripheral *)peripheral didDiscoverServices:(NSError *)error {
    // 遍历所有的服务
    for (CBService *service in peripheral.services)
    {
        NSLog(@"服务:%@",service.UUID.UUIDString);
    }
}

9.扫描外设对应服务的特征

// 根据服务去扫描特征
[peripheral discoverCharacteristics:nil forService:service];

  9.1发现并获取外设对应服务的特征

/**
 扫描到对应的特征
 @param peripheral 设备
 @param service 特征对应的服务
 @param error 错误信息
 */
- (void)peripheral:(CBPeripheral *)peripheral didDiscoverCharacteristicsForService:(CBService *)service error:(NSError *)error {
    NSLog(@"%@",peripheral);
}

  9.2给对应特征写数据

[peripheral writeValue:data forCharacteristic:characteristic type:CBCharacteristicWriteWithResponse];

10.订阅特征的通知

if ([characteristic.UUID.UUIDString isEqualToString:kNotifyCharacteristicUUID]){
  [peripheral setNotifyValue:YES forCharacteristic:characteristic];
}

  10.1根据特征读取数据 didUpdateValueForCharacteristic

/**
 根据特征读到数据
 @param peripheral 读取到数据对应的设备
 @param characteristic 特征
 @param error 错误信息
 */
- (void)peripheral:(CBPeripheral *)peripheral didUpdateValueForCharacteristic:(nonnull CBCharacteristic *)characteristic error:(nullable NSError *)error {
    if ([characteristic.UUID.UUIDString isEqualToString:kNotifyCharacteristicUUID])
    {
        NSData *data = characteristic.value;
        NSLog(@"%@",data);
    }
}

附上demo地址:https://github.com/DevilGene/WKBlueToothDemo

相关文章

  • iOS 蓝牙4.0简单Demo

    使用CBCentralMannager模式Demo样式: 1.导入CoreBluetooth框架 2.遵守CBCe...

  • iOS开发蓝牙4.0初识

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

  • iOS蓝牙4.0,后台监听来电

    在上一篇文章《iOS蓝牙4.0收发数据设计》,有简单的介绍收发数据设计。在iOS蓝牙4.0开发过程中,肯定还有许多...

  • iOS 蓝牙4.0开发

    iOS 蓝牙4.0开发

  • iOS Bluetooth开发基础

    蓝牙知识简介 蓝牙硬件 1、蓝牙4.0:包括蓝牙4.0以上的版本,iOS 6 以上才可以使用,不一定需要MFI认证...

  • 蓝牙开发

    iOS蓝牙开发 Bluetooth蓝牙CoreBluetooth 蓝牙中心设备的实现 蓝牙外设的实现 有Demo ...

  • iOS蓝牙开发 Bluetooth蓝牙CoreBluetooth

    iOS蓝牙开发 Bluetooth蓝牙CoreBluetooth 蓝牙中心设备的实现 蓝牙外设的实现 有Demo ...

  • iOS蓝牙实现

    iOS 中使用 Core Bluetooth 框架实现蓝牙通信。Core Bluetooth 是基于蓝牙 4.0 ...

  • iOS 蓝牙开发 - 学习

    iOS 中使用 Core Bluetooth 框架实现蓝牙通信。Core Bluetooth 是基于蓝牙 4.0 ...

  • iOS蓝牙编程CoreBluetooth

    iOS的蓝牙框架是支持蓝牙4.0协议的。理解iOS CoreBluetooth两个很重要的概念,Central 和...

网友评论

      本文标题:iOS 蓝牙4.0简单Demo

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