zoukankan      html  css  js  c++  java
  • BlueTooth作为center使用总结

    概述

    每个外部蓝牙设备有自己的UUID。

    每个蓝牙设备可能有多个server,每个server可能有多个characteristic,每个server和characteristic都有自己的UUID。

    建立centerManager

    myCentralManager = [[CBCentralManager alloc] initWithDelegate:self queue:nil]
    

    扫描外部设备

    1.开始扫描:

    [myCentralManager scanForPeripheralsWithServices:nil options:nil];
    

    2.扫描到设备:

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

    其中,peripheral中包括identifier、name、isConnected和state。可以保存此peripheral,也可以只保存它的identifier,然后在需要时使retrievePeripheralsWithIdentifiers获取peripheral。此时peripheral很可能还不包含它的services。

    advertisementData包括一些其他信息,设备自定义的广播信息也可以在其中:

    NSData *data = [advertisementData objectForKey:CBAdvertisementDataManufacturerDataKey];

    3.结束扫描:

    [myCentralManager stopScan];
    

    连接设备

    1.启动连接设备

    [mTsInstance.centralManager connectPeripheral:mThisPeripheral options:nil];
    

     2.连接成功回调。在这里启动搜寻设备的服务

    -(void)centralManager:(CBCentralManager *)central didConnectPeripheral:(CBPeripheral *)peripheral
    {
        [peripheral discoverServices:nil];
    }
    

     3.发现设备的服务后回调。服务存放在peripheral.services中,可以遍历所有server,通过UUID找到自己需要的server。然后搜寻该server的characteristics

    - (void)peripheral:(CBPeripheral *)peripheral didDiscoverServices:(NSError *)error
    {
        NSArray *services = peripheral.services;
        CBService *service = services[0];
        
        [peripheral discoverCharacteristics:nil forService:services[0]];
    }
    

     4.发现服务的特征后回调。特征放在service.characteristics中,可以遍历所有的characteristics,通过UUID找到自己需要的特征。并保存该特征以便读写等操作。 

    -(void)peripheral:(CBPeripheral *)peripheral didDiscoverCharacteristicsForService:(CBService *)service error:(NSError *)error{
        for (CBCharacteristic *ch in service.characteristics)
        {
            if ([ch.UUID isEqual:[CBUUID UUIDWithString:@"XXXXX"]])
            {
                //save the characteristic
            }
        }
    }
    

    与设备通信-读写

    - (void)readValueForCharacteristic:(CBCharacteristic *)characteristic
    - (void)writeValue:(NSData *)data forCharacteristic:(CBCharacteristic *)characteristic type:(CBCharacteristicWriteType)type
    
  • 相关阅读:
    【转】C#中的虚方法
    【转】ASP.NET 2.0中Page事件的执行顺序
    OWC ChartSpace控件的使用
    Ext对基本类型的扩展
    OWC PivotTable的使用方法
    .net中线程同步的典型场景和问题(1)
    python中使用汉字
    如何取消后台线程的执行
    yaffs2根文件系统的构建过程
    Fuck self.delegate = self
  • 原文地址:https://www.cnblogs.com/zhongriqianqian/p/3978828.html
Copyright © 2011-2022 走看看