上節(jié)我們說了藍(lán)牙的基本連接但是用在實(shí)際生產(chǎn)中基本連接肯定是不行的!所以這篇文章大概講了ios藍(lán)牙在實(shí)際生產(chǎn)時所運(yùn)用到的技術(shù)铸董。
1.首先我們來補(bǔ)充寫入數(shù)據(jù)
// 外設(shè)為特征訂閱通知 數(shù)據(jù)會進(jìn)入 寫入前開啟訂閱peripheral:didUpdateValueForCharacteristic:error:方法
[peripheral setNotifyValue:YES forCharacteristic:characteristic];
//data是以字節(jié)的形式寫入 其實(shí)你也可以選擇自定義一個方法這樣就方便多了
[peripheral writeValue:data // 寫入的數(shù)據(jù)
forCharacteristic:characteristic // 寫給哪個特征
type:CBCharacteristicWriteWithResponse];// 通過此響應(yīng)記錄是否成功寫入
在寫入時你最好判斷下
if (characteristic.properties & CBCharacteristicPropertyWrite) {
// 核心代碼在這里
[peripheral writeValue:data // 寫入的數(shù)據(jù)
forCharacteristic:characteristic // 寫給哪個特征
type:CBCharacteristicWriteWithResponse];// 通過此響應(yīng)記錄是否成功寫入
}
//取消訂閱
peripheral:didUpdateValueForCharacteristic:error:方法
[peripheral setNotifyValue:no forCharacteristic:characteristic];
接下來就是本片文章的重點(diǎn)了
1.我藍(lán)牙連接了然后因?yàn)榫嚯x的原因怎樣自動連接呢愕撰?
開始我會想非自然斷開連接會走代理啊扳躬。我直接在代理里面重新連接就可以了昂趾伞铅辞!
這種方法當(dāng)然可行熙含!但是谒府!但是粗梭!這種方法僅僅限于在手機(jī)的周圍只有一個藍(lán)牙設(shè)備争便。 怎樣優(yōu)化呢?断医?
設(shè)備不是有名字嘛滞乙?我按照它的名字連接不就可以了嘛奏纪?但是如果有多臺相同名字的設(shè)備呢?斩启?序调??這時需要和硬件工程師溝通 讓他在廣播里面加上mac地址 每臺設(shè)備的物理地址都不一樣我每次只需要將mac地址保存在本地每次連接時 用mac地址用作判斷的依據(jù)來找到我想要連接的設(shè)備兔簇。(ios 是不能通過代碼獲取mac地址的必需由硬件工程師提供不管藝怎樣的形式給你).
2发绢,怎樣通過代碼來獲取設(shè)備與手機(jī)的距離呢?
1.這是你應(yīng)該會想到RSSI?
RSSI 是什么鬼垄琐?边酒??
rssi 是信號強(qiáng)度
通過讀取會走代理
但是信號肯定是不穩(wěn)定的啊 溫度 隔離 大氣中的電磁波 等等(電磁波我都知道天哪@昃健I醺佟!以前我是學(xué)電的 哈哈??)
所以我們需要采取多個rssi區(qū)平均值或者 大雨某個值的次數(shù)來判斷
- (void)peripheral:(CBPeripheral *)peripheral didReadRSSI:(NSNumber *)RSSI error:(nullable NSError *)error NS_AVAILABLE(NA, 8_0){
}
3.如果你要封裝連接類 記住用單例朦前。
4.寫入數(shù)據(jù)時一定要判斷是否存在也就是要判斷是否連接不然會崩!鹃操!
5.藍(lán)牙涉及到很多進(jìn)制轉(zhuǎn)換 所以這個基本工 你要學(xué)會
6.OTA空中升級韭寸。。荆隘。以后有空我在寫一篇文章這個內(nèi)容有點(diǎn)多這里就不寫了恩伺。
基本就這樣了還有些實(shí)際的問題需要到家實(shí)際運(yùn)用才會明白。