Как передать звук без проводов? Обзор Ugreen CM108 — Bluetooth-приемника/передатчика с поддержкой AptX Low Latency


Технический прогресс идет вперед семимильными шагами, сейчас даже дошкольники имеют мобильный и умеют выходить в интернет, а видя человека, разговаривающего на улице самого с собой, никто не покрутит пальцем у виска – уже все знакомы с гарнитурой-Bluetooth, относящейся к беспроводным технологиям. Работает такой передатчик с использованием закодированных сигналов, что, помимо удобства, позволяет защитить личные данные. Беспроводной модуль позволяет наладить связь среди нескольких устройств.

Применение Bluetooth

Это приспособление встраивают сейчас практически во все сотовые телефоны, многие модели ноутбуков. Это позволяет значительно расширить их коммуникативные способности:

  • Можно обмениваться различными файлами (фотографиями, видео, музыкой) между телефонами, телефоном и ноутбуком, коммуникатором, камерой.
  • Модуль позволяет подключать к телефонам или персональным компьютерам какие-либо периферийные устройства (беспроводную гарнитуру, наушники, колонки, видеокамеры и прочие гаджеты).
  • Разговаривать по телефону, не держа его руками.
  • Можно создать беспроводную сеть между несколькими своими ПК и другими устройствами дома или в небольшом офисе, что позволить иметь постоянный доступ к необходимым файлам с любого устройства.
  • Bluetooth-адаптер дает возможность выходить в интернет, синхронизировав ПК с мобильным.

То есть беспроводные устройства необходимы не только для использования гарнитуры «свободные руки», но и облегчают коммуникацию между компьютером и гаджетами.

Как выбрать

При покупке вluetooth адаптера специалисты рекомендуют обращать внимание на такие параметры устройства:

  1. Совместимость. При подключении адаптера к автомагнитоле должно отображаться меню на кириллице. Если этого нет, это означает, что устройство не совместимо с магнитолой в машине.
  2. Современные модели обладают возможностью выполнения обновления софта. Это даст возможность использовать приспособление эффективно.
  3. Наличие функции набора в голосовом режиме существенно расширяет возможности адаптера.
  4. Простота подключения к магнитоле. Это должно быть просто и доступно для каждого водителя.
  5. Производитель. Лучше отдать предпочтение на моделях известных брендов, что обеспечивает качество и функциональность приспособления.

Установка блютуз адаптера это не только удобно, но и выгодно в дороге. Приспособление не дает водителю отвлекаться от управления транспортным средством, а также повышает качество звучания.

Как сделать внутренний bluetooth модуль для ноутбука?

Для активного человека может быть неудобным пользоваться внешним bluetooth-адаптером. Некоторые умельцы предлагают модифицировать его своими руками во внутренний, перепаяв устройство на USB-разъем. Этот вариант подойдет только тем, кто тесно дружит с паяльником и имеет опыт по сборке-разборке ноутбуков.

Работа по усовершенствованию гаджета своими руками ведется в несколько этапов:

  • Ноутбук аккуратно разбирается.

  • Подбирается свободное место для размещения модуля и проводов.
  • Разбирается сам рабочий адаптер с помощью ножа или другого острого предмета.
  • Отпаивается выбранный USB-разъем.

  • К bluetooth-передатчику припаивают 4 провода, соединив их затем последовательно с контактами USB. Важно правильно соблюсти последовательность.

  • Установить модуль в подготовленное место и собрать ноутбук.
  • Установить на компьютер необходимые драйвера.

Если все сделано со знанием дела, то устройство должно заработать.

Создание веб-приложения

Разминка окончена, переходим к самому интересному!

Концепция

Предлагаю рассмотреть концепцию управления вашим девайсом. На обычной HTML странице в браузере вы создаете некий UI с разнообразными контролами, которые будут реализовать взаимодействие с вашим устройством.

Если это, к примеру, роботизированная рука, двигающаяся по трём координатам и открывающая и закрывающая клешню, то это может быть три числовых слайдера или даже 2D поверхность, при нажатии на которую вычисляются значения X и Y, один слайдер для движения по оси Z и кнопка, открывающая или закрывающая клешню. Если это чайник, вы можете сделать кнопку «Вскипятить!». Если же это радиоуправляемая машинка, то вы можете сделать кнопки «вперед», «назад», «влево», «вправо», «включить/выключить фары», «подать сигнал» и тому подобные.

Повесив обработчики на нажатия или изменения состояний тех или иных элементов UI в JavaScript, вы формируете некоторое сообщение, которое отправляете посредством Web Bluetooth API на ваш девайс. BLE модуль получает сообщение, передает его контроллеру по UART, контроллер разбирает сообщение, предпринимает требуемые действия и может отправить ответ или ошибку в виде сообщения обратно BLE модулю по тому же UART, тогда модуль передаст его подключенному устройству, а вы получаете ответ с помощью JS в браузере.

