iBeacon Bluetooth 프로파일이란 무엇입니까


150

블루투스 저에너지 개발 키트로 iBeacon을 직접 만들고 싶습니다. Apple은 아직 iBeacons에 대한 사양을 발표하지 않았지만 일부 하드웨어 개발자는 AirLocate 샘플 코드에서 iBeacon을 리버스 엔지니어링하여 iBeacon 개발 키트 판매를 시작했습니다.

그렇다면 iBeacon Bluetooth 프로파일은 무엇입니까?

Bluetooth 저에너지는 LE 프로파일 서비스 검색에 GATT를 사용합니다. 따라서 속성 핸들, 속성 유형, 속성 값 및 iBeacon 속성의 속성 권한을 알아야합니다. 따라서 UUID가 E2C56DB5-DFFB-48D2-B060-D0F5A71096E0 인 iBeacon의 주요 값은 1이고 최소 값은 1입니다. Bluetooth GATT 프로파일 서비스는 무엇입니까?

다음은 Apple 포럼과 문서를 통해 얻은 몇 가지 가정입니다.

  1. Bluetooth 주변 장치의 프로필 서비스 (GATT) 만 iBeacon임을 알기 만하면됩니다.

  2. 메이저 및 마이너 키는이 프로파일 서비스의 어딘가에 인코딩됩니다

iBeacon Dev Kits를 보유한 일부 회사는 이미이 수치를 알고있는 것으로 보입니다.

잘만되면 우리는 다음과 같이 Bluetooth.org에 프로파일을 게시 할 것입니다 : https://www.bluetooth.org/en-us/specification/adopted-specifications


실제로 지금은 4 가지 속성 값이 있습니다.
PaulWoodIII

@ Dan1One Light Blue를 사용하여 서비스를 복제 한 다음 Apple의 AirLocate 샘플 코드를 사용하여 복제 된 서비스의 범위를 정할 수 없었습니다. 또한 추가 된 것으로 생각됩니다. 또한 Light Blue에는 속성 핸들이 나열되어 있지 않습니다.
PaulWoodIII

CBPeripheralManager (백그라운드에서 실행) 또는 다른 (iOS 이외의) 소프트웨어 또는 하드웨어를 사용하여 iBeacon을 생성하는 방법을 찾고 있습니까? 이것은 필요한 세부 사항으로 이어질 것입니다.
Wain

@ 첫 번째 단락 노트로 내 하드웨어에 넣으려고합니다. 내가 링크 된 질문에서 언급 한 바와 같이 그러나 그것은 잠재적으로 백그라운드에서 아이 비콘 광고 CBPeripheralManager 사용하여 링크 된 질문의 대답에 도움이 될 수있다
PaulWoodIII

1
큰! 미래의 프로그래머들을
위해이

답변:


228

RSSI의 ProximityUUID E2C56DB5-DFFB-48D2-B060-D0F5A71096E0, major 0, minor 0및 보정 된 Tx Power 를 갖춘 iBeacon의 -59경우 전송 된 BLE 알림 패킷은 다음과 같습니다.

d6 be 89 8e 40 24 05 a2 17 6e 3d 71 02 01 1a 1a ff 4c 00 02 15 e2 c5 6d b5 df fb 48 d2 b0 60 d0 f5 a7 10 96 e0 00 00 00 00 c5 52 ab 8d 38 a5

이 패킷은 다음과 같이 분류 할 수 있습니다.

d6 be 89 8e # Access address for advertising data (this is always the same fixed value)
40 # Advertising Channel PDU Header byte 0.  Contains: (type = 0), (tx add = 1), (rx add = 0)
24 # Advertising Channel PDU Header byte 1.  Contains:  (length = total bytes of the advertising payload + 6 bytes for the BLE mac address.)
05 a2 17 6e 3d 71 # Bluetooth Mac address (note this is a spoofed address)
02 01 1a 1a ff 4c 00 02 15 e2 c5 6d b5 df fb 48 d2 b0 60 d0 f5 a7 10 96 e0 00 00 00 00 c5 # Bluetooth advertisement
52 ab 8d 38 a5 # checksum

