IOS 蓝牙2

上节我们说了蓝牙的基本连接但是用在实际生产中基本连接肯定是不行的!所以这篇文章大概讲了ios蓝牙在实际生产时所运用到的技术。
1.首先我们来补充写入数据

// 外设为特征订阅通知 数据会进入  写入前开启订阅peripheral:didUpdateValueForCharacteristic:error:方法
    [peripheral setNotifyValue:YES forCharacteristic:characteristic];


//data是以字节的形式写入 其实你也可以选择自定义一个方法这样就方便多了
 [peripheral writeValue:data // 写入的数据
             forCharacteristic:characteristic // 写给哪个特征
                          type:CBCharacteristicWriteWithResponse];// 通过此响应记录是否成功写入
在写入时你最好判断下
 if (characteristic.properties & CBCharacteristicPropertyWrite) {
        // 核心代码在这里
        [peripheral writeValue:data // 写入的数据
             forCharacteristic:characteristic // 写给哪个特征
                          type:CBCharacteristicWriteWithResponse];// 通过此响应记录是否成功写入
    }
//取消订阅
peripheral:didUpdateValueForCharacteristic:error:方法
    [peripheral setNotifyValue:no forCharacteristic:characteristic];

接下来就是本片文章的重点了
1.我蓝牙连接了然后因为距离的原因怎样自动连接呢?
开始我会想非自然断开连接会走代理啊。我直接在代理里面重新连接就可以了啊!
这种方法当然可行!但是!但是!这种方法仅仅限于在手机的周围只有一个蓝牙设备。 怎样优化呢??
设备不是有名字嘛?我按照它的名字连接不就可以了嘛?但是如果有多台相同名字的设备呢????这时需要和硬件工程师沟通 让他在广播里面加上mac地址 每台设备的物理地址都不一样我每次只需要将mac地址保存在本地每次连接时 用mac地址用作判断的依据来找到我想要连接的设备。(ios 是不能通过代码获取mac地址的必需由硬件工程师提供不管艺怎样的形式给你).

2,怎样通过代码来获取设备与手机的距离呢?
1.这是你应该会想到RSSI?
RSSI 是什么鬼???
rssi 是信号强度
通过读取会走代理
但是信号肯定是不稳定的啊 温度 隔离 大气中的电磁波 等等(电磁波我都知道天哪!!!以前我是学电的 哈哈)
所以我们需要采取多个rssi区平均值或者 大雨某个值的次数来判断

- (void)peripheral:(CBPeripheral *)peripheral didReadRSSI:(NSNumber *)RSSI error:(nullable NSError *)error NS_AVAILABLE(NA, 8_0){
    
}

3.如果你要封装连接类 记住用单例。
4.写入数据时一定要判断是否存在也就是要判断是否连接不然会崩!!
5.蓝牙涉及到很多进制转换 所以这个基本工 你要学会
6.OTA空中升级。。。以后有空我在写一篇文章这个内容有点多这里就不写了。

基本就这样了还有些实际的问题需要到家实际运用才会明白。

你可能感兴趣的:(IOS 蓝牙2)