КОГДА НАЧАТЬ?

Web Bluetooth API — это относительно новая экспериментальная технология, которая позволяет пользователю подключаться к устройству Bluetooth с низким энергопотреблением (BLE) прямо из веб-браузера. Он еще не имеет широкой поддержки во всех браузерах, но совместим с Google Chrome. Чтобы использовать API, вы должны включить экспериментальные функции веб-платформы в настройках Chrome, посетив ://flags.

После этого нужно просто написать несколько хороших асинхронных функций в старом добром JavaScript. Я начал экспериментировать с этой технологией, посмотрев видеодемонстрацию API очень интересным Нильсом Линхеером и следуя некоторым примерам из этой статьи на web.dev.

Впервые я заинтересовался идеей поиграться с технологией Bluetooth, когда наткнулся на эту статью о взломе лампочки BLE. Как бы весело ни звучало взлом лампочки, в конечном счете, я использовал эту информацию для создания проекта под названием Voice2Vibes, который подключается к вибратору Bluetooth под названием Moxie от We-Vibe, а также использует API веб-речи, чтобы позволить пользователь может использовать голосовые команды для управления вибратором.

Что такое БЛЕ?

BLE (или Bluetooth Low Energy) — это современная технология Bluetooth, которую мы все знаем и любим. Он лучше, быстрее и мощнее, чем традиционный Bluetooth, и потребляет меньше энергии, поэтому устройства BLE могут работать от меньших батарей в течение более длительных периодов времени.

Центральные устройства — это устройства, такие как ваш компьютер или мобильный телефон, которые могут обмениваться данными и подключаться к периферийным устройствам BLE. Периферийные устройства, такие как лампочка или динамик, могут подключаться только к одному центральному устройству и не могут взаимодействовать с другими периферийными устройствами. Центральные устройства могут быть подключены ко многим периферийным устройствам одновременно.

Устройства BLE используют протокол Generic Attribute Profile (GATT) для подключения и обмена данными друг с другом. Центральные устройства называются «клиентами», а периферийные устройства — «серверами».

Придерживаясь нашего Javascript, сервер похож на массив объектов. Каждый сервер имеет множество служб (которые являются объектами в массиве), которые включают в себя такие вещи, как информация об устройстве, информация о батарее и контроллеры. Характеристика подобна свойству этого объекта, и каждая услуга может иметь много характеристик. Наконец, каждая характеристика имеет значение. Некоторые характеристики доступны только для чтения, то есть они отправляют информацию клиенту. Другие читаются и записываются, то есть вы можете отправлять информацию от клиента к этой характеристике, которая может что-то изменить (например, включить или выключить устройство) о сервере, с которым вы разговариваете. Вы также можете получать уведомления, если значение характеристики изменяется.

РАЗРАБОТАЙТЕ СВОИ ШПИОНСКИЕ НАВЫКИ

Первое, с чего я начал свой проект, это научиться шпионить за устройствами BLE. Я скачал для своего телефона приложение под названием LightBlue, которое позволяет вам видеть все периферийные устройства BLE рядом с вами. Мне удалось найти Мокси по имени и подключиться к нему. Я заметил, что у вибратора было два сервиса. Один был очень четкой информацией об устройстве, поэтому я подумал, что другой может быть контроллером. Я подключил Moxie к уже созданному We-Vibe приложению под названием We-Connect. Я нашел единственную характеристику в другом сервисе, которая была чтение/запись, и начал включать и выключать вибратор с помощью приложения We-Connect. По мере изменения сигналов я перечитывал значения характеристики и вскоре смог различить шестнадцатеричный шаблон значений, отправляемый туда и обратно.

Затем я смог настроить базовое приложение Web Bluetooth API с некоторым количеством Javascript и несколькими кнопками в файле HTML, чтобы узнать, как подключаться к устройству и включать и выключать его. Позже я применил эти основы к проекту React (код ниже).

БЕЗОПАСНОСТЬ?

Пока все это кажется удивительно легким? Это потому, что это так. Известно, что технология BLE имеет слабую безопасность. Ситуация становится еще хуже, если учесть устройства в индустрии секс-технологий (секс-технологии, также известные как Teledildonics), где практически ни одна компания, производящая эти устройства, не соответствует отраслевым стандартам безопасности. Кроме того, We-Vibe уже выплатила компенсацию пользователям, утверждающим, что они собирали пользовательские данные о том, как использовалось устройство (например, скорость вибрации и температура тела) без ведома клиента. Это определенно поднимает некоторые интересные вопросы о технологии BLE и опасения по поводу индустрии секс-технологий.

Одно дело, если кто-то взломает вашу лампочку или динамик BLE в вашем доме, и совсем другое дело, если кто-то взломает вашу секс-игрушку.

СОЗДАНИЕ КОМПОНЕНТА BLUETOOTH ДЛЯ REACT

Мой проект использовал React в качестве внешнего интерфейса, поэтому в итоге я создал компонент Bluetooth для своего сайта. Этот компонент состоял из простой кнопки «Подключиться» и некоторого волшебного кода Web Bluetooth API в фоновом режиме. Вам нужна какая-то кнопка или пользовательский ввод, потому что API будет инициировать поиск устройств BLE только по действию пользователя.

Я использовал асинхронную функцию, чтобы установить переменную с именем «устройство» в результат navigator.bluetooth (из API WebBluetooth) .requestDevice.

Затем я сохранил устройство, сервер, службу и характеристику, которые я писал, в состоянии класса моего приложения.

Я также добавил функцию, которая предупреждает пользователя о потере соединения с устройством через addEventListener.

ЗАПИСЬ ЗНАЧЕНИЙ В ХАРАКТЕРИСТИКУ

После того, как вы подключились к устройству и установили переменную, равную характеристике, которую вы хотите записать, отправить значение так же просто, как:

новый Uint8Array создает типизированный массив 8-битных целых чисел без знака, который является информацией, которую вы отправляете на устройство. Как я упоминал ранее, я использовал приложение LightBlue для чтения информации, отправляемой на вибратор через существующее приложение, и просто скопировал шестнадцатеричные значения. Также есть более изощренные способы считывания сигналов между вашими центральными и периферийными устройствами.

Вот и все! Вы подключились к устройству и пишете в характеристику. Это основы! Не нужно идти вперед и исследовать все забавные способы взаимодействия с устройствами BLE вокруг вас!

ПРИМЕЧАНИЕ ОБ ИНКЛЮЗИВНЫХ ТЕХНОЛОГИЯХ

Хотя, по общему признанию, взлом вибратора BLE был просто очень увлекательным опытом обучения, я также разработал свой проект Voice2Vibes с учетом инклюзивности. Приложение, активируемое голосом, может позволить пользователю с ограниченной подвижностью или двигательной функцией лучше взаимодействовать со своим вибратором. Кроме того, это расширяет возможности взаимодействия партнеров в отношениях на расстоянии (LDR) или тех, кто находится на карантине во время COVID. Наконец, это приложение избегает использования гендерного языка, например, говоря, что MOXIE — это вибратор для женщин, и вместо этого использует людей с вульвой (напоминание: не у всех женщин есть вульва, и не все люди, у которых есть вульва, — женщины!).