BLE 초보자를 위한 글

첫번째 BLE

5년전 DFRobot 에서 Bluno Nano 라는 제품을 구입했다. Bluno 의 BLE 는 단순히 시리얼 인터페이스로 연결되어있으며 USB Serial TX/RX 를 공유한다. Github 에서 예제 코드를 다운받자.

https://github.com/DFRobot/BlunoBasicDemo

아두이노 코드를 살펴보면 다음과 같다.

void loop() {
 if(Serial.available()) {
   byte data = Serial.read();
  Serial.write(data); //send what has been received
 }
}

아두이노 코드는 엄청나게 간단하다.

이제는 Android/iOS 쪽 프로그래밍을 해야 한다. 역시 예제 코드를 살펴보다가 간단한 로봇을 만들 수 있었다.

Android 쪽 코드를 살펴보다보면, 그냥 Bluetooth SPP (Serial Port Profile) 이 아니라는 것을 알게 되었다. 이건 뭐람… BLE 공부를 조금 더 해보아야 한다.

BLE 는 BT 가 아니다

아두이노 입장에서 보면 BT 와 BLE 는 모두 UART 인터페이스를 사용한다.

BT SPP 를 이용하려면 BT 와 연결한다. 그러면 해당 디바이스 파일 (예: /dev/tty.HC-05-SPPDev) 이 생긴다. 이 파일을 읽고 쓰면 된다.

BLE 는 Central 장치와 Peripheral 장치로 구분된다. Central 장치가 Scan 하면 Peripheral 은 자신의 정보를 응답한다. 이 때 Central 은 Peripheral 의 Characteristics 를 얻어온다. 이러한 과정을 통해 Central 은 Peripheral 과 연결한다. 정해진 시간이 흐르면 이 연결은 끊어진다.

Peripheral 장치의 예는 센서이다. Central 장치(스마트폰)에서 온도센서를 접근하기 위해서 주기적으로 Scan 한다. 센서는 이에 대한 응답을 보낸다. 만일 스마트폰이 원하는 Characteristics 이라면 데이터를 얻고 연결을 끊는다. 연결 -> 데이터 -> 연결끊김 과정이 BLE Connection 이다. 이 과정은 짧은시간동안 일어나며 대부분의 시간동안 장치는 Sleep 상태. 이는 BLE 장치의 저전력을 가능하게 한다.

BLE model

from https://www.arduino.cc/en/Reference/ArduinoBLE

이제 간단히 BLE 장치를 이해했다.

최근에 나오는 Arduino Nano 33 IoT, 33 BLE 제품에서 BLE 를 다루는 방법은 Bluno 처럼 간단하지 않다. 이 제품은 Peripheral 로 동작하는데 있어서 Characteristics 를 커스터마이징 할 수 있다. 아두이노 장치에 온도센서를 연결했을 때, Central 장치가 Scan 을 보내오면 이 아두이노 Peripheral 장치는 “나는 온도 장치다"라고 알려준다. 다른 센서를 연결한다면 “나는 다른 센서 장치다"라고 알려줘야 한다. 이와 같이 Characteristic 을 통해서 장치가 어떠한 장치인가를 알 수 있는데, 많은 경우 이미 GATT 에서 정의하고 있다. Bluno 는 내장된 BLE 칩에 Serial 장치라는 Characteristic 을 가지고 있다. 이를 바꾸려면 Firmware 를 수정해야한다.

Keywish BLE Nano 소개

Keywish 에서 Bluno 와 같은 BLE 내장 아두이노를 $5 이하의 가격에 판매한다. 왼쪽부터 Bluno Nano, Arduno Nano, BLE Nano 이다.

BLE arduinos

BLE Nano 는 아두이노에 익숙하면서 처음 BLE 를 접하는 이에게 적절한 제품이라 생각한다.

나아가서 자신만의 서비스 GATT 에서 정의된 UUID 를 사용하고 싶다면 Arduino Nano 33, ESP32, Intel Curio 등을 사용할 수 있을 것이다.