안드로이드 블루투스 관련 앱을 만들어보고 싶어, 해당 내용에 관한 글을 정리했습니다.

Bluetooth Low Energy (BLE)

기기간에 마스터, 슬레이브 관계를 형성하여 통신하는 bluetooth classic과 비슷한 무선 통신을 할 수 있었다. 그러나 전력량이 많았다. 기존의 문제이던 전력 소모량을 줄여, 스마트 기기인 스마트 밴드, 워치, 글래스 등에서 사용됩니다.
Classic Bluetooth의 경량화 버전을 목표로 bluetooth 4.0의 일부로 발표 되었습니다. 블루투스 표준화 그룹인 SIG에 의해서 개발되기 전까지 Nokia의 사내 프로젝트로 시작했습니다.

BLE 를 지원하는 기기는 Advertise mode (= broadcast ) 와 Connection mode로 통신을 합니다.

img

Advertise Mode (= Broadcast Mode )란?

주변의 디바이스 유무에 관계없이 자신의 signal을 일방적으로 계속 보내는 것을 말합니다. signal을 일방적으로 보내기 때문에 보안에 취약합니다. 디바이스에 자신의 존재를 알릴 때 사용하지만 observer에 전송할 작은양의 data를 보낼 때도 사용하기도 합니다.

Advertise 방식은 주로 디바이스가 자신의 존재를 알리거나, 적은 양(31Bytes 이하)의 User 데이터를 보낼 때도 사용됩니다. 한 번에 보내야 하는 데이터 크기가 작다면, 굳이 오버헤드가 큰 connection 과정을 거쳐 데이터를 보내기 보다, 단순히 advertise를 통해 한번에 보내는게 더 효율적이기 때문입니다. 전송크기 제한을 보완하기 위해 Scan Request, Scan Response을 이용해서 추가적인 데이터를 주고 받을 수 있습니다.

Advertise 방식은 signal을 일방적으로 뿌리는 것이기 때문에, 보안에 취약합니다.

일대 다 방식.

  • advertiser(boardcaster) : Non-Connectable Advertising Packet signal을 주기적으로 보내는 기기 ( ex. 스마트 워치, 밴드 등 )
  • observer : advertiser가 보내는 packet을 듣기 위해 주기적으로 scanning 하는 기기 ( ex. 폰 )
  • Advertising type 의 신호를 일정주기로 보냅니다.

Connection Mode란?

양방향으로 데이터를 주고 받거나, advertising으로만 데이터를 주고 받기에는 data 양이 많을 경우 Connection Mode로 통신합니다. 일대 일 방식으로 데이터를 교환한다. 디바이스간의 channel hopping 규칙을 정해놓고 통신을 하기 때문에 안전합니다.

Central ( Master )

다른 device와 connection을 맺기 위해 Connection advertise signal을 주기적으로 scan하고, 해당 디바이스에 연결 요청합니다.

연결 후에는 주기적으로 data 교환을 주도 합니다. ( ex. 폰 )

Peripheral ( Slave )

다른 device와 conneciton을 위해 advertise signal을 주기적으로 보낸다. 이를 수신한 Central 디바이스가 Connection request를 보내면 이를 수락하여 Connection 합니다. ( ex. 스마트 밴드 )

Protocol Stack

디바이스들이 bluetooth로 통신하기 위해 Protocol Stack을 가지고 있는데, 통신 규약인 protocol이 쌓여 있는 것을 Protocol Stack 이라 한다. Protocol Stack을 거치면서 packet 이 분석된다.

  • Application - App
  • Host - GAP ( Generic Access Profile ) , GATT(Generic Attribute Profile)
  • Controller - Link Layer, Physical Layer

Physical Layer

Bluetooth Signal과 통신할 수 있는 회로가 구성되어 있다. Analog 신호 <-> Digital 신호

2.4GHz 신호를 40개의 channel로 나누어 통신하는데 그 중 3개는 Advertising Channel, 나머지 37개는 Data Channel이다.

Link Layer

5가지의 state를 가지고 있다. 각 디바이스는 서로 연결되는 과정에서 State 를 변화 시킨다.

  • Standby : Signal packet을 보내지도, 받지도 않는 상태
  • Advertising : advertising packet을 보내고, 해당 advertising packet에 대한 상대 디바이스의 response를 받을 수 있고, 줄 수 있는 상태
  • Scanning : Advertising channel에서 scanning 하고 있는 상태
  • Initial : advertiser의 connectable advertising packet을 받은 후 Connection request를 보낸 상태
  • Connection : connection 이 후의 상태

Generic Access Profile ( GAP )

서로 다른 제조사가 만든 BLE끼리 호환할 수 있도록 하는 역할.
GAP은 서로 다른 제조사가 만든 BLE 디바이스들간에 서로 호환되어 통신할 수 있도록 주춧돌 역할을 한다. 어떻게 디바이스간에 서로를 인지하고, Data를 Advertising하고, Connection을 맺을지에 대한 프레임워크를 제공한다.

