Беспроводные технологии появились несколько десятков лет назад. Не так давно мы писали в своем блоге об истории WiFI, а теперь самое время вспомнить о «родственнике» — технологии Bluetooth.
Без WiFi и Bluetooth, вероятно, современный мир выглядел бы несколько иначе, и не обязательно — лучше. Нам повезло — раз став популярной, технология Bluetooth продолжала развиваться, получая все новые возможности.
Как все начиналось
Идея о создании беспроводной технологии передачи данных, кроме WIFi, появилась не вдруг. Пробовали реализовать ее такие крупные игроки IT-рынка, как Ericsson, Nokia, Intel, Toshiba и несколько других компаний.
Для концентрации и фокусирования их усилий в марте 1998 года была создана группа SIG — Special Interest Group, куда и вошли все эти и другие компании. У участников было несколько критически важных пожеланий к Bluetooth:
- Технология должна быть надежной.
- Беспроводная передача данных должна быть простой.
- Ее должны поддерживать большинство гаджетов.
- Bluetooth должна быть универсальной, чтобы смартфоны, ноутбуки и другие гаджеты могли предлагать возможности беспроводной связи.
Забегая наперед, стоит сказать, что организаторы SIG добились чего хотели. Технология стала сверх-востребованной и популярной. Модуль Bluetooth входит в конструкции большинства современных электронных гаджетов. Проще сделать список не поддерживающих Bluetooth-гаджетов, чем список тех устройств, которые работают с этой технологией.
Развитие происходило и происходит бурными темпами. В настоящий момент в состав группы SIG входит более 30 тысяч компаний со всего мира.
Первое поколение
Первая версия протокола так и называлась — Bluetooth 1.0, она появилась в 1998 году. К ней предъявляли претензии — как компании, так и обычные пользователи, которые жаловались на совместимость устройств, сложность в настройке и т.п.
К сожалению, насчет совместимости действительно были проблемы — далеко не все гаджеты быстро и оперативно выявляли все Bluetooth-устройства поблизости. Кроме того, у разных девайсов были различные версии беспроводного модуля, так что вполне могло случиться так, что два устройства с вроде бы одинаковыми версиями Bluetooth не видели друг друга.
Чуть позже появилась обновленная версия — 1.0В. И в 2000 году появилась версия Bluetooth 1.1 с большим количеством улучшений — теперь пользователи получили возможность определять уровень сигнала беспроводного соединения и передавать данные по незашифрованным каналам. А устройства в большинстве случаев видели друг друга. Конечно, проблемы случались, но в большинстве случаев все работало как надо.
Ну и «в люди» Bluetooth вышел уже начиная с версии 1.2. Она отличалась повышенной пропускной способностью канала (вплоть до 1 Мбит/с) и улучшения помехоустойчивости. Плюс появилась поддержка профиля A2DP, что означало возможность передавать стереозвук.
Версия 2.0
Спустя четыре года после выхода версии Bluetooth 1.1 появился Bluetooth 2.0. Конечно, по сравнению с предыдущим поколением улучшений была масса. Вот главные:
- Увеличенная до 3 Мб/с скорость передачи данных. Правда, это была теоретическая скорость, на практике этот показатель составлял примерно 2 Мб/с.
- Появление EDR, что улучшило качество приема и передачи.
- Возможность работать одновременно с несколькими устройствами.
Версия 2.1 появилась через несколько лет после выхода 2.0. Разработчикам удалось очень сильно снизить энергопотребление, упростить работу с несколькими устройствами. А еще появилась технология NFC.
В последнем варианте версии 2.1 энергопотребление удалось снизить в пять раз, плюс значительно улучшить защиту передаваемых данных.
А теперь — версия 3.0
Здесь вообще улучшили все и вся. Особенно отличились разработчики в плане улучшения скорости передачи данных. Теоретический предел ширины канала — 24 Мб/с. На практике получалось несколько ниже, но все равно гораздо больше, чем у версии 2.0.
Интересно, что версия 3.0 включала и 2.0. Более новая использовалась в том случае, если нужно было передать большой объем данных. Предыдущая — в том случае, если файл маленький высокая скорость передачи данных не особо нужна.
Через год — Bluetooth 4.0
Каждая новая версия Bluetooth появлялась быстрее, чем предыдущая. Так, «четверка» вышла всего через год после «тройки». Производители мобильных устройств не успели еще освоить закупленные чипы с Bluetooth 3.0, а уже надо было выпускать модели устройств с обновленным стандартом.
Огромный плюс 4.0 — в низком энергопотреблении. Оно настолько небольшое, что модули Bluetooth стало возможным устанавливать в небольшие датчики, сенсоры и прочие устройства. Экономия энергии стала возможной благодаря тому, что чип активируется лишь в момент отправки или приема данных.
В итоге обычной батарейки CR2032 хватает для нескольких лет работы модуля 4.0. Именно благодаря этой особенности четвертого поколения беспроводной связи стало возможным выпускать поисковые метки для ключей, кошельков и т.п. Раньше такое и представить было невозможно.
В четвертой версии значительно увеличен радиус действия — вплоть до 100 метров.
Эта версия продержалась несколько лет, с разными улучшениями, добавляемыми в апдейтах протокола — 4.1 и 4.2.
И, наконец, Bluetooth 5.0
16 июня 2016 года Bluetooth Special Interest Group (SIG) представила спецификацию Bluetooth 5.0. Радиус увеличили еще в четыре раза, до 300 метров, а скорость, по сравнению с «четверкой» — в два, до 48 Мбит / с. В помещении радиус действия беспроводной связи уменьшается до 40 метров, что тоже очень неплохо.
Кроме того, в этой версии удалось избавиться от проблем в протоколе, которые приводили к эксплуатации уязвимостей злоумышленниками. Речь идет о проблеме BlueBorne, которая привела к компрометации большого количества устройств.
Bluetooth 5 идеально подходит для IoT устройств благодаря низкому энергопотреблению и высокой скорости передачи данных. Одно из достоинств этой версии беспроводной связи — то, что она может работать в очень загруженных с точки зрения радиоизлучения местах.
Bluetooth 5 используется в большом количестве устройств, включая промышленный IoT, любые носимые устройства, от трекеров до умных часов, смартфонах, медиацентрах, ноутбуках и т.п.
А еще — звук можно транслировать сразу на несколько устройств, так что к одному источнику может подключиться сразу несколько пользователей. Эта возможность была усовершенствована в версии Bluetooth 5.2. Она включает LE Isochronous Channels — функцию для поддержки нового стандарта передачи аудио LE Audio. Она дает возможность передавать данные с привязкой ко времени на одно или несколько устройств для синхронизированной по времени обработки (пример: беспроводные наушники с раздельными приёмниками), а также для параллельной трансляции на неограниченное количество устройств. Версия 5.2 появилась в начале января 2020 года.
Что касается Bluetooth 6.0, то, вероятно, разработка новой спецификации уже ведется, но информации по ней пока нет, так что ждем.
DMGarikk
еще бы не было в этом стандарте такого дурдома с протоколами и несовместимостью стеков друг с другом…
Помню прям пригорело, BT LE может не поддерживать BT старых поколений… они тупо выкинули весь стек до него и всё, досвидания эмулятор COM порта… если производитель девайса (например донгла-адаптера) не заморочился поддержкой старых стандартов, а реализовал вожделенные модные BT LE… всё ничего кроме него работать не будет (у вас старое устройство? ха… давайдосвидания)
А то что в природе не существует вменяемых библиотек для работы с ним… так вообще печальбеда, ни документации, ни примеров, нифига. только платные стеки.
p.s. может плохо искал?
NikitOS9
BT LE != BT так как задачи разные
romxx
LE это вообще отдельная история и отдельный проект, в значительной степени разработанный с нуля, так что неудивительно, что он малосовместим с обычным Bluetooth.
PleaseKING
Ну скйчас-то уже есть библиотеки для BLE примерно для всего, под какую платформу не можете найти? Но поначалу да, было все печально.
DMGarikk
Ну вот есть либа для Java?
и «примерно для всего»… это далеко даже не для половины протоколов стека, например я вспотел в свое время искать как передавать аудио самостоятельно… в половине библиотек в лучшем случае реализован только эмулятор ком порта ну и BLE ф-ции (кстати тоже зачастую урезанные)
Или HID как сделать через него?
PleaseKING
Вроде есть: https://github.com/intel-iot-devkit/tinyb/
Хотя конечно для джавы нужна бы поддержка Bluetooth в самой JVM — иначе как — а это мало кому нужно. Но для всех "нативных" платформ — мобильные, десктопные, встраиваемые — вроде как есть.
Я и не говорю, что весь функционал классического блютуса повторен в BLE — нет, не весь — но тот, что есть, обычно вполне доступен.
HID: вот, например: http://software-dl.ti.com/simplelink/esd/simplelink_cc2640r2_xpack/1.50.00.62/exports/examples/rtos/CC2640R2RC/bleapps/hid_adv_remote/README.html
DMGarikk
1) там только BT LE
2) last commit 3 years ago
3) даже ссылки в описании на «guide for getting started with TinyB on Java is available here» протухли
есть еще либа bluecove где хотябы работают старые протоколы, но она протухла еще в конце 2000х и рабочий вариант надо собирать из dev ветки вручную
эмулятора com там нет
а теперь тоже самое но для bluetooth версий 1,2,3, устройств ;) я помню много времени убил на курение мануалов… там всё начинается 'так, берете GATT профиль, он есть у всех bt4 устройств и юзаете'… а у меня железка была старенькая совсем и 'а я такого не умею'
PleaseKING
Ну дык вы же спрашивали либу для BT LE — вот либа для BT LE.
HID: вы же спрашивали про HID на BT LE?.. Да, для старых устройств без BT LE надо будет по-другому делать. Вот официальная спека для HID для классических устройств: https://www.bluetooth.org/docman/handlers/downloaddoc.ashx?doc_id=309012.
DMGarikk
которая уже 3 года не обновляется и врятли будет, ну такое себе
==
спека это хорошо, а вот библиотек для этого всего нет
PleaseKING
Это, скорее, проблема экосистемы для Java, чем BLE. Ну не пишет никто на джаве что-либо для Блютуса.
То, что нет либ для Bluetooth Classic для устаревшего функционала, весьма логично..
DMGarikk
вот о чем я и говорю, каким блин образом часть крайне необходимого и удобного функционала стала depricated?
Да такое впечатление что для него никто не пишет особо то в принципе
жизнь теплится только в андройде, в сдк которого его поддержка встроена
PleaseKING
Ну комитет проголосовал — и стала. Bluetooth Classic умирает, да. Но для всех сервисов (насколько я знаю) есть альтернатива в BLE.
Да вроде очень активно используется, IoT там всякое. Поддержка есть также в iOS, Linux, Windows, всякий embedded системах типа Zephyr и Mongoose, — да почти везде.
DMGarikk
RFCOMM вроде бы как оно не умеет
PleaseKING
Легко эмулируется: https://docs.silabs.com/bluetooth/2.13/code-examples/applications/spp-serial-port-profile-over-ble — примеров в сети несть числа.
DMGarikk
да, проприетарным стеком, как кстати у него с лицензиями?
вы привели пример коммерческого продукта, который совершенно не факт что будет работать с любым (не silicon labs) адаптером
PleaseKING
Это же на уровне приложение эмулируется, не стеком. Определяете две характеристики — прием и передача — в одну пишете, из другой читаете. Это пример, а не стек. Кода строк на 50, наверное, и пример показывает, как его написать.
ВСЕ современные ОС не нуждаются ни в каких доп стеках для поддержки BLE, у всех все работает из коробки. Эмуляция RFCOMM делается (как сказано выше) поверх этих самых доступных всем API.
Код от Silicon Labs, возможно, нужен, чтобы программировать сам чип и делать устройства на его основе.
Середина 2000-х годов была 15 лет назад :)
DMGarikk
ох… я уже устал
вы же понимаете что 'simple template for SPP-like communication. ' это не SPP профиль?
Я писал соединения не между компьютерами, у меня одним из устройств был GPS навигатор который отдает NMEA через SPP, для него всякие эти заклинания типа GATT и прочие BLE — это реально что заклинания
так то понятно что можно через аттрибуты наваять передачу какихто данных, когда обе стороны под моим контролем, но я то хочу (хотел) со сторонними железками работать
PleaseKING
А, извините, не понял — да, с таким кейсом все плохо, Bluetooth Classic поддержан очень по-разному, но хорошего мало. Для старых приборов мало что изменилось. Но их с каждым годом все меньше...
Собственно, BLE и был (в целом успешной) попыткой упростить разработку приложений для Bluetooth — модель с характеристиками дает ясный API для широкого спектра применений, тогда как на классике надо было либо впихиваться в RFCOMM и изобретать свой бинарный протокол, либо делать свой профиль и свой стек, его поддерживающий.
Ну и сейчас никто не будет делать новые приборы с BT Classic, так что, повторюсь, для новых приборов проблем-то нет.
DMGarikk
корпорациями — да, везде всё работает, встроено, заявлено. Но ни на SO, ни на гитхабе ничего на нейти дальше простеньких примеров
PleaseKING
Эээ а что конкретно вам нужно "дальше простеньких примеров"? GATT API BLE очень простой, примеры позволяют вам с ним освоиться — а дальше делайте, что вам нужно.
Для сложных вещей типа звука, сети, Mesh примеры от производителей чипов есть.
stalinets
Ну тем не менее BLE — это очень круто, благодаря нему стало возможно то, что было нереально раньше. Например, дозиметры Atom, имея на борту крошечный аккумулятор и размер чуть больше зажигалки, работают месяцами без зарядки, будучи постоянно связаны с базовым устройством (обычно смартфон), передавая на него каждые 2 секунды намерянные по радиации данные. На старых версиях блютуза пришлось бы ставить большой аккумулятор и заряжать его гораздо чаще.
Это только тот пример, который я знаю. Но наверняка ведь то же самое во всяких гарнитурах и часах, где также очень ограничены возможности питания.
Ради такого прорыва можно потерпеть отказ от старых версий.
DMGarikk
но либы то где либы, живые, поддерживаемые и без depricated и описание вменяемое
а то 'ну интел для своих iot выпустила опенсорс либу… потом забила на это направление… и теперь это единственная либа в отрасли'
p.s. мне чёт кажется что bt вообще особо никому не нужен из DIY-щиков
PleaseKING
Для iOS, Android, Windows, Linux, Zephyr есть масса либ и нативных интерфейсов… Масса примеров и документации.
Может быть, для Java это не так, но что, кто-то пишет на Java не для серверов?..