기본 콘텐츠로 건너뛰기

 

BLE란?

Bluetooth 4.0부터 새롭게 포함된 저전력 통신 기술


말 그대로 저전력 통신기술!

BLE라는 말 그대로 저전력을 최우선시하는 통신 기술로 wibree 라는 이름으로 개발되었으나 블루투스의 명성을 이용해서 빠르게 저변을 확대했다. 사실 기술적으로 블루투스와 BLE는 다른 것인데, BLE가 불루투스의 이름도 쓰며 성장했다. 

블루투스와 BLE의 기술 조합을 기준으로 Classic(BT) 과 Smart(BLE), Smart ready(BT+BLE) 로 분류된다. 

즉, Classic은 기존 블루투기술만 지원하고, Smart는 BLE만 지원하고, Smart Ready는 기존의 BT와 BLE 기술을 모두 지원한다는 뜻이다. 보통 스마트폰이나 웨어러블 기기엔 둘 다 지원되는 원칩을 사용하는데, 굳이 Smart ready라고 표현은 잘 안한다.

장단점

기존 블루투스Classic 에 비해서 전력 소모를 1/10 정도로 낮췄다고 한다. 저전력을 위해 음성 데이터 전송을 지원하지 않고 전송속도도 매우 느리다. 

저전력에 집중!!

                                    [블루투스와 BLE 스펙비교]

BLE 기술 얕게 알아보기

2가지만 기억하자

2가지 모드가 있다. Advertise(Broadcast) Mode와 Connection Mode. 매우 단순하고, 무선 통신을 아는 사람에겐 너무 친숙한 개념이다. 우리 말로 쉽게 표현한다면, 탐색 모드와 전송 모드 정도가 좋을 것 같지만 정식 명칭이 아니므로 영어를 사용하자. 이것만 알아도 큰 그림 그리는 데는 문제가 없다.

Advertise(Broadcast) Mode

두 기기가 무선 통신을 하려면 서로의 존재를 알아야 한다. 누군가는 자신의 존재에 대해서 알리는 신호 Advertising Packet를 보내고 누군가는 그것을 찾아서 연결을 시도하는 과정이 Advertise Mode에서 이루어 진다.

여기서 중요한 것이, BLE에서 Advertising Packet의 특징이 데이터가 매우 작다!

Advertising Packet신호를 하루 종일 일년 12달 자신을 알리는 신호를 쏘고 있는 것이 바로 비콘 Beacon 이다.

비콘은 상대가 받던 말던 Advertising Packet을 쏘기만 하면 되고, 최대 50m거리에서 작동 할 수 있다고 한다. 사용 환경과 제품 성능에 따라 차이가 있지만 작은 버튼 셀 배터리로도 1~2년 동안 사용할 수 있다고 한다.

비콘의 진화와 핵심 기술

비콘(beacon)은 근거리에 있는 스마트 기기를 자동으로 인식하여 필요한 데이터를 전송할 수 있는 무선 통신 장치이다.비콘 위키백과

Advertising Packet에 어떤 데이터를 어떻게 전달하는지에 대해서는 몇몇 회사에서 저마다의 규격을 정하고 이름을 붙였다. 애플에서 만든것이 iBeacon 이고, Radius Networks에서 만든 AltBeacon, 구글에서 공개한 URIBeacon 도 있다. 

물론, Advertising Packet 이 한 종류만 있는 것은 아니고, Scan Request와 Scan Response 로 추가 정보를 주고 받는 기능을 구현 할 수 있다.

Connection Mode

Advertise Mode 에서 알게 된 기기 중에 하나를 선택해서 1:1 로 연결하는 것이 Connection Mode 이다. Connection Mode 로 전환 되고 나서는 서로 타이밍을 맞춰서 데이터를 주고 받으며, 이전 모드에서 진행했던 과정은 더 이상 필요 없다. (Advertising과 Scan)


이미지 - http://microchipdeveloper.com/ble:bm70-ble-connection-states


그 뒤는, 이제 본격 적으로 데이터를 주고 받으면 된다. 어떤 데이터를 주고 받고 어떻게 다루면 되는지는 얕게 여거서는 다루지 않고, 관련 링크를 소개하는 것으로 대신 한다.