Например, при нажатии на кнопку закрытия клешни, срабатывает обработчик кнопки onclick, который отправляет сообщение GRIPPER=CLOSE. Контроллер получает сообщение, понимает что от него требуется, закрывает клешню и отправляет назад сообщение GRIPPER=CLOSED. Обрабатывая это сообщение, мы в JS запоминаем состояние клешни и меняем текст на кнопке на «Открыть».

Задача

Создание HTML страницы (UI) и простая работа с JavaScript обработчиками событий это не такое уж сложное дело и здесь достаточно базовых знаний веб-технологий. Поэтому я предлагаю абстрагироваться от конкретного устройства и создать приложение-терминал, которое будет подключаться к вашему девайсу и обмениваться с ним сообщениями.
Также мы реализуем логирование процесса подключения к Bluetooth Low Energy устройству, переподключение в случае потери связи и обойдём ограничение длины BLE характеристики в 20 байт.

Ну и под конец превратим обычную HTML страницу в прогрессивное веб-приложение (про Progressive Web Apps на Google Developers, в Википедии — in English), которое можно будет установить на рабочий стол смартфона и использовать в условиях отсутствия интернета.

Получив возможность обмениваться сообщениями между HTML страницей и вашим устройством, стабильное соединение и простой API, заточить приложение под ваши нужды не составит большого труда.

Подготовка

Кроме любимой IDE вам понадобится работающий «девайс», который мы настроили ранее, это поможет в реальном времени получать и отправлять сообщения через терминальную программу на компьютере для тестирования приложения.
Web Bluetooth API доступен по умолчанию в Chrome 56+ и Opera 43+. В статье Google Developers также упомянуто, что в Linux нужно включить флаг chrome://flags/#enable-experimental-web-platform-features и перезагрузить браузер.

И последний немаловажный момент: веб-приложение должно открываться либо под HTTPS (можно использовать GitHub Pages), либо под https://localhost — таковы требования безопасности.

UI

Приложение будет состоять из одной HTML страницы index.html, одного файла стилей styles.css и одного main.js файла, в котором будет происходить вся магия.
Сделаем кнопку для подключения к устройству, кнопку отключения, div-контейнер для сообщений и форму отправки, состоящую из текстового поля и кнопки «Send»:

index.html

Connect Disconnect
Send В div-контейнер будем выводить лог подключения, входящие и исходящие сообщения в следующем виде:
Подключение к устройству…

Исходящее сообщение

Входящее сообщение

Чтобы не гадать какое сообщение откуда, разделим их по цветам в стилях:

styles.css

#terminal div { color: gray; } #terminal div.out { color: red; } #terminal div.in { color: blue; }
Как видите, ничего особенного. Интерфейс готов :)

Обработчики событий

Дальнейшая работа будет происходить в main.js.
Получим ссылки на элементы UI, повесим обработчики на клик по кнопкам подключения и отключения и на отправку формы:

// Получение ссылок на элементы UI let connectButton = document.getElementById(‘connect’); let disconnectButton = document.getElementById(‘disconnect’); let terminalContainer = document.getElementById(‘terminal’); let sendForm = document.getElementById(‘send-form’); let inputField = document.getElementById(‘input’); // Подключение к устройству при нажатии на кнопку Connect connectButton.addEventListener(‘click’, function() { connect(); }); // Отключение от устройства при нажатии на кнопку Disconnect disconnectButton.addEventListener(‘click’, function() { disconnect(); }); // Обработка события отправки формы sendForm.addEventListener(‘submit’, function(event) { event.preventDefault(); // Предотвратить отправку формы send(inputField.value); // Отправить содержимое текстового поля inputField.value = »; // Обнулить текстовое поле inputField.focus(); // Вернуть фокус на текстовое поле }); // Запустить выбор Bluetooth устройства и подключиться к выбранному function connect() { // } // Отключиться от подключенного устройства function disconnect() { // } // Отправить данные подключенному устройству function send(data) { // }

