번개애비의 라이프스톼일
ArduinoBLE ibeacon의 uuid 와 major, minor, RSSI 스캔하기 본문
기본적으로 ArduinoBLE 라이브러리에는 iBeacon을 수집하기 위한 클래스가 존재하지 않아,
별도로 개발하거나 다른 Bluetooth 모듈의 AT 통신을 통해 iBeacon을 수집했어야 했다.
환경구성
아이폰 12 mini -----> Arduino nano 33 BLE
아이폰이 iBeacon을 통해 Advertising을 진행하면 아두이노가 신호를 받아와 UUID, Major, Minor, RSSI의 값을 스캔할 수 있는 환경이다. 아이폰과 아두이노간의 신호세기를 측정할 수 있음으로 NearBy나 간략하게나마 접근측정이 가능하여 도어제어등으로 활용할 수 있다.
아이폰에 BeaconSimulator 앱을 설치하여 간편하게 테스트할 수 있다.
아래 라이브러리를 다운로드받아 IDE에 라이브러리를 ZIP파일 그대로 추가한다.
iBeacon 스캔하는 소스코드
#include <ArduinoBLE.h>
void setup() {
Serial.begin(9600);
digitalWrite(LEDR, LOW);
if (!BLE.begin()) {
Serial.println("ERROR : BLE Can't Start!");
while (1);
}
}
void loop() {
BLE.scan();
// check if a peripheral has been discovered
BLEDevice peripheral = BLE.available();
if (!peripheral) {
return;
}
if (!peripheral.hasManufacturerData()) {
return;
}
String manufacturerData = peripheral.manufacturerData();
if (manufacturerData.length() < 25 * 2) {
return;
}
if (manufacturerData.substring(0, 8) != "4c000215") {
return;
}
// Discovered an iBeacon
Serial.println("Discovered an iBeacon");
Serial.println("-----------------------");
// UUID
String id = manufacturerData.substring(8, 16) + "-";
id += manufacturerData.substring(16, 20) + "-";
id += manufacturerData.substring(20, 24) + "-";
id += manufacturerData.substring(24, 28) + "-";
id += manufacturerData.substring(28, 40);
Serial.print("UUID: ");
Serial.println(id);
// Major ID
char buf[5];
manufacturerData.substring(40, 44).toCharArray(buf, 5);
int major = (int)strtol(buf, NULL, 16);
Serial.print("Major ID: ");
Serial.println(major);
// Minor ID
manufacturerData.substring(44, 48).toCharArray(buf, 5);
int minor = (int)strtol(buf, NULL, 16);
Serial.print("Minor ID: ");
Serial.println(minor);
// RSSI
Serial.print("RSSI: ");
Serial.println(peripheral.rssi());
Serial.println();
}
iBeacon Data설명
0~8 : Factory ID - 제조사 고유의 아이디값 8자리 iBeacon은 4c000215을 사용한다.)
8~40 : UUID - 고유식별번호 {8-4-4-4-12}와 같은 32자리
40~44 : Major ID - 16비트 4자리를 10진수전환하여 3자리
44~48 : Minor ID - 16비트 4자리를 10진수전환하여 3자리
'IT' 카테고리의 다른 글
Swift에서 멀티스레드로 함수를 실행하고 완료시 다른함수 호출하기 (0) | 2021.09.16 |
---|---|
Swift 5.x UIAlertController를 이용하여 앱 설정 화면으로 전환시키기 (0) | 2021.09.15 |
아이폰 in-app browser(인앱브라우저)별 user agent (0) | 2021.07.05 |
MariaDB의 디렉토리를 수정하여 설치 (CentOS 7.x 기준) (0) | 2021.06.24 |
M1 맥북 프로에서 듀얼/멀티 모니터 사용하는 방법 (트리플모니터) (84) | 2021.06.23 |
Comments