이 패킷의 핵심 부분은 다음과 같이 분류 할 수있는 Bluetooth 광고입니다.

02 # Number of bytes that follow in first AD structure
01 # Flags AD type
1A # Flags value 0x1A = 000011010  
   bit 0 (OFF) LE Limited Discoverable Mode
   bit 1 (ON) LE General Discoverable Mode
   bit 2 (OFF) BR/EDR Not Supported
   bit 3 (ON) Simultaneous LE and BR/EDR to Same Device Capable (controller)
   bit 4 (ON) Simultaneous LE and BR/EDR to Same Device Capable (Host)
1A # Number of bytes that follow in second (and last) AD structure
FF # Manufacturer specific data AD type
4C 00 # Company identifier code (0x004C == Apple)
02 # Byte 0 of iBeacon advertisement indicator
15 # Byte 1 of iBeacon advertisement indicator
e2 c5 6d b5 df fb 48 d2 b0 60 d0 f5 a7 10 96 e0 # iBeacon proximity uuid
00 00 # major 
00 00 # minor 
c5 # The 2's complement of the calibrated Tx Power

특정 광고를 보내도록 구성 할 수있는 모든 Bluetooth LE 장치는 위의 패킷을 생성 할 수 있습니다. Bluez를 사용하여이 광고를 보내도록 Linux 컴퓨터를 구성했으며 Apple의 AirLocate 테스트 코드를 실행하는 iOS7 장치는 위에 지정된 필드를 가진 iBeacon으로 선택합니다. 참조 : 주변기기로 BlueZ 스택 사용 (광고주)

블로그 에는 리버스 엔지니어링 프로세스에 대한 자세한 내용이 있습니다.


대단해! 정확히 내가 찾던 것. 그러나 아무도 체크섬을 계산하는 방법을 설명 할 수 있습니까?
Benjamin Groener

사양을 좀 더 완성하는 데 도움이되는 또 다른 질문이 있습니다. ms에서 올바른 브로드 캐스트 간격은 무엇입니까? 필자는 iBeacon의 기반으로 사용하고있는 텍사스 인스트루먼트 코드를 사용하여 주변의 iBeacon 목록을 표시 할 때 Apple의 Airlocate 앱이 일치하지 않는 방식으로 작동하는 것을 알고 있습니다.
PaulWoodIII

UUID / 근접 UUID는 iBeacon에만 해당되는 BLE 프로파일입니까, 아니면 장치 제조업체의 결정입니까? iBeacon 장치를 구별하기 위해 선호되는 방법은 무엇입니까 : BT MAC 주소, UUID 또는 주 / 부 값?
nickaknudson

David, Core Bluetooth GATT API를 사용할 때 특정 광고 패킷으로 iOS 장치를 구성 할 수 있습니까? 옵션을 찾을 수 없습니다. 서비스 및 특성에 대해서는 사용자 지정 UUID를 정의 할 수 있지만 광고에는 사용할 수 없습니다.
미구엘

1
@ReinaldoJunior AD = 광고 데이터. slackhappy의 답변에서 참조를 참조하십시오.
RenniePet

47

광고 데이터, 특히 제조업체 데이터를 기반으로하는 것 같습니다.

4C00 02 15 585CDE931B0142CC9A1325009BEDC65E 0000 0000 C5

<company identifier (2 bytes)> <type (1 byte)> <data length (1 byte)>
    <uuid (16 bytes)> <major (2 bytes)> <minor (2 bytes)> <RSSI @ 1m>
  • Apple 회사 식별자 (Little Endian), 0x004c
  • 데이터 유형, 0x02 => iBeacon
  • 데이터 길이, 0x15 = 21
  • UUID : 585CDE931B0142CC9A1325009BEDC65E
  • 전공 : 0000
  • 미성년자 : 0000
  • 1 미터에서 측정 된 전력 : 0xc5 = -59

