zoukankan      html  css  js  c++  java
  • 蓝牙4.0实现及原理

    /*

     建⽴立中⼼心设备

     扫描外设(Discover Peripheral)

     连接外设(Connect Peripheral)

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

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

     断开连接(Disconnect)

     */

     

    #import "ViewController.h"

    #import <CoreBluetooth/CoreBluetooth.h>

     

    @interface ViewController ()<CBCentralManagerDelegate,CBPeripheralDelegate>

    //所有扫描外设的列表

    @property(nonatomic,strong)NSMutableArray*peripherals;

    //创建蓝牙管理工具 中心设备

    @property(nonatomic,strong)CBCentralManager*manager;

    //服务信息(心率跳动次数)

    @property(nonatomic,strong)CBCharacteristic*characteristicHeart;

     

     

    @end

     

    @implementation ViewController

     

    -(CBCentralManager*)manager

    {

        if (!_manager) {

            _manager=[[CBCentralManager alloc]init];

        }

        return _manager;

    }

    -(NSMutableArray*)peripherals

    {

        if (!_peripherals) {

            _peripherals=[[NSMutableArray alloc]init];

        }

        return _peripherals;

    }

     

    - (void)viewDidLoad {

        [super viewDidLoad];

        //2.扫描外设

        //  可以扫描指定的服务或者特性 [数组里传UUID唯一标识

        [self.manager scanForPeripheralsWithServices:@[@"778899"] options:nil];

        //  可以扫描所有的设备

        [self.manager scanForPeripheralsWithServices:nil options:nil];

        //设置代理,获取扫描产生的设备

        self.manager.delegate=self;

        

        //3.连接外设 可以设置btn点击连接外设

        for (CBPeripheral *per in self.peripherals) {

            [self.manager connectPeripheral:per options:nil];

            //设置外设代理,用于信息交互

            per.delegate=self;

        }

        

        

        

        

        

    }

     

    #pragma mark CBCentralManagerDelegate

    //扫描外部设备就会调用

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

    {

        //peripheral 外设 如果存在就不添加

        if(![self.peripherals containsObject:peripheral])

        {

            [self.peripherals addObject:peripheral];

        }

        

    }

    //4 一旦连接到外设 扫描服务信息

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

    {

        //扫描服务

        [peripheral discoverServices:@[@"123456"]];

    }

     

     

     

    //中心设备状态更新调用

    -(void)centralManagerDidUpdateState:(CBCentralManager *)central

    {

        NSLog(@"扑捉当前中心设备的状态!");

    }

     

    #pragma mark CBPeripheralDelegate

    //外设扫描到服务调用

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

    {

        for (CBService *service in peripheral.services) {

            [peripheral discoverCharacteristics:@[@"222222"] forService:service];

        }

    }

    //扫描到服务中的特性的时候调用

     

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

    {

        for (CBCharacteristic *character in service.characteristics) {

            

            if ([character .UUID.UUIDString isEqualToString:@"222222"]) {

                self.characteristicHeart=character;

                NSLog(@"记录查到的特性");

            }

        }

    }

     

     

     

     

     

    -(void)dealloc

    {

        

    }

     

     

     

     

     

     

    @end

  • 相关阅读:
    关于hive Metadata 使用 MsSQL
    hdp 2.06 安装备忘
    对于自我管理 ObjectContextManager的测试
    关于 Linq to EF 的内存泄漏问题
    使用过多的递归出现错误,“System.StackOverflowException”类型的未经处理的异常在 mscorlib.dll 中发生
    PowerShell 如何 远程连接【转】
    win7系统浏览器老是自动弹出网页怎么办
    win10如何深度清理C盘
    Win7电脑系统崩溃怎么解决?
    win7磁盘打不开如何解决
  • 原文地址:https://www.cnblogs.com/tangranyang/p/4659531.html
Copyright © 2011-2022 走看看