데이터 전송 속도가 워낙 느리기 때문에 실제 데이터 통신은 BT Classic을 이용하거나 WiFi기술을 이용하기도 한다.

초간단정리

  1. 블루투스랑 BLE는 원래 전혀 다른 기술이다. 블루투스를 지원한다고, BLE를 지원하는 것은 아니다!
  2. BLE는 저전력이 핵심이다! 데이터 전송 속도도 느리고, 한번에 전달하는 양도 적다!
  3. BLE는 2가지 모드가 있는데, Advertise Mode에서 Advertise Packet 신호만 쏘는 것이 비콘 Beacon이다.
  4. Connection Mode에서는 블루투와 달리 1:1로 연결된다. Peripheral and Central

댓글

이 블로그의 인기 게시물

ConstraintLayout을 뷰의 오른쪽 사이드 중간에 배치해야 할때

안드로이드 스튜디오에서 자바기반의 앱을 만드는 과정에서 ConstraintLayout을 뷰의 오른쪽 사이드 중간에 배치해야할 상황이 생겼다. 아래 4개 속성으로 부모뷰의 오른쪽 사이드 중간에 배치문제 해결. //오른쪽에 배치될 수 있도록 설정 app:layout_constraintRight_toRightOf="parent" //수직으로 중앙에 위치시키도록 설정 app:layout_constraintTop_toTopOf="parent" app:layout_constraintBottom_toBottomOf="parent" // 뷰를 수직으로 중앙에 위치시키기 위한 비율 값 설정. 0.5는 화면의 중앙에 위치하는 값 app:layout_constraintVertical_bias="0.5"

안드로이브 뷰의 백그라운드 설정을 위한 2개 메서드 이용 방법

setBackgroundResource()와 setBackground()를 이용해서 Android 애플리케이션에서 View의 백그라운드를 설정하는 두 가지 방법입니다. 1. setBackgroundResource()    - 리소스 ID를 통해 백그라운드를 설정합니다.    - 파라미터로 리소스 ID를 받으며, 주로 R.drawable에서 제공하는 이미지나 그림 리소스를 사용합니다.      예를 들어, setBackgroundResource(R.drawable.background_image)와 같이 사용합니다.    - 이 메서드는 내부적으로 리소스를 로드하고, 해당 리소스를 백그라운드로 설정합니다. 2. setBackground()     - Drawable 객체를 통해 백그라운드를 설정합니다.     - 파라미터로 Drawable 객체를 받으며, ColorDrawable, BitmapDrawable, GradientDrawable 등 다양한 종류의 Drawable을 사용할 수 있습니다.       ( 예 : setBackground(new ColorDrawable(Color.WHITE))와 같이 사용합니다.     - 이 메서드는 주어진 Drawable 객체를 직접 백그라운드로 설정합니다. 위 두가지 메서드의, 주요한 차이점은 setBackgroundResource()는 리소스 ID를 통해 백그라운드를 설정하고, setBackground()는 Drawable 객체를 통해 백그라운드를 설정한다는 것입니다.

2 files found with path 'lib/x86_64/libc++_shared.so' from inputs: 오류 해결 방법

안드로이드스튜디오로 앱을 개발하는 과정에서 플러그인, 외부 라이브러리를 추가하다 보면 "2 files found with path 'lib/ x86_64 /libc++_shared.so' from inputs: "과 같은 오류를 만날 수 있다. 'lib/x86_64/libc++_shared.so' 파일이 2개의 라이브러리에서 참조되어 발생하는 문제로 컴파일 환경에 따라 플랫폼 부분은 변경되면 나타날 수 있다 app수준의 build.gradle 파일에 다음과 같이 처리하면 관련 문제를 깔끔하게 처리 가능하다. android { ... packagingOptions { pickFirst 'lib/ x86 /libc++_shared.so' pickFirst 'lib/ x86_64 /libc++_shared.so' pickFirst 'lib/ arm64-v8a /libc++_shared.so' pickFirst 'lib/armeabi-v7a/libc++_shared.so' } ... } * 실제 내 앱소스내 코드임 * 위와 같이 컴파일 환경에서 제공하는 플랫폼별 참조를 전부 한번에 처리하는게 관련 오류를 원천 차단할 수 있는 방법이다.