Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 | 31 |
Tags
- #큐구조 #큐다운로드
- 셀룰로오스-g-폴리락타이드 공중합체
- 플라스틱 생분해
- TwomonUSB
- 안드로이드 mvvm
- 라이브데이터 postValue
- Room 데이터베이스 업데이트
- 모의위치 주입
- withContext
- bluetoothmanager
- 안드로이드 sms
- 1회용 플라스틱컵
- 비콘스캐닝
- 커스텀스피너
- var 와 val
- 안드로이드 비콘
- 토글 험수
- 안드로이드 스튜디오 애뮬레이터
- viewmodelscope
- 코루틴스코프
- compse state
- compse collectAsState
- apk이름변경
- json 저장
- 코루틴 job
- 코틀린 이미지저장 #파일저장
- 스레드 #코루틴
- TowmonUSB 연결오류
- 안드로이드스튜디오 jdk
- 코틀린 트리거 버튼
Archives
- Today
- Total
EnjoyLife
iBeacon을 구성하는 데이터 및 필터조건 본문
1. 데이터 구성요소
iBeacon 광고 패킷(advertisement)은 아래와 같은 주요 필드로 구성됩니다.
- Flags
- 일반 BLE 장치가 광고 중임을 나타내는 공통 필드
- ex) LE General Discoverable Mode 등
- Manufacturer Specific Data (Apple 사)
- Company ID: 0x004C (Apple Inc.)
- Beacon Type: 0x02 (iBeacon 식별자)
- Data Length: 0x15 (다음에 나오는 UUID·Major·Minor·Power의 총 길이 21바이트)
- UUID (16바이트)
- iBeacon 그룹을 구분하는 고유 ID
- 예) E2C56DB5-DFFB-48D2-B060-D0F5A71096E0
- Major (2바이트)
- UUID 하위 그룹 식별자
- 범위: 0 ~ 65,535
- Minor (2바이트)
- Major 하위 서브그룹 식별자
- 범위: 0 ~ 65,535
- Measured Power (Tx Power) (1바이트, 부호 있는 정수)
- 1미터 거리에서 기대되는 RSSI 값(dBm)
- 비콘과의 상대적 거리를 추정하는 기준이 됨
오해하실까봐 왜 RSSI 와 distance 은 왜 없지? 라고 하실텐데 이 데이터는 iBeacon에서 보내주는 데이터가 아닙니다.
Rssi 는 ScanResult.getRssi()을 호출해 얻는값이고 , distance 는 직접계산해야 합니다.
전체 데이터 구조 예시(16 진수)
02 01 06 ← Flags
1A FF 4C 00 02 15 ← AD Len·Type·Company ID·Beacon Type·Data Length
E2 C5 6D B5 D F F B 48 D2 B0 60 D0 F5 A7 10 96 E0 ← UUID (16B)
00 01 ← Major (0x0001)
00 02 ← Minor (0x0002)
C5 ← Measured Power (-59dBm)
보통 앱에서 iBeacon의 데이터를 비교할때 , 주로 Major 과 Minor 필드를 사용합니다.
Major 은 2바이트(16비트) : 256x256 = 65,281 즉 0~65,281 자리의 숫자를 사용할수있습니다.
Minor 또한 2바이트를 사용할수 있습니다.
2.iBeacon 프로토콜 필터조건
비콘스캐너로 스캔시 수십개의 타사 비콘이 들어온다. 그중에서도 apple이 만든 ibeacon 만 걸러내고 싶다면
아래 조건을 넣으세요.
// Apple 제조사 ID(0x004C) 기반 iBeacon 데이터 추출
val mData = scanRecord.getManufacturerSpecificData(0x004C) ?: return
// iBeacon 포맷 확인: 타입(0x02), 길이(0x15)
if (mData.size < 23 || mData[0].toInt() != 0x02 || mData[1].toInt() != 0x15) return
'안드로이드 개발 > 비콘(iBeacon)' 카테고리의 다른 글
비콘스캐닝 및 모의위치 주입 관련 앱을 만들때 주의사항 (1) | 2025.05.27 |
---|---|
BluetoothAdapter.getDefaultAdapter() 와 BluetoothManager 은 무슨 차이야? (0) | 2025.05.13 |
비콘 스캔 로직은 굳이 Service 에 등록할 필요가 없다. (0) | 2025.05.13 |