11.1. Зачем нужен Bluetooth¶
Сеть подключает камеру к Wi-Fi или Ethernet, чтобы она могла связываться со всем, что доступно из этой сети. С ноутбуком в конце коридора, с сервером на другом континенте, с телефоном в мобильной сети. Но такой охват требует соблюдения предварительных условий. Сеть должна существовать. Какая-то точка доступа должна быть в зоне действия, какие-то учётные данные должны быть доступны, какой-то маршрутизатор должен быть готов выдать камере адрес. Камера также должна поддерживать работу радиомодуля (или порта Ethernet) достаточно интенсивно, чтобы удерживать соединение.
Bluetooth закрывает противоположный случай – малая дальность, отсутствие инфраструктуры, низкое энергопотребление. Камера и телефон в одной комнате обмениваются данными по прямому радиоканалу, без чего-либо посередине. Ни точки доступа, ни маршрутизатора, и ни одной из сторон вообще не нужно быть в какой-либо сети. Радиомодуль большую часть времени выключен между короткими всплесками активности, поэтому батарея, которая едва протянет день на Wi-Fi, может работать месяцами.
11.1.1. Когда Bluetooth – подходящий инструмент¶
Распространённые сценарии для камеры:
Телефон или планшет соединяется с камерой. Находящийся рядом пользователь открывает приложение на телефоне и настраивает камеру, считывает её состояние или скачивает результаты – без необходимости сначала помещать оба устройства в одну сеть Wi-Fi. Большинство телефонов поддерживают Bluetooth Low Energy на уровне самого устройства, поэтому пользователь просто «открывает приложение и нажимает «Подключиться»», а не «сначала присоединяется к этой сети».
Носимое устройство или датчик передаёт данные камере. Нагрудный кардиодатчик, термометр, маяк, контактный переключатель – все они представляют собой устройства с питанием от батареи, спроектированные вокруг Bluetooth Low Energy. Камера подключается как клиент, считывает их значения и встраивает данные во всё остальное, чем она занимается.
Камера публикует небольшой поток состояния. Уровень заряда батареи, последний обнаруженный объект, частота кадров – несколько чисел, доступных любому находящемуся рядом устройству, желающему их прочитать. Сопряжение необязательно; для несекретных данных камера может транслировать значения напрямую, вообще без какого-либо соединения.
Две камеры (или камера и микроконтроллер) обмениваются данными без сети. Обе стороны знают друг друга; обе стороны находятся в одном здании; нет причин, чтобы байты путешествовали вверх в облако и обратно вниз, чтобы пересечь комнату.
11.1.2. Когда вместо этого подходящим инструментом является сеть¶
Компромиссы Bluetooth неуместны в нескольких распространённых случаях:
Удалённые собеседники. Bluetooth Low Energy на практике работает на пару метров, а в свободном пространстве в лучшем случае на десятки метров. Всё, что находится в другом конце здания, в другом конце города или в интернете, требует Wi-Fi или Ethernet.
Высокоскоростные каналы. Bluetooth Low Energy на практике обеспечивает от десятков до нескольких сотен килобит в секунду. Для потоковой передачи кадров или сколько-нибудь осмысленного видео нужен Wi-Fi.
Групповая связь «многие со многими» на общей инфраструктуре. Комната, полная устройств, которые все взаимодействуют с одним сервером, или сеть камер, обменивающихся результатами, – этот шаблон именно то, для чего создана IP-сеть.
11.1.3. Low Energy, а не классический¶
В повседневном употреблении «Bluetooth» охватывает два различных радиостека. Classic Bluetooth – это тот, что в беспроводных гарнитурах, автомобильной аудиосистеме и каналах клавиатуры / мыши: радио уровня голоса и звука, сравнительно сложный стек и заметное энергопотребление. Bluetooth Low Energy (BLE) – это отдельный, более новый протокол, который разделяет с ним торговую марку и диапазон 2,4 ГГц, но почти ничего больше. Он построен вокруг коротких, редких радиовсплесков, чтобы средняя мощность оставалась крошечной, и вокруг модели данных «ключ/значение», а не потоковой передачи звука.
MicroPython на камере поддерживает только BLE. Classic Bluetooth вообще не входит в API. «Bluetooth» далее означает BLE.
11.1.4. Что меняется по сравнению с сетевой моделью¶
У BLE тот же пятиуровневый стек, что и у сети, но верхние уровни ведут себя иначе:
Здесь нет абстракции «открыть сокет и отправить байты». BLE построен вокруг небольшой базы данных «ключ/значение», которую одна сторона размещает у себя, а другая читает, записывает или подписывается на неё. Камера публикует именованные значения (уровень заряда батареи, температуру, командный регистр); собеседник читает их или следит за ними.
Здесь нет адресации по имени. Устройства идентифицируют себя путём рассылки рекламы – короткой широковещательной передачи, описывающей, кто они; собеседники сканируют эти передачи и выбирают одну для подключения.
Радиомодуль большую часть времени бездействует. Обе стороны при установлении соединения договариваются о том, как часто просыпаться и общаться. В промежутках обе снова засыпают.
Эти три различия и уводят остальную часть API BLE прочь от модели сокетов.