https://www.jianshu.com/p/f0e4b0e98336より転載
2015年、プロジェクト自身は、Bluetooth 4.0、ブログを書くことを忘れたときに、最近はかなり詳細な見てこのブログを書き、それが再生さを書いたとき、
ワン:はじめに
Bluetoothは、Bluetooth 2.0とBluetooth 4.0を割りました。
ブルートゥース2.0は、Bluetoothはまた、伝統的な古典のBluetoothとして知られ、伝統的なBluetoothのです。
低消費電力のBluetooth 4.0は、それはまた、低消費電力ブルー(BLE)と呼ばれているので、3つの仕様の1セットは、従来のBluetooth技術、高速化技術と低エネルギー技術が含まれます。
この記事では、BLEと関連する問題を解決するために4.0の使用を記載しています。
2:BLE二つのモード
BLEは、ここで、二つのモードCBCentralMannagerセンタモデルとCBPeripheralManager周辺モードに分けて、あなたと開発の主要な中心を共有し、CBCentralMannagerモードを使用しています。
CBCentralMannagerセンタモデル
携帯電話中心として(アプリ)、他の周辺機器のシーンを接続します。次のように詳細なプロセスは次のとおりです。
- 中心的な役割の確立
- スキャン周辺機器
- 周辺ました
- 周辺機器を接続すると、
4.1の接続が失敗した
4.2の切断を
4.3接続に成功しました - スキャン周辺機器サービス
5.1周辺機器の発見やサービスを得ます - スキャン周辺機器に対応するサービスが特長
発見し、対応する周辺サービスを得るために、6.1の機能を
、対応する機能に6.2書き込みデータを - 通知サブスクリプション機能
特性に応じて7.1読み取りデータ
CBPeripheralManagerペリフェラルモード
動作して他のセンターに接続されているシーンの周辺機器として携帯電話を使用してください。
PS:理由は、セキュリティと親密Appleデバイスの、Appleデバイスは、他のBluetoothデバイスへのファイル転送機能とリンクを実行することはできませんので、プログラムのiOSのBluetooth開発センターモデルはCBCentralMannagerプログラミング大半です。
- 設立末梢役割
- 一連のサービスと地元の周辺機器を備え
- 投稿の周辺機器と機能
- ブロードキャスト・サービス
- レスポンスの書き込み要求
- 更新機能値、Subscriptionセンターを送ります
3:BLE開発ステップ
CBCentralMannagerセンターモデルの開発ステップを導入する前に、まず次のように投影する必要があります。
#importを " ESPFBYBLEHelper.h " の#import <CoreBluetooth / CoreBluetooth.h> @interface ESPFBYBLEHelper()<CBCentralManagerDelegate、CBPeripheralDelegate> // センター管理者(接続管理装置及びスキャン) @Property(非アトミック、強い)CBCentralManager * centralManager。 // 記憶装置 @Property(非アトミック、強い)NSMutableArrayの* 周辺機器; // へ走査装置 @Property(非アトミック、強い)cBPeripheral * cbPeripheral; // 周辺ステータス@Property(非アトミック、ASSIGN)CBManagerState peripheralState; @end // ブルートゥース4.0デバイス名の静的 NSStringの*のconstの = kBlePeripheralName @ " lighte290 " ; // 通知サービス 静的 NSStringの* constの kNotifyServerUUID = @ " FF03 " ; // サービスを書いて 、静的 NSStringの* constの kWriteServerUUID = @ " FFFF " ; // 通知固有値 静的 NSStringの* constの kNotifyCharacteristicUUID = @ " FF05 " ; // 固有値を書く 静的 NSStringの* constの kWriteCharacteristicUUID = @" FF08 "; @implementation ESPFBYBLEHelper
それはフレームワークをインポートする必要がありますCoreBluetooth
#import <CoreBluetooth / CoreBluetooth.h>
コンプライアンスCBCentralManagerDelegate、CBPeripheralDelegate契約
@interface ESPFBYBLEHelper()<CBCentralManagerDelegate、CBPeripheralDelegate>
次のようにBluetoothは、状態を検出することが必要です:
// 呼び出されたときに更新 - (無効)centralManagerDidUpdateState:(CBCentralManager * )中央 { スイッチ(central.state){ ケースCBManagerStateUnknown:{ のNSLog(@ " の状態で知られているように" ); self.peripheralState = central.state; } BREAK ; ケースCBManagerStateResetting: { のNSLog("@ 状態をリセット" ); self.peripheralState = central.state; } BREAK 。 ケースCBManagerStateUnsupported: { のNSLog(@ " サポートされていない状態" ); self.peripheralState = central.state; } BREAK ; 場合CBManagerStateUnauthorized: { のNSLog("@ 無許可状態" ); self.peripheralState = central.state; } BREAK ; ケースCBManagerStatePoweredOff: { のNSLog(@ " オフ状態" ); self.peripheralState = central.state。 } ブレーク; ケースCBManagerStatePoweredOn: { のNSLog(@ " 开启状态-可用状态" )。 self.peripheralState = central.state。 NSLog(@ " %ldの"、(長い)self.peripheralState)。 } ブレーク; デフォルト: 休憩; } }
追加のプロパティと定数は、一定の必要性は、独自のプロジェクトに応じて設定されます。
次のようにここで一つだけのステップは、実装工程に応じて実装することができ、コアのコードは次のとおり
1.中心的な役割を確立
self.centralManager = [[CBCentralManagerのalloc] initWithDelegate:自己キュー:nilを];
2.スキャン周辺機器
もし(self.peripheralState == CBManagerStatePoweredOn){ [:ゼロオプション:self.centralManagerのscanForPeripheralsWithServicesニル]。 }
3.ペリフェラルが見つかりました。
/ * * する走査装置 中央センタマネージャ@param 走査する@param周辺装置を @param advertisementData広告情報 @param RSSI信号強度を * / - (ボイド)centralManager:(CBCentralManager *)中央didDiscoverPeripheral:(CBPeripheral *)周辺advertisementData :(NSDictionaryの<NSStringの*、ID > *)advertisementData RSSI:(*のNSNumber )RSSI { のNSLog("@ %の@ "、[NSStringのstringWithFormat:@ " デバイスを検出、デバイス名:%の@ " 、peripheral.name])。 }
4.ペリフェラルコネクタ
[self.centralManager connectPeripheral:周辺オプション:なし]。
- 4.1接続はdidFailToConnectPeripheralを失敗しました
/ * * 接続が失敗 @param中央管理センター 装置@param周辺接続失敗 @paramエラーエラー * / - (ボイド)centralManager:(CBCentralManager *)中央didFailToConnectPeripheral:(CBPeripheral *)周辺エラー:(NSError * )エラー { のNSLog("@ %の@ "、@ " 接続に失敗しました" ); }
- 4.2外し
/ * * 切断 @param中央センタマネージャ @param周辺デバイスが切断され @paramエラーエラー * / ( - ボイド(CBCentralManager *)中央didDisconnectPeripheral:(CBPeripheral *)周辺誤差(* NSError)centralManager )エラー { のNSLog(@ " %の@ "、"@ 切断" ); }
- 4.3接続は成功です
/ * * 接続が成功し 、中央センタマネージャ@param @param周辺機器の接続成功 * / ( - 無効(CBCentralManager *)中央didConnectPeripheral:(CBPeripheral *)centralManager )周辺 { のNSLog(@ " 接続されたデバイス:成功@%" 、peripheral.name); [self.centralManager stopScan]; }
スキャンサービス周辺機器
//は、デバイスエージェントを設定する ペリフェラル。デリゲート = セルフ; // サービス:ゼロの代理がすべての着信サービススキャン [周辺discoverServices:nilを];
サービスを発見し、取得する5.1周辺機器
/ * * スキャンサービス @param周辺機器サービスに対応する @paramエラースキャンエラー * / - (ボイド)周辺:(CBPeripheral *)周辺didDiscoverServices:(NSError * )エラー { // サービスの全てを反復 するための(CBServiceを* -service でperipheral.services) { のNSLog(@ " サービスた:%@ " 、service.UUID.UUIDString); } }
6.周辺スキャン対応機能とサービス
// 対応するサービスを取得 IF(![:kWriteServerUUID isEqualToStringとしてService.UUID.UUIDString]) { リターン; } // 走査するサービス機能を [:forServiceゼロ末梢discoverCharacteristicsサービス ]。
発見し、対応するサービスの特徴を得るために6.1周辺機器
/ * * スキャンし、対応する機能は 、周辺機器@param 対応やサービス@paramサービス機能を @paramエラーエラー * / - (無効)周辺:(CBPeripheral *)周辺didDiscoverCharacteristicsForService:(CBService *)エラー・サービス:(NSError * )エラー { のNSLog(@ " %の@ " 、ペリフェラル); }
対応する特性に6.2書き込みデータ
[周辺writeValue:データforCharacteristic:特性タイプ:CBCharacteristicWriteWithResponse]。
7.サブスクリプション通知機能
もし([characteristic.UUID.UUIDString isEqualToString:kNotifyCharacteristicUUID]){ [周辺setNotifyValue:YES forCharacteristic:特性]。 }
特徴によれば、データはdidUpdateValueForCharacteristic 7.1を読みます
/ * * 特徴によれば、データを読み出し 、読み出しに対応する周辺機器データ@param @param特徴を エラーエラー@param * / - (ボイド)周辺:(CBPeripheral *)周辺didUpdateValueForCharacteristic:(NULLでないCBCharacteristic *に与える)特性誤差を: (空白可能NSError * )エラー { IF ([isEqualToStringとしてcharacteristic.UUID.UUIDString:kNotifyCharacteristicUUID]) { たNSData *データ= characteristic.value; のNSLog(@ " %の@ " 、データ); } }