11.1. Bluetooth를 사용하는 이유

네트워킹은 카메라를 Wi-Fi나 이더넷 네트워크에 연결하여 그곳에서 도달 가능한 모든 대상과 통신할 수 있게 합니다. 복도 끝에 있는 노트북, 다른 대륙의 서버, 셀룰러로 로밍 중인 휴대폰 등이 그 대상입니다. 하지만 이러한 도달 범위에는 전제 조건이 따릅니다. 네트워크가 존재해야 하고, 액세스 포인트가 통신 범위 안에 있어야 하며, 일부 자격 증명이 준비되어 있어야 하고, 라우터가 카메라에 주소를 할당해 줄 의향이 있어야 합니다. 또한 카메라는 링크를 유지하기 위해 라디오(또는 이더넷 포트)를 충분히 활발하게 가동해야 합니다.

Bluetooth는 그 반대의 경우를 다룹니다. 짧은 거리, 인프라 없음, 저전력입니다. 같은 방에 있는 카메라와 휴대폰은 그 사이에 아무것도 없이 직접적인 라디오 링크를 통해 데이터를 주고받습니다. 액세스 포인트도, 라우터도 없고, 양쪽 어느 쪽도 어떤 네트워크에 연결될 필요가 전혀 없습니다. 라디오는 짧은 활동 구간 사이에는 대부분 꺼져 있으므로, Wi-Fi에서는 하루를 겨우 버틸 배터리가 몇 달 동안 작동할 수 있습니다.

11.1.1. Bluetooth가 적합한 도구일 때

카메라에서 흔한 경우는 다음과 같습니다:

  • 휴대폰이나 태블릿이 카메라와 페어링합니다. 가까이 있는 사용자가 휴대폰의 앱을 열어 카메라를 구성하거나, 상태를 읽거나, 결과를 다운로드합니다. 두 기기를 먼저 같은 Wi-Fi 네트워크에 연결할 필요가 없습니다. 대부분의 휴대폰은 Bluetooth Low Energy를 기본으로 지원하므로, 사용자 경험은 “앱을 열고 연결 누르기”이지 “먼저 이 네트워크에 접속하기”가 아닙니다.

  • 웨어러블이나 센서가 카메라에 보고합니다. 심박 측정 밴드, 온도계, 비콘, 접촉 스위치 등은 모두 Bluetooth Low Energy를 중심으로 설계된 배터리 구동 기기입니다. 카메라는 클라이언트로 연결하여 그 값을 읽고, 그 데이터를 하고 있던 다른 작업에 통합합니다.

  • 카메라가 작은 상태 피드를 게시합니다. 배터리 잔량, 마지막으로 검출된 객체, 프레임 속도 등 몇 가지 수치를 근처에서 읽고자 하는 모든 대상에 노출합니다. 페어링은 선택 사항입니다. 민감하지 않은 데이터의 경우 카메라는 연결 없이도 값을 직접 광고할 수 있습니다.

  • 두 카메라(또는 카메라와 마이크로컨트롤러)가 네트워크 없이 데이터를 공유합니다. 양쪽 모두 서로를 알고 있고, 양쪽 모두 같은 건물 안에 있습니다. 바이트가 방을 가로지르기 위해 클라우드로 올라갔다가 다시 내려와야 할 이유가 없습니다.

11.1.2. 대신 네트워킹이 적합한 도구일 때

Bluetooth의 절충점이 적합하지 않은 흔한 경우가 몇 가지 있습니다:

  • 범위 밖의 상대. Bluetooth Low Energy는 실제로는 수 미터, 자유 공간에서 잘해야 수십 미터 정도입니다. 건물 너머, 동네 너머, 인터넷 너머에 있는 대상은 Wi-Fi나 이더넷이 필요합니다.

  • 고대역폭 링크. Bluetooth Low Energy는 실제로는 초당 수십에서 수백 킬로비트를 전달합니다. 프레임을 스트리밍하거나 의미 있는 비디오를 다루려면 Wi-Fi가 필요합니다.

  • 공유 인프라상의 다대다 그룹 통신. 한 서버와 모두 통신하는 방 안 가득한 기기들이나, 결과를 공유하는 카메라 메시 네트워크와 같은 패턴은 바로 IP 네트워크가 만들어진 목적입니다.

11.1.3. 클래식이 아닌 Low Energy

일상적으로 사용하는 “Bluetooth”라는 용어는 서로 다른 두 가지 무선 스택을 포괄합니다. Classic Bluetooth는 무선 헤드셋, 차량용 오디오, 키보드/마우스 연결에 쓰이는 방식으로, 음성 및 오디오급 무선 통신과 비교적 복잡한 스택, 그리고 눈에 띄는 전력 소모가 특징입니다. Bluetooth Low Energy (BLE)는 같은 브랜드 이름과 2.4 GHz 대역을 공유하지만 그 외에는 공통점이 거의 없는 별도의 더 새로운 프로토콜입니다. 평균 전력을 매우 낮게 유지하기 위해 짧고 드문 무선 버스트를 중심으로 설계되었으며, 오디오 스트리밍이 아닌 키/값 데이터 모델을 중심으로 만들어졌습니다.

카메라의 MicroPython은 BLE만 지원합니다. 클래식 Bluetooth는 API에 전혀 포함되어 있지 않습니다. 아래에서 “Bluetooth”는 BLE를 의미합니다.

11.1.4. 네트워킹 모델에서 달라지는 점

BLE는 네트워킹과 동일한 5계층 스택을 가지지만, 상위 계층은 다르게 동작합니다:

  • “소켓을 열고 바이트를 보낸다”는 추상화가 없습니다. BLE는 한쪽이 호스팅하고 다른 쪽이 읽거나 쓰거나 구독하는 작은 키/값 데이터베이스를 중심으로 설계되어 있습니다. 카메라는 이름이 붙은 값(배터리 잔량, 온도, 명령 레지스터)을 게시하고, 피어는 그것을 읽거나 관찰합니다.

  • 이름으로 주소를 지정하는 방식이 없습니다. 기기는 자신이 누구인지 설명하는 짧은 브로드캐스트를 광고하여 스스로를 식별하고, 피어는 그러한 브로드캐스트를 스캔하여 연결할 대상을 선택합니다.

  • 라디오는 대부분 유휴 상태입니다. 양쪽은 연결 시점에 얼마나 자주 깨어나 통신할지 합의합니다. 그 사이에는 양쪽 모두 다시 잠듭니다.

이 세 가지 차이점이 나머지 BLE API를 소켓 모델에서 멀어지게 만드는 요인입니다.