블루투스 저에너지 개발 키트로 iBeacon을 직접 만들고 싶습니다. Apple은 아직 iBeacons에 대한 사양을 발표하지 않았지만 일부 하드웨어 개발자는 AirLocate 샘플 코드에서 iBeacon을 리버스 엔지니어링하여 iBeacon 개발 키트 판매를 시작했습니다.
그렇다면 iBeacon Bluetooth 프로파일은 무엇입니까?
Bluetooth 저에너지는 LE 프로파일 서비스 검색에 GATT를 사용합니다. 따라서 속성 핸들, 속성 유형, 속성 값 및 iBeacon 속성의 속성 권한을 알아야합니다. 따라서 UUID가 E2C56DB5-DFFB-48D2-B060-D0F5A71096E0 인 iBeacon의 주요 값은 1이고 최소 값은 1입니다. Bluetooth GATT 프로파일 서비스는 무엇입니까?
다음은 Apple 포럼과 문서를 통해 얻은 몇 가지 가정입니다.
-
Bluetooth 주변 장치의 프로필 서비스 (GATT) 만 iBeacon임을 알기 만하면됩니다.
-
메이저 및 마이너 키는이 프로파일 서비스의 어딘가에 인코딩됩니다
iBeacon Dev Kits를 보유한 일부 회사는 이미이 수치를 알고있는 것으로 보입니다.
잘만되면 우리는 다음과 같이 Bluetooth.org에 프로파일을 게시 할 것입니다 : https://www.bluetooth.org/en-us/specification/adopted-specifications
답변
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 스택 사용 (광고주)
이 블로그 에는 리버스 엔지니어링 프로세스에 대한 자세한 내용이 있습니다.
답변
광고 데이터, 특히 제조업체 데이터를 기반으로하는 것 같습니다.
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 스크립트가 있습니다.
답변
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를 사용하지 않는 것 같습니다.
참고 문헌 :
- 핵심 Bluetooth Spec v4, Vol 3, Part C, 11
- 3 권, 파트 C, 18.1
- 3 권, 파트 C, 18.11
- https://www.bluetooth.org/en-us/specification/assigned-numbers/company-identifiers
- 3 권, 파트 C, 18.2
답변
이 질문을하는 이유 는 표준 API를 사용하지 않고 Core Bluetooth 를 사용하여 iBeacon으로 광고 하기를 원하기 때문에 다음 과 같은 NSDictionary를 광고하면 쉽게 그렇게 할 수 있습니다.
{
kCBAdvDataAppleBeaconKey = <a7c4c5fa a8dd4ba1 b9a8a240 584f02d3 00040fa0 c5>;
}
자세한 내용은 이 답변 을 참조하십시오.
답변
매우 간단합니다. Apple의 iBeacon 표준을 준수하는 몇 개의 문자가 포함 된 문자열 만 광고합니다. 당신은 링크 http://glimwormbeacons.com/learn/what-makes-an-ibeacon-an-ibeacon/을 참조 할 수 있습니다