BLE设备自动在设备端连接后APP如何与设备连接

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

BLE设备自动在设备端连接后APP如何与设备连接原文地址:peripherial依照箭頭方向由上而下為順序依序完成Discover、Connect流程。CBCentralManager使用CoreBluetoothFramework中,主要管理連線的是CBCentralManager這個Object,它掌控整個BLE狀態的管理,使用時要先對CBCentralManager初始化://-----------start-----------CBCentralManager*CM=[[CBCentralManageralloc]initWithDelegate:selfqueue:nil];//------------end------------現在就開始往下介紹。centralManagerDidUpdateState在一開始宣告初CBCentralManager時就有指定Delegate為self,並且必需要在.h內加上Delegate宣告://-----------start-----------@interfaceTestCoreBluetooth:NSObjectCBCentralManagerDelegate{:::}//------------end------------宣告完成後,再加入centralManagerDidUpdateState這個Delegate內容,//-----------start------------(void)centralManagerDidUpdateState:(CBCentralManager*)cManager{NSMutableString*nsmstring=[NSMutableStringstringWithString:@UpdateState:];BOOLisWork=FALSE;switch(cManager.state){caseCBCentralManagerStateUnknown:[nsmstringappendString:@Unknown\n];break;caseCBCentralManagerStateUnsupported:[nsmstringappendString:@Unsupported\n];break;caseCBCentralManagerStateUnauthorized:[nsmstringappendString:@Unauthorized\n];break;caseCBCentralManagerStateResetting:[nsmstringappendString:@Resetting\n];break;caseCBCentralManagerStatePoweredOff:[nsmstringappendString:@PoweredOff\n];if(connectedPeripheral!=NULL){[CMcancelPeripheralConnection:connectedPeripheral];}break;caseCBCentralManagerStatePoweredOn:[nsmstringappendString:@PoweredOn\n];isWork=TRUE;break;default:[nsmstringappendString:@none\n];break;}NSLog(@%@,nsmstring);[delegatedidUpdateState:isWorkmessage:nsmstringgetStatus:cManager.state];}//------------end------------centralManagerDidUpdateState的Delegate是用來得知藍牙目前的狀態,所以會有個結果是用來判斷iDevice是否支援BLE,因為BLE是在iphone4s、NewiPad之後才有的,現階段還是需要偵測使用的環境,當然可以根據這些狀態的口報來決定APP的功能或其他提示使用者的動作。scanForPeripheralsWithServices先前確定周邊支援BLE且運作正常後,我們就要來開啟BLE搜尋功能來尋找BLE的週邊,當週邊接收到搜尋功能的廣播訊息時,依照BLE通訊規範,週邊會在一定時間內回覆,所以我們在此可以設定2秒的Timer計時器,當時間一到就停止scan的功能。//-----------start-----------CBCentralManager*CM=[[CBCentralManageralloc]initWithDelegate:selfqueue:nil];[CMscanForPeripheralsWithServices:niloptions:options];[NSTimerscheduledTimerWithTimeInterval:2.0ftarget:selfselector:@selector(scanTimeout:)userInfo:nilrepeats:NO];//------------end------------設定2秒後觸發執行scanTimeoutmethod,再將scanForPeripheralsWithServices的值設為nil,代表搜尋的Servicetype不受限制,當你搜尋特定時,就必需要將它的UUID填入,像範例這樣://-----------start-----------NSArray*uuidArray=[NSArrayarrayWithObjects:[CBUUIDUUIDWithString:@180D],nil];[CMscanForPeripheralsWithServices:uuidArrayoptions:options];//------------end------------其中UUIDWithString:@180D的180D就是HeartRateServicetype,一旦指定Servicetype,結果就只會將週邊有HeartRate類型一一列出來,要了解更多的ServiceType可以到Bluetooth官網查詢。當您了解Servicetype是哪一種類型時就可以來做對應的流程及資料的解析,也可以製作出符合一般標準週邊的通用APP。didDiscoverPeripheraldidDiscoverPeripheral屬於Delegate功能,所以要按照它預設的宣告將要處理的過程寫在裡面,格式如下://-----------start------------(void)centralManager:(CBCentralManager*)centraldidDiscoverPeripheral:(CBPeripheral*)peripheraladvertisementData:(NSDictionary*)advertisementDataRSSI:(NSNumber*)RSSI{//處理過程}//------------end------------advertisementData會報告可以連線的週邊內容,如果將它印出來會像這樣://-----------start-----------adverisement:{kCBAdvDataLocalName=INFOS4090v35.05;kCBAdvDataServiceUUIDs=(Unknown(fff0));kCBAdvDataTxPowerLevel=0;}//------------end------------RSSI是訊號的強度,是以NSNumberObject存在,取得後可以依照NSNumber的方式整數值做處理與轉換,接下來我們將一些資訊列印出來,整個範例可以是這樣子://-----------start------------(void)centralManager:(CBCentralManager*)centraldidDiscoverPeripheral:(CBPeripheral*)peripheraladvertisementData:(NSDictionary*)advertisementDataRSSI:(NSNumber*)RSSI{NSMutableString*nsmstring=[NSMutableStringstringWithString:@\n];[nsmstringappendString:@PeripheralInfo:];[nsmstringappendFormat:@NAME:%@\n,peripheral.name];[nsmstringappendFormat:@RSSI:%@\n,RSSI];if(peripheral.isConnected){[nsmstringappendString:@isConnected:connected];}else{[nsmstringappendString:@isConnected:disconnected];}NSLog(@adverisement:%@,advertisementData);[nsmstringappendFormat:@adverisement:%@,advertisementData];[nsmstringappendString:@didDiscoverPeripheral\n];NSLog(@%@,nsmstring);}//------------end------------結果輸出://-----------start-----------2013-02-2514:43:17.243gw-health-01[141:907]PeripheralInfo:NAME:INFOS4090v35.05RSSI:-69isConnected:disconnectedadverisement:{kCBAdvDataServiceUUIDs=(Unknown(fff0));}//------------end------------如果有發現可連線的BLE週邊,它就會不斷的執行didDiscoverPeripheral,並將資訊傳入,利用這個方式將每次得到的結果存入Array,就可以得到搜尋周邊的結果然後再提供給USER選擇,或是從中可以去判斷某個特別的週邊是否存在而決定要不要連線。stopScan執行scanForPeripheralsWithServices掃描周邊設定2秒的Timer,當時間到時就停止scan,一般2秒內無反應就可以當作是沒有其他週邊回應,承上面scanForPeripheralsWithServices中有設定Timer去呼叫scanTimeout,所以將stopScan寫在scanTimeout裡面://-----------start------------(void)scanTimeout:(NSTimer*)timer{if(CM!=NULL){[CMstopScan];}else{NSLog(@CMisNull!);}NSLog(@scanTimeout);}//------------end------------connectPeripheraldidDiscoverPeripheral得到的BLE週邊列表讓User選擇要連線的BLE,再將CBPeripheral傳入connectPeripheral進行連線,格式://-----------start-----------[CBCentralManagerconnectPeripheral:CBPeripheral*options:NSDictionary*]//------------end------------在此將

1 / 24
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功