先上個(gè) Demo 讓大家可以看看
這個(gè) Demo 很簡單,連界面都沒搭,但具體數(shù)據(jù)可以從 XCode 的終端打印出來,這個(gè) Demo 必須真機(jī)調(diào)試,Mac 上的模擬器是作用不了的。
蘋果提供的 CoreBluetooh 框架是很繁瑣的,使用起來比較復(fù)雜,要求大家必須掌握一定的藍(lán)牙知識(shí)(涉及藍(lán)牙開發(fā),掌握一下藍(lán)牙協(xié)議還是很必要的)。為此,我對(duì) CoreBluetooh 進(jìn)行了封裝,讓大家盡量掌握少藍(lán)牙協(xié)議的情況下能進(jìn)行藍(lán)牙開發(fā),且開發(fā)的 API 較簡單。
可以簡單的描述一下藍(lán)牙協(xié)議,藍(lán)牙傳輸數(shù)據(jù),可以看做三層:
第一層是 peripheral(也可能是 central),表明所連接的設(shè)備;
第二層是 service,處于 peripheral 下,意思是 peripheral 之下至少有一個(gè) service;
第三層是 characteristic,每個(gè) service 至少有一個(gè) characteristic。
傳輸數(shù)據(jù)的通道是 characteristic,characteristic可以設(shè)置為接收或者發(fā)送(具體肯定不是這么簡單,但就這樣認(rèn)為也沒什么錯(cuò)誤),接收的 characteristic 可以接收數(shù)據(jù),發(fā)送的 characteristic 可以發(fā)送數(shù)據(jù)。每個(gè) peripheral,service,characteristic 都有自己的 UUID,我們可以根據(jù)他們的 UUID 選擇連接的 peripheral 和 通信的 characteristic。
我個(gè)人寫的封裝 CoreBluetooth 的 ZHBLE 是極其簡單的 API 的,CoreBluetooth 框架連接上外設(shè),至少也得經(jīng)過十個(gè)代理方法以上,而 ZHBLE 對(duì) CBCentralManager 封裝只有兩個(gè)代理,大部分都以 block 的形式封裝起來。我個(gè)人是想把兩個(gè)代理都封裝起來,但這樣做的話,邏輯太不清晰,而且有可能在使用的時(shí)候造成 block 層層嵌套,很麻煩。現(xiàn)在來看一下我寫的 API 吧:
API 的注釋:
- (instancetype)initWithDelegate:(id)delegate;
構(gòu)造函數(shù),設(shè)置 ZHBLECentralManager 的 delegate;
- (void)startScan:(ZHDiscoverPeripheralBlock)ZHDiscoverPeripheral;
開始掃描,掃描得到的外設(shè)保存在數(shù)組里面,即可以從代理中獲取外設(shè)數(shù)組,也可以從 block 中獲??;
- (void)stopScan;
停止掃描
- (void)connectPeripheral:(CBPeripheral*)peripheral fail:(ZHFailConnectPeripheralBlock)failling succeed:(ZHSucceedConnectPeripheralBlock)succeed;
連接某個(gè)外設(shè),注意,取消連接和連接失敗的時(shí)候,信息會(huì)反饋回到 ZHFailConnectPeripheralBlock 上,取消連接也是哦;
- (void)writeData:(NSData*)data periphaler:(CBPeripheral*)peri characteristic:(CBCharacteristic*)characteristic error:(NSError*)error;
向某個(gè)外設(shè)的 characteristic 寫數(shù)據(jù),注意,必須是連接的外設(shè);
- (void)readPeripheral:(CBPeripheral*)peripheral Characteristic:(CBCharacteristic*)characteristic receivedData:(ZHReceivedDataBlock)receivedData;
讀取某個(gè)外設(shè)的? Characteristic 的數(shù)據(jù),注意,必須是連接的外設(shè);
- (void)cancelConnectPeripheral:(CBPeripheral*)peri;
取消某個(gè)外設(shè)的連接。