샘플 AirLocate 앱 예제를 사용하여 Linux에서 작동하는 이 node.js 스크립트가 있습니다.


슬프게도 더 이상 스크립트를 사용할 수 없습니다. 다시 공유 하시겠습니까?
Thomaschaaf

@Thomaschaaf 죄송합니다. 여기에서 제거하면 Github의 이전 버전에 대한 링크 가 있습니다. hcitool / hciconfig를 생성하지 않아도 되도록 bleacon 을 업데이트 했습니다.
sandeepmistry

"1 미터의 측정 전력 : 0xc5 = -59"0xc5에서 -59까지 어떻게 계산합니까?
andreasbecker.de

@ andreasbecker.de 당신은 두 보완
sandeepmistry

@sandeepmistry에서 node.js 스크립트에 대한 링크가 끊어졌습니다.
tedyyu

20

sandeepmistry의 답변과 davidgyoung의 답변의 차이점을 조정하려면 다음을 수행하십시오.

02 01 1a 1a ff 4C 00

광고 데이터 형식 사양의 일부 임 [1]

  02 # length of following AD structure
  01 # <<Flags>> AD Structure [2]
  1a # read as b00011010. 
     # In this case, LE General Discoverable,
     # and simultaneous BR/EDR but this may vary by device!

  1a # length of following AD structure
  FF # Manufacturer specific data [3]
4C00 # Apple Inc [4]
0215 # ?? some 2-byte header

AD에서 누락 된 것은 서비스 [5] 정의입니다. iBeacon 프로토콜 자체는 GATT 및 표준 서비스 검색과 관련이 없다고 생각합니다. RedBearLab의 iBeacon 프로그램을 다운로드하면 광고 매개 변수를 구성하기 위해 GATT를 사용한다는 것을 알 수 있지만 이는 사양의 일부가 아닌 구현에 고유 한 것으로 보입니다. AirLocate 프로그램은 예를 들어 LightBlue 및 내가 시도한 다른 유사한 프로그램에 따라 구성에 GATT를 사용하지 않는 것 같습니다.

참고 문헌 :

  1. 핵심 Bluetooth Spec v4, Vol 3, Part C, 11
  2. 3 권, 파트 C, 18.1
  3. 3 권, 파트 C, 18.11
  4. https://www.bluetooth.org/en-us/specification/assigned-numbers/company-identifiers
  5. 3 권, 파트 C, 18.2

@slackhappy에게 감사드립니다. 내 답변을 업데이트했습니다. 2 바이트 헤더는 0x02 데이터 유형, 0x15 = 21 데이터 길이입니다.
sandeepmistry

고마워 @slackhappy 이것은 좋지만 바보 같은 질문을 할 수 있습니까? "무료 커피 들어와"또는 이와 유사한 메시지를 보내 FF려면 예제 의 in을 문자열의 HEX 값으로 바꾸 시겠습니까? (또한 AD 구조의 길이를 스위트로 업데이트 하시겠습니까?)
Mark

6

이 질문을하는 이유 는 표준 API를 사용하지 않고 Core Bluetooth사용하여 iBeacon으로 광고 하기를 원하기 때문에 다음 과 같은 NSDictionary를 광고하면 쉽게 그렇게 할 수 있습니다.

{
    kCBAdvDataAppleBeaconKey = <a7c4c5fa a8dd4ba1 b9a8a240 584f02d3 00040fa0 c5>;
}

자세한 내용은 이 답변 을 참조하십시오.



0

iBeacon 프로파일에는 다음이 포함 된 31 바이트가 포함됩니다.

  1. 접두사-9 바이트-여기에는 adv 데이터 및 제조업체 데이터가 포함됩니다.
  2. UUID-16 바이트
  3. 메이저-2 바이트
  4. 부-2 바이트
  5. TxPower-1 바이트

여기에 이미지 설명을 입력하십시오

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.