또한 GAP에서는 BLE 통신을 위해 Role, Mode, Procedure, Security, Additional GAP data format 등을 정의한다.

## Role

  • Central: Link layer에서 Master 역할에 상응. 다른 디바이스의 Advertising Packet을 듣고, Connection을 시작할 때 시작된다.
  • 메인 컴퓨터, 스마트폰, 태블릿PC의 역할
  • Peripheral: Link layer에서 Slave 역할에 상응. Advertising Packet을 보내서 Central 역할의 디바이스가 Connection을 시작할 수 있도록 유도.
  • 센서기능이 달린 디바이스들의 역할
  • Generic Attribute Profile ( GATT )

BLE data 교환을 관리. 디바이스들이 data를 발견하고, 읽고, 쓰는 것을 가능하게 하는 기초적인 data model과 procedure을 정의한다.

Connection mode일 때 GATT 서비스와 Characteristic을 이용하여 양방향 통신을 한다.

주요 용도에 대한

  • iBeacon prefix(9 byte) : 비콘의 설정이나 특성 값이 기록되는 부분입니다. iBeacon 헤더 정보라 생각하시면 됩니다. 우리가 손대지 않고 정해진 값을 사용해도 됩니다.
  • UUID (16 byte) : 사실 iBeacon에서 가장 중요한 데이터는 UUID, Major, Minor 값입니다. 이 값을 추출한 뒤, 서버에 보내서 내가 어느 위치에 있는지, 이 비콘이 어떤 역할을 하는지, 그래서 사용자에게 어떤 정보를 보여주는 것이 좋은지 판단하게 됩니다. iBeacon 관련 공식 문서를 보면 주변에서 스캔한 UUID, Major, Minor 로 사용자의 위치를 판단하는 예시들을 언급하는데, iBeacon 장치가 위치기반 서비스의 일부임을 표시하기 위해 미리 정해둔 UUID 를 사용합니다. UUID는 꼭 표준에 지정된 값을 쓸 필요는 없으며, 서비스 개발자가 임의로 지정해서 사용해도 됩니다.
  • Major (2 byte), Minor (2 byte) : UUID 와 함께 사용자의 위치(Major, Minor = 지역, 세부 장소)를 판별하는데 주로 사용됩니다. 하지만 사용방법이 고정된 것은 아니며, 개발자가 이 값들을 임의의 목적으로 사용할 수도 있습니다. 예를 들어, 온도와 습도 데이터를 Major, Minor 데이터로 보낼 수도 있습니다. 물론 이 경우 비콘을 스캔 하는 장치도 해당 데이터를 온도, 습도로 인식하도록 만들어야 합니다.
  • TX Power(1 byte) : 비콘 장치가 신호를 송출할 때의 power 레벨을 여기에 적어 보내줍니다. 비콘 신호를 수신할 때 신호 세기를 알 수 있기 때문에 TX power 보다 얼마나 감소했는지를 계산하고, 대강의 거리를 짐작할 수 있습니다. 하지만 이렇게 계산된 거리는 대략적인 추정치입니다. 비콘 신호는 주변 상황이나 움직임, 장애물에 의한 변동이 심할 수 있습니다.

References

  1. https://binux.tistory.com/26
반응형

라즈베리파이3 b+ 을 사용하고 있는데, 현재는 zero w 를 구입해서 세팅을 하다가 일정 중요한 부분을 기록하다.

라즈베리파이 기초설정

SSH 모드를 사용해서 설정하는게 편합니다. 더 편하게 하려면 GUI 모드를 이용해서 접속을 하시면 더 편합니다.

WIFI 잡기

주위에 잡을 수 있는 와이파이 정보를 읽어옵니다.

# sudo iwlist wlan0 scan

Imgur

ESSID 명이 접속을 네트워크 암호를 나타냅니다.

다음명령어를 통해서 테스트를 해 봅니다.

# wpa_passphrase SSID이름 비밀번호

여러가지 문구나 나오는게 있는데, 이부분은 보안을 위해서 설정할 수 있는 부분이기도 한데, 추가 정보는 이쪽을 통해서 보세요. 처음 사용자에게 중요한 부분은 아닙니다.

설정 파일을 편집 합니다.

# sudo vi /etc/wpa_supplicant/wpa_supplicant/conf
country=GB
ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev
update_config=1

network={
    ssid="네트워크이름"
    psk="암호"
}

이렇게 입력을 해 준 후에 리부팅을 해 줍니다.

# sudo shurdown -r now

멀티 와이파이 잡기

여러장소에서 와이파이를 잡기위해서 멀티 와이파이를 설정 할 수 있습니다.

terminal 을 통해서 실행

