[swift] BLEデバイスの識別方法
BLEデバイスからアドバタイジングパケットを受信するだけだと、完全な個体識別はできない。
BLEデバイスと一度接続して、シリアル番号なり、個体識別する情報を取得する必要がある。(以後、ここではシリアル番号で個体識別すると仮定する)
一度シリアル番号を入手した場合、ペリフェラルのUUIDとシリアル番号を紐づけて記録しておく。ペリフェラルのUUIDはアドバタイジングパケットの中に入っているので、次からアドバタイジングパケットの受信のみで個体識別ができる。
BLEデバイスと一度接続して、シリアル番号なり、個体識別する情報を取得する必要がある。(以後、ここではシリアル番号で個体識別すると仮定する)
一度シリアル番号を入手した場合、ペリフェラルのUUIDとシリアル番号を紐づけて記録しておく。ペリフェラルのUUIDはアドバタイジングパケットの中に入っているので、次からアドバタイジングパケットの受信のみで個体識別ができる。
- 初回接続時
- デバイスと接続して、シリアル番号を取得
let BLE_SERIAL_NUMBER = CBUUID(string: "2a25") // read - シリアル番号と、ペリフェラルのUUIDを記録 class BLEDeviceIDTable : Object {
- 2回目以降の接続時
- アドバタイジングパケット受信時に、ペリフェラルのUUIDが記録されているか確認 let realm = try! Realm()
- 記録されていたら、シリアル番号を取得して個体識別
dynamic var uuid : String = ""
dynamic var serial : String = ""
}
- func saveDeviceID(uuid : String, serial : String) -> Void {
- let realm = try! Realm()
- let usr = realm.objects(BLEDeviceIDTable.self).filter( "uuid = '\(uuid)'" )
- if( usr.count == 0 ){
- try! realm.write() {
- realm.create(BLEDeviceIDTable.self, value: [uuid, serial])
- }
- }
- }
let usr = realm.objects(BLEDeviceIDTable.self).filter( "uuid = '\(peripheral.identifier.uuidString)'" )
if( usr.count != 0 ){
newDevice.id = usr[0].serial
}
コメント
コメントを投稿