美文网首页
iOS之BLE开发如何多台设备确定唯一设备

iOS之BLE开发如何多台设备确定唯一设备

作者: 轮子糙 | 来源:发表于2017-11-01 18:12 被阅读144次

    因为项目需要,通过手机蓝牙连接门锁,我们需要连接指定设备,因此就需要我们拿到能够代表特定的蓝牙设备的唯一标识,通过唯一标识来确认是哪一台蓝牙设备。
      在CoreBluetooth系统框架中,我们能够看到当我们通过中心模式扫描到蓝牙设备的时候,我们可以获取到以下的一些属性:蓝牙设备的名字、信号强度、状态、服务、标志符。

    //蓝牙设备的名字  
    @property(retain, readonly, nullable) NSString *name;  
    //蓝牙设备的信号强度  
    @property(retain, readonly, nullable) NSNumber *RSSI NS_DEPRECATED(NA, NA, 5_0, 8_0);  
    //蓝牙设备是否连接的状态  
    /** 
            断开连接 
        CBPeripheralStateDisconnected = 0, 
            正在连接 
        CBPeripheralStateConnecting, 
            已经连接 
        CBPeripheralStateConnected, 
            正在断开连接 
        CBPeripheralStateDisconnecting 
    */  
    @property(readonly) CBPeripheralState state;  
    //蓝牙设备包含的服务  
    @property(retain, readonly, nullable) NSArray<CBService *> *services;  
    //继承于父类CBPeer的identifier的标识符属性  
    @property(readonly, nonatomic) NSUUID *identifier NS_AVAILABLE(NA, 7_0);
    

    方式一 通过蓝牙外设的UUIDString区分唯一设备
    对于同一台蓝牙设备,我的手机进行扫描,然后读取它的UUIDString,和你的手机进行扫描,获取到的UUIDString是不同的。所以无法区分确定唯一性

    方式二 蓝牙外设的name属性不一致
    -(void)centralManager:(CBCentralManager *)central didDiscoverPeripheral:(CBPeripheral *)peripheral advertisementData:(NSDictionary<NSString *, id> *)advertisementData RSSI:(NSNumber *)RSSI;
    通过此代理我们可以获取到peripheral.name进行唯一设备对比然后进行连接,此方案必须要硬件出厂时写入蓝牙名字都不一致同时录入后台系统。

    方式三 蓝牙外设的名字都相同,但是还是需要确定连接唯一设备,那就只能杀手锏了mac地址

    • 获取方法1:将mac地址放在蓝牙设备的广播数据之中,然后在广播的时候,将mac地址以广播的形式发送出来以供我们获取。
    • 获取方法2:将mac地址写在某一个特征通道中,当我们连接蓝牙设备之后,通过某一个特征通道来获取mac地址。
    • 获取方法3:通过对蓝牙设备service的characteristic特征值,进行截图和拼接,具体方法见此博客----MacPu博客

    ********将来的你一定会感激现在拼命的自己,愿每一个努力的人都能有收获!********
    我的传送门: 个人博客 CSDN github
    微信公众号:搞事情的程序猿

    相关文章

      网友评论

          本文标题:iOS之BLE开发如何多台设备确定唯一设备

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