새로운 걸 설치 안하고, 위의 방법을 통해서 같은 방법으로 문구만 추가해 주면 됩니다.

country=GB
ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev
update_config=1

network={
    ssid="네트워크이름"
    psk="암호"
}

# 아래 추가 된 문구
network={
    ssid="네트워크이름2"
    psk="암호2"
}

콘솔 어플을 통해서 사용하는 방법

아래의 명령어로 설치를 진행 한 후 실행하기( 설치용량 4mb )

# sudo apt-get install wicd-curses -y
# sudo wicd-curses

실행하면 나오는 화면

Imgur

지금은 잡히는 와이파이가 하나 밖에 없습니다.

여기서 키보드 오른쪽방향키를 누르면 설정 모드로 들어갈 수 있습니다. 여기서 KeyAutomatically connect to this network 를 눌러서 추가합니다.

Imgur

세팅값은 /etc/wicd/wireless-settings.conf 에 저장.

블루투스 잡기

블루투스 모드 컨트롤에 들어갑니다.

# sudo bluetoothctl
agent on
default-agent
discoverable on
scan on

리스트들이 보이면 자신이 원하는 블루투스 기기을 선택해서 붙여넣기 합니다.

pair xx:xx:xx:xx:xx:xx

여러가지 요구 미션이 잇는데 수행하면 pair 가 완료 됩니다.

메모리에 올려줍니다.

trust xx:xx:xx:xx:xx:xx

Imgur

여기까지 하고 리붓을 해도 잘 잡힙니다.
만약 리붓을 해도 안 잡히면 다음문서를 참조하세요

참조문서

반응형

소니 블루투스 스피터 SRS-XB20

Imgur

설명 내용
블루투스 Bluetooth 사양 버전 4.2
최대통신거리 10m
지원코덱 SBC / AAC / LDAC(96kHz/24bit 고해상도 블루투스 코덱)
주파수 전송 범위 20Hz ~ 20,000Hz(44.1kHz 샘플링)
배터리수명 12 시간
방수방진 IPX5 (최소 3분간 저압으로 분출되는 물로부터 보호)

LDAC™

엑스페리아XZ 를 사용하고 있는데, 갤럭시6에서 사용할때는 몰랐는데 블루투스의 새로운 기술이 들어간 기기로 접속을 하면 다양한 메세지가 나온다.

Imgur

APT-x 기능이 있는 이어폰도 위의 메세지와 비슷한 지원기기에 대한 정보를 보여 준다.

간단하게 표현하면 LDAC™은 하이 레졸루션 오디오를 전송하는 오디오 코딩 기술입니다.

LDAC™는 시장에 출시된 그 어떤 Bluetooth® 호환 코딩 기술과 비교할 수 없습니다. 이 기술은 최대 전송 속도 990kbps로 전송하는 월등한 음질로 하이 레졸루션 오디오 음악을 즐길 수 있도록 지원합니다. 이는 전송 속도가 328kbps에 불과한 SBC(Low Complexity Subband Coding) 등 기존의 Bluetooth® 호환 오디오 기술 대비 거의 세 배에 달하는 데이터를 의미합니다.

이 기술은 무선 환경에 따라 다양한 전송 속도를 지원하여 음악 애호가가 원하며 아티스트가 들려주고자 했던 향상된 청취 환경을 제공합니다.

후기

이번에 AUX 케이블을 사용하면 음질이 더 좋다는 사실을 알게되었다. 블루투스의 음질의 한계가 있다는 사실.

블루투스 2.0 은 데이터 전송량이 3Mbps 밖에 안되기 때문에 실질적 음질을 전송할 수 없다고 한다. 그래서 기존의 블루투스는 FM 라디오의 음질수준 밖에 들을 수 없다고 한다.
예전에는 이 사실에 대해서 무시하고 그냥 들었는데, AUX를 연결하고 난 후에는 그럴수도 있겠다 생각이 들었다. 비교해보고 직접 해 보시기 바란다. 본인같은 막귀도 알수 있을 정도였다.

  • 비트가 있는 음악을 즐겁게 듣기 좋은 음질.
  • 캠핑갈때 편하게 들고가기 좋은 음질

boss sountlink3 를 사용하고 있는 입장에서 부드러운 베이스를 보여주지는 못하는 것 같다. 나에게는 조금 귀가 아픈 베이스를 제공하는 것 같다.

어쨰 계륵같은 물건이 되었다.

반응형

'구매' 카테고리의 다른 글

한국 선불유심 가격 비교  (0) 2017.10.03
ea6900, ac66 비교 사용기  (0) 2017.08.31
엑스페리아 XZ 호후 강화필름 후기  (0) 2017.07.25
엑스페리아 XP vs XZ vs XZP  (0) 2017.07.19
G13 구매해서 잠깐 사용 해 보기  (0) 2017.07.04

+ Recent posts