[Artik020] Artik020 기본부터 스터디 02 – Blutooth

(출처 : http://www.redmondpie.com/bluetooth-5-announced-features-and-release-date-everything-you-need-to-know/)

흔히 무선통신을 할때는 지그비라던가 블루투스, Wi-Fi 등을 사용한다. 각자 그냥 약속된 규격이라고 생각하면 된다.

문제는 이런 규격이라는 것이, 약속을 계속 정의하다 보니 점점 개발자에게 요구하는 것들이 많아지게 된다. 사실 더 편할 수도 있다 ㅎㅎ

소비자의 입장에서 성능은 단순히 속도, 거리 이 두가지 정도로 생각할 수 있을 것이다. 하지만 개발자 입장에서는 속도와 거리는 기본 사양으로 두고 이를 극대화해서 사용? 할 수 있도록 하는 것이 목표이다.

여기서 극대화는 싸고, 에너지 덜 쓰고, 효율적인? 것이다.

여튼 우리는 블루투스를 가장 많이 사용하는데, 그 이유는 단 하나뿐이다. 스마트폰에 블루투스가 있기 때문이다.

어쩔수 없는 부분으로 웨어러블 IoT는 거의 모두 블루투스방식으로 운용된다. (몇몇 시계들은 셀룰러가 있더라)

홈 IoT는 또 Wi-Fi가 많은데, 요즘 거의 모든 집안에 무선랜이 있어서 그런 듯. 그리고 영상 전송을 하려면 이 정도는 되야 한다.

뭐 곧 있으면 IoT용 광역 통신망이 대세가 될것으로 생각한다. 스마트폰 없이 저전력 광역 통신을!

 

각설하고 제 1장으로 블루투스 통신에 대해서 간단히 알아보자

SILICON LABS의 UG103.14문서를 참조했다..

블루투스의 두 가지 존재, BR/EDR과 Bluetooth Smart

BR/EDR (Bit Rate/Enhaced Data Rate) : 헤드폰이나 마이크 같은 일정한 흐름을 가지는 소리 데이터를 전송하는 규격이다. 무선 이어폰이나 헤드폰의 블루투스가 이것이다.

Bluetooth Smart : 원거리 짧은 데이터의 전송에 사용된다. 배터리를 사용하는 IoT환경에서 이상적으로 저전력을 구현하는 방향으로 발전하고 있다. 내가 집중적으로 구현해야할 부분이 바로 이 부분이다.

흔히 옛날에 생각하던 블루투스, 즉 1,2,3 버전들은 진짜 단순히 tx/rx로 구성된 연결 후 데이터의 송/수신 위주였다면, 4.0부터는 Smart라는 말을 끼워넣고 (BLE, Bluetooth Low Energy 라고도 한다) 좀 더 규격화 하고 저전력화해서 배터리 기반 하드웨어들의 통신에 최적화할 수 있도록 했다

(출처 : SILICON LABS, UG103.14)

위 구조도의 모습이 블루투스 스마트 구조이다. 단어들이 모두 다 생소하다. 그래서 나는 3.0에서 4.0으로 넘어가는 시점에서 약간의 어려움을 겪었다. 전체적으로 구조를 간단하게 설명하고 세부적인 항목에 대해서 이해하면 블루투스 스마트의 구조를 그나마 파악할 수 있다.

처음에는 크게 두 부분으로 나눌 수 있다. GATT, SM, GAP 등에서 L2CAP까지는 host layers,

Link Layer부터 밑에 있는 회색 박스 까지는 Controller라고 한다.

간단하게 Controller는 약간 블루투스의 하드웨어적인 부분이고 host layers는 약간 소프트웨어적인 부분이라고 생각하면 이해하기 편하다.

위에있는 Application은 우리가 만들고자 하는 어떤 서비스를 뜻한다며, API는 블루투스를 사용하는 여러 함수들이라고 할 수 있다. 그런 함수들을 이용해서 소프트웨어적인 부분을 건들이면 밑에있는 하드웨어 단에서 실제적인 통신을 수행하는 것이다.

Controller부터 살펴보면

  1. 회색의 Blue Gecko Bluetooth Smart radio는 말 그대로 실제적으로 블루투스 통신의 전파를 조절해서 송/수신의 통신을 구현하는 부분이다.
  2. Link Layer는 단어 그대로 하드웨어와 소프트웨어 중간에서 연결을 해주는 부분이다. 뭐 구체적으로는 패킷구조를 딱 정해두고, 통신 조절, 스테이트 머신을 수행하고, 암호화도 한다.

Host Layer에서는 생소한 단어 5가지가 존재하는데, 간단히 숙지해서 익숙해 지면 될 것 같다.

L2CAP (Logical Link Control and Adaptation Protocol): 패킷을 구성하는 등, 프로토콜의 멀티플렉서 역할을 하는 애다. 뭐 적절하게 활동하는 좀 자동화적인 부분이라서 개발자는 그렇게 신경쓰지 않아도 될 부분이라고 한다.

ATT (Attribute Protocol) : server/client사이로 실제적으로 두 기기 사이에서의 통신 프로토콜을 말한다. Attributes라는 것은 여기서 0에서 512 byte사이의 배열을 말한다. 값도 가지고 핸들도 가지고 UUID도 가진다.

여튼 프로토콜 측면에서 Act을 날릴 것인지, Permission은 어떻게 할지, 등등을 정하는 것이다.

GATT (Generic Attribute Profile) : GATT의 ATT는 위 항목과 약간 다르다. 여튼 Profile이라는 게 프리셋 같은 목적에 맞게 미리 설정된 항목들을 뜻한다. 즉, 어떤 공통적인 목적을 위한 프레임워크를 GATT라고 한다. GATT는 server와 client의 역할을 결정해 준다. 좀 더 구체적인, 뭐 온도 데이터 전송 GATT라던지, 좀 더 개발자를 위한 편의가 있는 부분인 것 같다.

GAP (Generic Access Profile) : 기기가 연결가능할 것인지, 찾기 가능할지, 등등을 설정하기 때문이다. 결국 link layer를 운용하는 것을 제공해 준다. 여튼 이러한 부분에서 미리 설정하는 부분이라고 생각하면 된다. Broadcater, Observer, Peripheral, Central 등등의 역할이 정해진다.

SM (Security Manager) : 보안과 관련된 부분이다. 블루투스도 무선 통신이기 때문에 도청당하거나 할 수 있는 우려가 있다. 이를 암호화 등을 통해서 보호하는 기능을 제공하는데 그런 부분이다.

 

뭐 아직도 잘 모르겠지만 실습을 해보면 좀 더 명확히 파악이 될 것이다.

자세한 내용이 궁금하다면 아래 링크를 참고하길 바란다.

https://www.silabs.com/documents/login/user-guides/ug103-14-fundamentals-ble.pdf

주의 \기술적으로 잘못 설명한 부분이 있을 수 있습니다.

2,204 Comments