[swift] BLEデバイスの識別方法

BLEデバイスからアドバタイジングパケットを受信するだけだと、完全な個体識別はできない。
BLEデバイスと一度接続して、シリアル番号なり、個体識別する情報を取得する必要がある。(以後、ここではシリアル番号で個体識別すると仮定する)

一度シリアル番号を入手した場合、ペリフェラルのUUIDとシリアル番号を紐づけて記録しておく。ペリフェラルのUUIDはアドバタイジングパケットの中に入っているので、次からアドバタイジングパケットの受信のみで個体識別ができる。


  1. 初回接続時
    1. デバイスと接続して、シリアル番号を取得
      let BLE_SERIAL_NUMBER = CBUUID(string: "2a25") // read  
    2. シリアル番号と、ペリフェラルのUUIDを記録
    3. class BLEDeviceIDTable : Object {
          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]) 
              } 
          } 
      }
  2. 2回目以降の接続時
    1. アドバタイジングパケット受信時に、ペリフェラルのUUIDが記録されているか確認
    2. let realm = try! Realm()
      let usr = realm.objects(BLEDeviceIDTable.self).filter( "uuid = '\(peripheral.identifier.uuidString)'" )
      if( usr.count != 0 ){
          newDevice.id = usr[0].serial
      }
    3. 記録されていたら、シリアル番号を取得して個体識別

コメント

人気の投稿