본문 바로가기
사물인터넷(Internet of things, IoT)/라즈베리파이(Raspberry Pi)

라즈베리파이로 블루투스 비컨을 Advertising 해보자

by 연구자 공학코드 2020. 10. 11.

공지사항

  1. 제가 운영하는 네이버 카페 개발자 커뮤니티 코어큐브(https://cafe.naver.com/ewsncube)에 가입하시면 컴퓨터 관련 학습 자료와 질의응답을 제공받으실 수 있습니다.

728x90
반응형

본 글은 2017년 6월 23일 23시 36분에 썼던 글이며 블로그 자료 이전으로 날짜와 일부 내용이 갱신되었습니다.

라즈베리파이의 블루투스

라즈베리파이3에는 블루투스 모듈이 내장되어 있으며 Bluetooth 4.1 Classic과 BLE(Bluetooth Low Energy)를 지원한다. 이 중 BLE는 연결을 수립하지 않고 데이터를 넣어 패킷을 보내는 Advertising을 수행할 수 있으며 라즈베리파이3에서 쉽게 사용할 수 있다. 이 때 사용하는 패킷을 비컨(Beacon)이라 부른다. Advertising을 통해 iBeacon과 같은 기능을 라즈베리파이3가 수행할 수 있다. 본 글에서는 라즈베리파이3가 iBeacon을 수행하도록 설정하는 것을 다룬다.

 

※ iBeacon이란 애플이 등록한 상표로써 자신의 위치를 알릴 수 있는 저전력/저비용의 전파발신장치를 말한다. 쉽게 말해서 위치 정보를 알려주는 장치다.

 

실험환경: 라즈베리파이3, Rasbian Jessie, Bluez 5.39

 

Bluez 설치

 본 글에서는 Bluez가 이미 설치되어 있고 정상적으로 동작한다는 것을 가정하고 글을  쓴다. 참고로 라즈베리파이3에 Rasbian Jessie를 설치하면 Bluez가 기본적으로 설치되어 있다. 그게 아니라도 sudo apt-get install bluez라고 입력하여 쉽게 설치할 수 있다.

$ hciconfig

위의 명령어를 입력하여 사용할 수 있는 블루투스 인터페이스로 어떤 것이 있는지 확인한다. 라즈베리파이3에 내장되어 있는 블루투스 모듈이 hci0로 인식되어 있다. 

$ sudo hciconfig hci0 up 

위의 명령어를 입력하여 hci0 인터페이스를 깨우자 

$ sudo hciconfig hci0 leadv3

위의 명령어로 advertising 주기가 1280ms로 설정된다.

$ sudo hciconfig hci0 noscan

위의 명령어를 입력하여 스캔되지 않도록 설정한다.

$ sudo hcitool -i hci0 cmd 0x08 0x0008 1E 02 01 1A 1A FF 4C 00 02 15 E2 0A 39 F4 73 F5 4B C4 A1 2F 17 D1 AD 07 A9 61 00 00 00 00 C8 00

위의 명령어를 입력하여 iBeacon으로 수행하게 만들자. FF는 제조사 데이터(Manufacturer Specific Data)의 시작을 알려주고 4C 00은 애플의 고유번호이다. 나머지 빨간색 부분은 페이로드(Payload)이다.

 

※ 회사별 고유 번호는 여기(https://www.bluetooth.com/specifications/assigned-numbers/company-identifiers)에 나타나 있다.

 

Bluez 테스트

이후 iBeacon으로 작동하는 라즈베리파이3가 정상적으로 Advertising을 하는지 확인하고 싶다면 BLE가 장착된 다른 장치로 확인해보면 된다. 나의 경우 갤럭시S7에 iBeacon 앱을 설치해서 확인하였다.

역시 잘 작동한다. 여담이지만 iBeacon이 최소 3개가 인식될 때 부터는 삼각측량으로 자신의 위치를 어느 정도 정확하게 인식할 수 있다. 물론 신호 세기로 장치간 거리를 측정을 하는 것이라서 오차가 상당한 편이지만 이런 오차를 보정하는 기술이 이쪽 연구 이슈라고 한다.

 

728x90
반응형

댓글