Подключение к устройству

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

  1. Запрос Bluetooth устройства: браузер запускает диалог поиска и выбора ближайшего устройства, пользователь осуществляет выбор, код приложения получает объект.
  2. Подключение к устройству из кода приложения: подключение к серверу профиля общих атрибутов (GATT Server),
  3. получение нужного сервиса,
  4. получение нужной характеристики.
  • Включение уведомлений об изменении характеристики — необходимо, чтобы получать сообщения от вашего девайса.
  • Оформим в коде:

    // Кэш объекта выбранного устройства let deviceCache = NULL; // Запустить выбор Bluetooth устройства и подключиться к выбранному function connect() { return (deviceCache ? Promise.resolve(deviceCache) : requestBluetoothDevice()). then(device => connectDeviceAndCacheCharacteristic(device)). then(characteristic => startNotifications(characteristic)). catch(error => log(error)); } // Запрос выбора Bluetooth устройства function requestBluetoothDevice() { // } // Подключение к определенному устройству, получение сервиса и характеристики function connectDeviceAndCacheCharacteristic(device) { // } // Включение получения уведомлений об изменении характеристики function startNotifications(characteristic) { // } // Вывод в терминал function log(data, type = ») { // } Мы реализовали в функции connect() Promise цепочку (цепочку функций, возвращающих Promise объекты), соответствующую этапам подключения.

    Также мы ввели переменную deviceCache, в которую в дальнейшем запишем объект выбранного пользователем устройства для того, чтобы знать к чему переподключаться в случае разъединения.

    В первой строчке тела функции connect() тернарный оператор немедленно создает выполненный Promise с объектом deviceCache, если тот не равен нулю, или обращается к функции запроса выбора Bluetooth устройства в противном случае. Таким образом, если пользователь уже подключился к устройству, то при последующем нажатии на кнопку «Connect», диалог выбора устройства не появится.

    Если происходит ошибка на любом из этапов, мы выводим её в терминал с помощью функции log(), которую также реализуем позднее.

    Запрос Bluetooth устройства

    Чтобы запросить выбор Bluetooth устройства, необходимо вызвать функцию navigator.bluetooth.requestDevice() c объектом-конфигурацией в качестве обязательного аргумента, который описывает какие Bluetooth устройства нам интересны. Можно использовать фильтр по сервисам, по имени, можно принять все устройства, но используемый сервис всё равно необходимо указать, иначе браузер не предоставит доступ к нему. // Запрос выбора Bluetooth устройства function requestBluetoothDevice() { log(‘Requesting bluetooth device…’); return navigator.bluetooth.requestDevice({ filters: [{services: [0xFFE0]}], }). then(device => { log(‘»‘ + device.name + ‘» bluetooth device selected’); deviceCache = device; return deviceCache; }); } Мы же запрашиваем все устройства, предоставляющие сервис с UUID 0xFFE0, на использование которого конфигурировали BLE модуль. После выбора устройства пользователем, Promise выполняется с объектом устройства, который мы записываем в вышеупомянутый кэш и возвращаем далее.

    Подключение к устройству, получение объектов сервиса и характеристики

    // Кэш объекта характеристики let characteristicCache = NULL; // Подключение к определенному устройству, получение сервиса и характеристики function connectDeviceAndCacheCharacteristic(device) { if (device.gatt.connected && characteristicCache) { return Promise.resolve(characteristicCache); } log(‘Connecting to GATT server…’); return device.gatt.connect(). then(server => { log(‘GATT server connected, getting service…’); return server.getPrimaryService(0xFFE0); }). then(service => { log(‘Service found, getting characteristic…’); return service.getCharacteristic(0xFFE1); }). then(characteristic => { log(‘Characteristic found’); characteristicCache = characteristic; return characteristicCache; }); } Выполняем простую Promise цепочку, которая говорит сама за себя. Переменная characteristicCache — по аналогии с deviceCache — сохраняет полученный объект характеристики, он потребуется для записи в него данных, то есть для отправки сообщения из браузера устройству.
    В функциях getPrimaryService() и getCharacteristic() в качестве аргументов используются UUID, на работу с которыми настроен BLE модуль.

    Включение уведомлений об изменении характеристики

    // Включение получения уведомлений об изменении характеристики function startNotifications(characteristic) { log(‘Starting notifications…’); return characteristic.startNotifications(). then(() => { log(‘Notifications started’); }); } Достаточно обратиться к методу startNotifications() объекта характеристики, после чего повесить обработчик на событие изменения характеристики, но об этом позднее.

    Вывод в терминал

    Реализуем функцию вывода в терминал, чтобы прямо сейчас протестировать подключение к девайсу: // Вывод в терминал function log(data, type = ») { terminalContainer.insertAdjacentHTML(‘beforeend’, ‘

    Тестирование

    Откройте страницу в браузере, нажмите кнопку «Connect», после чего запустится диалог выбора устройства. Подключитесь к своему девайсу, в терминале появятся сообщения о процессе подключения.

    Тут я столкнулся с парой подводных камней, о которых нигде не написано. Вывод сервисных сообщений помог диагностировать и устранить проблемы.

    Первый заключается в том, что когда я подключался к устройству с телефона, к которому привязан Mi Band, также работащий по BLE и находящийся в непосредственной близости, подключение устанавливалось крайне редко, а если и устанавливалось, то практически сразу отваливалось. Такое происходило даже в нативных приложениях. Пробовал отнести Mi Band на расстояние — не помогло. Отвязывать браслет не стал, просто использую другой смартфон. Если у вас возникнут аналогичные проблемы, обратите внимание на устройства, которые параллельно общаются с вашим смартфоном.

    Второй камень скорее не камень, а особенность, проявляющаяся обычно при первом подключении: соединение может внезапно потеряться без видимых на то причин, а браузер не обеспечивает его поддержку, именно поэтому функционал переподключения нам необходимо реализовать самостоятельно.

    Автоматическое переподключение

    Для отслеживания разъединения, Web Bluetooth предлагает событие gattserverdisconnected, обработчик которого следует повесить на объект устройства. Наиболее логичным местом для этого является функция выбора устройства: // Запрос выбора Bluetooth устройства function requestBluetoothDevice() { log(‘Requesting bluetooth device…’); return navigator.bluetooth.requestDevice({ filters: [{services: [0xFFE0]}], }). then(device => { log(‘»‘ + device.name + ‘» bluetooth device selected’); deviceCache = device; // Добавленная строка deviceCache.addEventListener(‘gattserverdisconnected’, handleDisconnection); return deviceCache; }); } // Обработчик разъединения function handleDisconnection(event) { let device = event.target; log(‘»‘ + device.name + ‘» bluetooth device disconnected, trying to reconnect…’); connectDeviceAndCacheCharacteristic(device). then(characteristic => startNotifications(characteristic)). catch(error => log(error)); } Теперь, если вы подключитесь к устройству, а затем обесточите его, и Bluetooth соединение потеряется, браузер единоразово попробует подключиться заново:

    Отключение от устройства

    Перед отключением важно не забыть снять назначенный обработчик с события gattserverdisconnected, иначе браузер просто будет переподключаться: // Отключиться от подключенного устройства function disconnect() { if (deviceCache) { log(‘Disconnecting from «‘ + deviceCache.name + ‘» bluetooth device…’); deviceCache.removeEventListener(‘gattserverdisconnected’, handleDisconnection); if (deviceCache.gatt.connected) { deviceCache.gatt.disconnect(); log(‘»‘ + deviceCache.name + ‘» bluetooth device disconnected’); } else { log(‘»‘ + deviceCache.name + ‘» bluetooth device is already disconnected’); } } characteristicCache = NULL; deviceCache = NULL; } Можно не обнулять deviceCache, тогда при последующем нажатии кнопки «Connect» диалог выбора устройства не будет появляться, подключаясь к прошлому устройству вместо этого.

    Получение данных

    Получение данных от устройства осуществляется асинхронно с помощью механизма уведомлений, которые возникают, когда изменяется значение BLE характеристики. Нам лишь нужно подписаться на соответствующие событие characteristicvaluechanged характеристики. Сделать это следует после включения уведомлений. Также будет правильно снять обработчик с характеристики при отключении устройства: // Включение получения уведомлений об изменении характеристики function startNotifications(characteristic) { log(‘Starting notifications…’); return characteristic.startNotifications(). then(() => { log(‘Notifications started’); // Добавленная строка characteristic.addEventListener(‘characteristicvaluechanged’, handleCharacteristicValueChanged); }); } // Отключиться от подключенного устройства function disconnect() { if (deviceCache) { log(‘Disconnecting from «‘ + deviceCache.name + ‘» bluetooth device…’); deviceCache.removeEventListener(‘gattserverdisconnected’, handleDisconnection); if (deviceCache.gatt.connected) { deviceCache.gatt.disconnect(); log(‘»‘ + deviceCache.name + ‘» bluetooth device disconnected’); } else { log(‘»‘ + deviceCache.name + ‘» bluetooth device is already disconnected’); } } // Добавленное условие if (characteristicCache) { characteristicCache.removeEventListener(‘characteristicvaluechanged’, handleCharacteristicValueChanged); characteristicCache = NULL; } deviceCache = NULL; } // Получение данных function handleCharacteristicValueChanged(event) { let value = new TextDecoder().decode(event.target.value); log(value, ‘in’); } event.target.value — это объект DataView, содержащий ArrayBuffer, в котором находится сообщение от вашего девайса. Используя TextDecoder (MDN, in English only), мы перегоняем массив байтов в текст.
    Тестирование показывает, что прием сообщений с устройства работает стабильно, с окончанием строки символами CR, LF или без них. Длинные сообщения доходят полностью, но разбиваются кратно 20 байтам.

    Введение промежуточного буфера

    Возможно, вам не потребуется поддержка сообщений длиной более 20 байт, однако для полноты картины давайте обойдём это ограничение. Идея проста: будем записывать входящие строки в промежуточный буфер до получения символа-разделителя. При получении символа-разделителя вызовем третью функцию, передав ей данные из буфера, и очистим буфер для последующей записи.
    Символом-разделителем будет логично сделать подачу строки (LF, \n). Также может быть нелишним удалить пробельные символы с начала и конца сообщения:

    // Промежуточный буфер для входящих данных let readBuffer = »; // Получение данных function handleCharacteristicValueChanged(event) { let value = new TextDecoder().decode(event.target.value); for (let c of value) { if (c === ‘\n’) { let data = readBuffer.trim(); readBuffer = »; if (data) { receive(data); } } else { readBuffer += c; } } } // Обработка полученных данных function receive(data) { log(data, ‘in’); } При создании веб-приложения, специфичного для вашего девайса, вы сможете изменить функцию receive() под свои нужды, будучи уверенными в том, что работаете с цельным сообщением от устройства.

    Отправка данных

    Отправка данных девайсу осуществляется путём записи значения в характеристику, а конкретнее вызовом метода writeValue() объекта характеристики с ArrayBuffer в качестве аргумента. Для преобразования строки в ArrayBuffer проще всего воспользоваться TextEncoder (MDN, in English only): // Отправить данные подключенному устройству function send(data) { data = String(data); if (!data || !characteristicCache) { return; } writeToCharacteristic(characteristicCache, data); log(data, ‘out’); } // Записать значение в характеристику function writeToCharacteristic(characteristic, data) { characteristic.writeValue(new TextEncoder().encode(data)); } На всякий случай приводим данные к строковому типу, используя глобальный объект String.
    В такой реализации также будет действовать ограничение в 20 байт: всё, что выходит за рамки, просто будет обрезано. Поэтому в случае, если сообщение длиннее 20 байт, стоит разбить его на куски и последовательно отправить с некоторой задержкой:

    // Отправить данные подключенному устройству function send(data) { data = String(data); if (!data || !characteristicCache) { return; } data += ‘\n’; if (data.length > 20) { let chunks = data.match(/(.|[\r\n]){1,20}/g); writeToCharacteristic(characteristicCache, chunks[0]); for (let i = 1; i < chunks.length; i++) { setTimeout(() => { writeToCharacteristic(characteristicCache, chunks
    ); }, i * 100); } } else { writeToCharacteristic(characteristicCache, data); } log(data, ‘out’); } Чтобы облегчить обработку сообщений на стороне контроллера, добавим в конец отправляемого сообщения символ подачи строки (\n).
    Далее сообщение разбивается на куски с помощью регулярного выражения, корректно обрабатывающего символы возврата каретки (CR, \r) и подачи строки (LF, \n), после чего первая часть отправляется сразу, а на отправку других выставляются таймеры с задержкой, кратной 100 миллисекундам.

    Работает! Мы получили полнофункциональный двусторонний обмен данными с устройством и на этом с JS всё.

    Progressive Web App

    Мы не можем заранее знать в каких условиях окажется ваш девайс, поэтому было бы неплохо иметь возможность работать с созданным веб-приложением без интернета. И здесь нам поможет концепция Progressive Web Apps (подробнее на Google Developers или в Википедии — in English): в двух словах это веб-сайты, которые выглядят для пользователя как обычные или мобильные приложения. С использованием технологий PWA при первом посещении веб-сайта мы сможем установить его как приложение на рабочий стол смартфона и работать с ним оффлайн.

    Иконка

    Иконка необходима для установки приложения на рабочий стол. Лично я использую realfavicongenerator.net — загрузите подходящее изображение и генератор предложит скорректировать иконки для разных устройств.
    В разделе «Favicon for Android Chrome» рекомендую переключиться на вкладку «Assets» и выбрать «Create all documented icons», в противном случае Chrome сам будет генерировать иконку для рабочего стола из наиболее близких к нужному ему размеру, который может различаться на разных устройствах.

    После окончания настройки нажмём кнопку «Generate», скачаем «Favicon package» и распакуем его рядом с веб-страницей. Также скопируем предложенный генератором код в

    .

    Манифест

    Вместе с иконками генератор любезно предоставил нам заготовку манифеста — manifest.json: { «name»: «», «icons»: [ … ], «theme_color»: «#ffffff», «background_color»: «#ffffff», «display»: «standalone» } Укажите название вашего приложения в свойстве name и добавьте свойство short_name, содержащее сокращённое название, не более 12 символов.
    В массиве icons уже перечислены все сгенерированные иконки, в свойстве display — режим отображения приложения. standalone означает, что веб-приложение будет запускаться без элементов UI браузера, максимально похожим на нативное приложение — то, что нам нужно.

    Браузер окрасит свой тулбар в цвет theme_color, а background_color будет использоваться как фон для Splash screen при загрузке приложения. Изменяя theme_color в манифесте, не забудьте также изменить мета тег

    .

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

    Service Worker

    Service Worker позволит нам закэшировать необходимые приложению файлы и использовать их в условиях отсутствия интернета. Быстро создать свой Service Worker нам поможет Service Worker Toolbox, достаточно скачать sw-toolbox.js и companion.js, расположить их рядом с index.html и добавить в конец : После этого останется только добавить скрипт sw.js рядом с index.html, чтобы кэшировать необходимые файлы: importScripts(‘sw-toolbox.js’); toolbox.precache([ ‘companion.js’, ‘index.html’, ‘main.js’, ‘styles.css’, ]); Теперь у нас не просто страничка, а самое настоящее прогрессивное веб-приложение:

    Можно ли сделать беспроводной модуль самостоятельно?

    Иногда звучит вопрос: можно ли сделать передатчик своими руками? Этот вариант воплотить в жизнь достаточно сложно. Микросхему своими руками в домашних условиях не собрать, так как она очень миниатюрна, требует очень тонкой работы, а подборку диапазона частоты проводят с помощью интегральных решений, протокол же годами разрабатывался специалистами.

    Поэтому радиолюбителям остается лишь, воспользовавшись готовыми bluetooth-передатчиками, модифицировать их по своему усмотрению, добавляя своими руками в готовую схему необходимые элементы. Некоторые предлагают усовершенствовать модулем музыкальную колонку или сделать беспроводные динамики, а также добавить передатчик в аудиосистему автомобиля, чтобы избежать нагромождения проводов и загружать любимую музыку прямо из интернета.

    Для чего может быть полезен Bluetooth

    Технология Bluetooth является наиболее распространённой системой беспроводной передачи данных после протокола Wi-Fi. В то время как Wi-Fi используется больше для организации локального беспроводного доступа к интернету, технология Bluetooth зарекомендовала себя как наиболее эффективный способ для обмена информацией на небольших расстояниях.

    Радиус действия приёмников и передатчиков, работающих по этому протоколу, постепенно увеличивается, но на сегодняшний день пока не превышает 60 метров. Технология может быть использоваться для передачи файлов, приёма и передачи звукового сигнала, отправки и приёма различного рода команд. Соединяя компьютер и другое устройство при помощи этого протокола, можно, например, без труда управлять внутренней памятью смартфонов, забирать готовые снимки из фотоаппарата, управлять телевизором, подключать к ПК беспроводную акустику или наушники и так далее.

    Использование адаптера для передачи данных

    Пошаговая инструкция

    Смартфон как Блютуз адаптер может выручить вас в какой-то сложной или срочной ситуации, когда нет возможности купить беспроводной адаптер. Иногда это возможность сэкономить или найти применение старому смартфону.

    • Вам понадобится компьютер, Блютуз устройство, которое мы будем подключать и телефон как Блютуз адаптер для ПК. Также нужна сеть Вай-Фай: к ней должен быть подключен и компьютер (можно проводом к роутеру), и смартфон.
    • Если роутера нет, то сеть можно сделать прямо на телефоне. Для этого в настройках найдите «Режим модема» (иногда скрыт в «Ещё») и включите точку доступа Вай-Фай. В настройках точки доступа вы можете указать имя сети и пароль. Подключите компьютер к этой сети. Чтобы это сделать, потребуется наличие на ПК Вай-Фай адаптера.
    • Теперь нужно определиться с гаджетом, который вам нужно подключить. В зависимости от его типа, это может сделать разная программа. Для всех случаев, одно приложение устанавливается на компьютер, второе, из Play Маркета – на смартфон:
    • для Блютуз колонок, гарнитуры, наушников: soundwire-server (компьютер) и SoundWire free (телефон);
    • для геймпадов: kinoconsole (компьютер), KinoConsole (телефон);
    • PC Keyboard (компьютер) и PC Keyboard WiFi & Bluetooth (телефон).

    Последний вариант до сих пор находится на Бета-стадии и работает только на англоязычной раскладке. Лучше всего функционирует вариант для колонок и наушников. Поэтому дальше я буду описывать работу именно с ним. Для геймпада и клавиатуры работа с приложениями будет похожа.

    • Запустите оба приложения на своих устройствах.
    • На ПК выберите аудиоустройство, с которого будет передаваться звук на Блютуз гаджет. Также вам ещё понадобится IP-адрес, указанный здесь.

    Настройка Bluetooth Low Energy модуля

    Для начала настроим BLE модуль, это не займёт много времени, если знать что да как. Так получилось, что у меня в руках оказался модуль CC41-A на чипе Texas Instruments CC2541, который в «соседнем магазине» обошелся мне в 340 р. Поэтому в качестве примера я опишу именно его конфигурацию, однако суть общая и для других модулей, использующих аналогичный чип.
    Если у вас есть USB-TTL конвертер, то достаточно подсоединить к нему BLE модуль и вы получите прямой доступ к модулю с компьютера через COM порт. Обратите внимание на описание вашего модуля, возможно он работает с 3,3В логикой, поэтому на линиях TX-RX и RX-TX вам придётся использовать преобразователь уровня логических сигналов (voltage level shifter, на вкус и цвет на EasyElectronics). Модуль CC41-A, несмотря на то, что на нем написано «LEVEL:3.3V», замечательно справляется и с 5В логикой.

    Вместо конвертера вы можете задействовать ваш контроллер, реализовав с его помощью простейший последовательный мост: всё что вы отправите в один последовательный порт, он передаст в другой, и наоборот. В случае с Arduino Uno вам придется использовать библиотеку SoftwareSerial:

    Пример скетча для Arduino Uno

    #include SoftwareSerial SerialBt(2, 3); void setup() { Serial.begin(9600); SerialBt.begin(9600); } void loop() { if (SerialBt.available()) { Serial.write(SerialBt.read()); } if (Serial.available()) { SerialBt.write(Serial.read()); } }

    Запустите терминальную программу (можно использовать Serial Monitor из Arduino IDE, я предпочитаю Bray’s Terminal) и подключитесь к COM порту, на котором висит BLE модуль со стандартными настройками:

    • Baud rate: 9600
    • Data bits: 8
    • Parity: none
    • Stop bits: 1
    • Handshaking: none

    В режиме ожидания модуль отвечает на AT команды, оканчивающиеся на возврат каретки и подачу строки (CR+LF, опция «Both NL & CR» в Serial Monitor). Некоторые BLE модули по умолчанию работают на другой скорости, например на 38400, некоторые модули входят в режим конфигурации после нажатия на кнопку, расположенную на их плате, некоторые модули не требуют, чтобы команды были в верхнем регистре — проверьте спецификации конкретно вашего модуля.

    Отправим команду «AT», чтобы проверить соединение. Модуль должен ответить «OK» — значит всё в порядке. На самом деле, достаточно убедиться, что модуль работает в ведомом режиме (slave mode), ожидая подключения ведущего устройства, UUID сервиса равен 0xFFE0, а UUID характеристики задан как 0xFFE1 — это нам понадобится в дальнейшем. Некоторые команды, которые работают с моим модулем:

    • AT — проверка работоспособности;
    • AT+HELP — вывод всех команд;
    • AT+DEFAULT — сброс настроек к заводским;
    • AT+RESET — soft перезагрузка;
    • AT+ROLE — вывод режима работы;
    • AT+ROLE0 — установка ведомого (slave) режима;
    • AT+NAME — вывод имени модуля;
    • AT+NAMESimon — установка имени модуля как Simon;
    • AT+PIN — вывод PIN кода (пароля) для сопряжения;
    • AT+PIN123456 — установка PIN кода как 123456;
    • AT+UUID — вывод UUID сервиса;
    • AT+UUID0xFFE0 — установка UUID сервиса как 0xFFE0;
    • AT+CHAR — вывод UUID характеристики;
    • AT+CHAR0xFFE1 — установка UUID характеристики как 0xFFE1.

    Теперь можно попробовать подключиться к BLE модулю, например со страницы Characteristic Properties Sample, указав «0xFFE0» в качестве сервиса и «0xFFE1» в качестве характеристики. Или даже отправить что-нибудь из терминала в браузер на странице Notifications Sample.

    Пошаговая инструкция

    Смартфон как Блютуз адаптер может выручить вас в какой-то сложной или срочной ситуации, когда нет возможности купить беспроводной адаптер. Иногда это возможность сэкономить или найти применение старому смартфону.

    • Вам понадобится компьютер, Блютуз устройство, которое мы будем подключать и телефон как Блютуз адаптер для ПК. Также нужна сеть Вай-Фай: к ней должен быть подключен и компьютер (можно проводом к роутеру), и смартфон.
    • Если роутера нет, то сеть можно сделать прямо на телефоне. Для этого в настройках найдите «Режим модема» (иногда скрыт в «Ещё») и включите точку доступа Вай-Фай. В настройках точки доступа вы можете указать имя сети и пароль. Подключите компьютер к этой сети. Чтобы это сделать, потребуется наличие на ПК Вай-Фай адаптера.

    Виды устройств

    Передачу сигнала с телефона к штатной магнитоле можно организовать несколькими способами, для каждого из которых существует свой вид устройств. У каждого варианта есть свои сильные и слабые стороны, зная которые любой сможет подобрать bluetooth адаптер для машины, подходящий ему.

    FM-трансмиттер

    FM-трансмиттер достаточно популярен у автомобилистов в России, несмотря на многие недостатки. Он представляет собой устройство, которое вставляется в прикуриватель для музыки с радио или приема звонков с телефона. Так как питание трансмиттера осуществляется через прикуриватель, то он все время будет занят. И это не единственный недостаток FM-трансмиттера.

    Сам передатчик достаточно большой и редко выглядит аккуратно, поэтому многие считают его не эстетичным. Но главным минусом можно считать возможность пересечения FM волн. Автомобили в соседнем ряду могут случайно (или специально) слушать ту же волну, настроившись на нее через свою автомагнитолу. А если рядом находятся 2 машины, которые пользуются похожими устройствами и пытаются прослушать одну и ту же волну, то возникают помехи, шипение, пропадает звук.

    Заказывать FM-трансмиттер в интернете — не лучшая идея, так как часто производители присылают модели с ограниченными функциями, например, их можно использовать для разговоров за рулем, но подключить аудиофайлы с телефона не получится.

    Популярность трансмиттеров объясняется низкой стоимостью и широким распространением. Купить такое устройство можно почти на каждой заправке и во всех магазинах автотоваров.

    Bluetooth flash

    Bluetooth flash внешне неотличима от привычной флешки. Она предназначена для подключения через USB порт и позволяет осуществлять передачу данных по блютуз. У устройства есть ограниченный объем внутренней памяти, как на простой флеш-карте. Туда загружается информация с внешних устройств. Автомагнитола считывает эту информацию так, словно к ней подключена простая флешка.

    Плюсы такого устройства:

    • низкая стоимость;
    • маленький размер;
    • широкий ассортимент цветов и дизайна;
    • возможность подключения к любому проигрывателю с USB портом.

    • среднее качество связи, возможно пропадание или «заикание» звука;
    • некоторые магнитолы полностью отказываются считывать такие устройства;
    • если автовладелец использует USB-зарядку для телефона, то придется купить переходник из прикуривателя для USB в машину.

    Такой вариант адаптера лучше всего подойдет тем, у кого в авто нет входа для аудио в магнитоле. Предпочтение рекомендуется отдавать моделям со встроенным ресивером, который улучшит качество звучания.

    Владельцам иномарок будет интересно узнать, что существует специальный адаптер для японских автомагнитол, позволяющий подключаться и слушать отечественные радиостанции. При этом неважно, будут ли использованы возможности самой автомагнитолы или любой bluetooth.

    USB bluetooth AUX адаптер

    Специалисты утверждают, что лучшим вариантом является USB AUX bluetooth адаптер. Это недорогое универсальное приспособление, которое подходит каждому, у кого есть аукс-выход в машине. Такой переходник для автомагнитолы для USB решает сразу несколько задач, позволяя принимать входящие вызовы, воспроизводить аудиофайлы с flash накопителя или телефона.

    Bluetooth модуль также называют переходником с формата SD на стандартный USB. В этом переходе и заключается принцип работы девайса. Когда происходит подключение адаптера, он одновременно получает питание и воспроизводит цифровой звук. Это похоже на работу беспроводного зарядного устройства.

    Некоторые могут перепутать данное устройство с CAN-адаптером. Он нужен для того, чтобы упростить управление автомагнитолой. В современных машинах электроника содержит в своем устройстве кан-шину, с которой любые данные поступают на магнитолу.

    Если CAN-адаптер для WV не подключен, то управление автомагнитолой существенно усложняется. Она не станет переключать уровень подсветки в темное время суток, хотя на качество звука это не оказывает влияния.

    Главное преимущество USB AUX адаптера для штатных магнитол заключается в том, что он четко и без провалов воспроизводит аудиофайлы. Он отличается стабильной работой, возможностью подключаться к большинству моделей магнитол и имеет небольшой размер.

    Существуют и недостатки:

    • относительно высокая стоимость;
    • неэстетичность;
    • постоянно занят выход AUX.

    Однако USB адаптер для магнитолы компенсирует минусы плюсами.

    Рейтинг
    ( 2 оценки, среднее 5 из 5 )
    Понравилась статья? Поделиться с друзьями: