• CoreBluetooth


    Core Bluetooth的基本常识

    每个蓝牙4.0设备都是通过服务(Service)和特征(Characteristic)来展示自己的

    一个设备必然包含一个或多个服务,每个服务下面又包含若干个特征

    特征是与外界交互的最小单位

    比如说,一台蓝牙4.0设备,用特征A来描述自己的出厂信息,用特征B来收发数据

    服务和特征都是用UUID来唯一标识的,通过UUID就能区别不同的服务和特征

    设备里面各个服务(service)和特征(characteristic)的功能,均由蓝牙设备硬件厂商提供,比如哪些是用来交互(读写),哪些可获取模块信息(只读)等

    ******************************************************************************************

    Core Bluetooth的开发步骤

    建立中心设备

     扫描外设(Discover Peripheral)

    连接外设(Connect Peripheral)

    扫描外设中的服务和特征(Discover Services And Characteristics)

    利用特征与外设做数据交互(Explore And Interact)

    断开连接(Disconnect)

      1 #import "ViewController.h"
      2 #import <CoreBluetooth/CoreBluetooth.h>
      3 
      4 @interface ViewController () <CBCentralManagerDelegate, CBPeripheralDelegate>
      5 /**
      6  *  外设
      7  */
      8 @property (nonatomic, strong) NSMutableArray *peripherals;
      9 /**
     10  *  中心管理者
     11  */
     12 @property (nonatomic, strong) CBCentralManager *mgr;
     13 @end
     14 
     15 @implementation ViewController
     16 
     17 #pragma mark - 懒加载
     18 // 1.创建中心设备管理对象
     19 - (CBCentralManager *)mgr
     20 {
     21     if (_mgr == nil) {
     22         _mgr = [[CBCentralManager alloc] init];
     23         _mgr.delegate = self;
     24     }
     25     return _mgr;
     26 }
     27 
     28 - (NSMutableArray *)peripherals
     29 {
     30     if (_peripherals == nil) {
     31         _peripherals = [NSMutableArray array];
     32     }
     33     return _peripherals;
     34 }
     35 
     36 #pragma mark - 系统方法
     37 - (void)viewDidLoad {
     38     [super viewDidLoad];
     39     
     40     // 2.扫描外设
     41     [self.mgr scanForPeripheralsWithServices:nil options:nil];
     42 }
     43 
     44 /**
     45  *  模拟点击, 连接外设
     46  */
     47 - (void)start
     48 {
     49     for (CBPeripheral *peripheral in self.peripherals) {
     50         // 4.连接设备
     51         [self.mgr connectPeripheral:peripheral options:nil];
     52     }
     53 }
     54 
     55 
     56 #pragma mark - CBCentralManagerDelegate
     57 /**
     58  *  扫描到外设的时候调用
     59  *
     60  *  @param central           中心设备管理对象
     61  *  @param peripheral        外设
     62  */
     63 - (void)centralManager:(CBCentralManager *)central didDiscoverPeripheral:(CBPeripheral *)peripheral advertisementData:(NSDictionary *)advertisementData RSSI:(NSNumber *)RSSI
     64 {
     65     // 3.保存外设
     66     if (![self.peripherals containsObject:peripheral]) {
     67         peripheral.delegate = self;
     68         [self.peripherals addObject:peripheral];
     69     }
     70     
     71 }
     72 
     73 /**
     74  *  连接到外设的时候调用
     75  *
     76  *  @param central           中心设备管理对象
     77  *  @param peripheral        外设
     78  */
     79 - (void)centralManager:(CBCentralManager *)central didConnectPeripheral:(CBPeripheral *)peripheral
     80 {
     81     // 5.扫描外设中的服务
     82     [peripheral discoverServices:nil];
     83 }
     84 
     85 
     86 #pragma mark - CBPeripheralDelegate
     87 /**
     88  *  只要扫描到服务就会调用
     89  *
     90  *  @param peripheral 服务所在的外设
     91  */
     92 - (void)peripheral:(CBPeripheral *)peripheral didDiscoverServices:(NSError *)error
     93 {
     94     
     95     for (CBService *service in peripheral.services) {
     96         if ([service.UUID.UUIDString isEqualToString:@"123"]) {
     97             // 6.扫描指定服务的特征
     98             [peripheral discoverCharacteristics:nil forService:service];
     99         }
    100     }
    101 }
    102 
    103 /**
    104  *  发现特征时调用
    105  *
    106  *  @param peripheral 外设
    107  *  @param service    服务
    108  */
    109 - (void)peripheral:(CBPeripheral *)peripheral didDiscoverCharacteristicsForService:(CBService *)service error:(NSError *)error
    110 {
    111     for (CBCharacteristic *characteristic in service.characteristics) {
    112         // 获取指定特征后进行数据交互
    113         if ([characteristic.UUID.UUIDString isEqualToString:@"888"]) {
    114             NSLog(@"设置闹钟");
    115             // 7.停止扫描
    116             [self.mgr stopScan];
    117         }
    118     }
    119 }
  • 相关阅读:
    java Double数据类型比较大小
    java基础02-标识符和关键字
    java基础01-注释
    java程序运行机制
    面试准备之java异常体系
    双亲委派模型
    java类加载器有哪些?
    什么是字节码?采用字节码的好处是什么?
    如何实现一个ioc容器
    ConcurrentHashMap原理,jdk7和jdk8的区别
  • 原文地址:https://www.cnblogs.com/Rinpe/p/4755184.html
Copyright © 2020-2023  润新知