Управление для DIY-проекта с помощью Bluetooth геймпада. Часть 1 (Arduino)

в 17:00, , рубрики: arduino, bluetooth

Некоторые DIY-проекты включают в себя тот или иной вид дистанционного управления. Есть множество способов и протоколов для его реализации, и один из них – Bluetooth. В этой статье будет рассказано о подключении Bluetooth геймпада к Arduino.

Управление для DIY-проекта с помощью Bluetooth геймпада. Часть 1 (Arduino) - 1

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

Часть 1 (Arduino) – вы сейчас здесь

Часть 2 (ESP32) – все то же самое будет сделано и на ESP32

Выбор железа с поддержкой Bluetooth

Классические Arduino (Nano, например) не содержат в себе никаких беспроводных средств коммуникации, и поэтому для использования Bluetooth понадобится дополнительный модуль.

Основная масса материалов, которые гуглятся по запросу Arduino + Bluetooth, предлагают готовые схемы и библиотеки для модулей HC-05 или HC-06. К сожалению, хотя эти модули и обеспечивают связь по Bluetooth, в них реализован только единственный профиль – Bluetooth Serial Port Profile (SPP), представляющий из себя, по сути, беспроводной COM-порт. Для управления через такие модули вам понадобится устройство, которое также поддерживает этот профиль и будет посылать команды через открытый порт – обычно это либо готовое Android-приложение, либо какая-то собственная разработка с несложным, но специализированным UI под конкретный сценарий управления.

Если вы планируете использовать для управления именно геймпад, то вам понадобится более продвинутый Bluetooth модуль для Arduino.

Следующим кандидатом является Arduino Nano 33 BLE – это готовая плата от Arduino сразу c Bluetooth чипом. Плата, в целом, заслуживала бы отдельной статьи, поскольку интересных отличий от классических Arduino и вообще функций там предостаточно (Bluetooth, новая процессорная архитектура, датчик движения, поддержка Python), однако я сомневаюсь, что плата станет популярной:

  1. Цена. Доступных клонов нет, а оригинальная плата в плане цены совершенно неконкурентоспособная

  2. Поддержка только BLE (Bluetooth Low Enegry). Этот вид Bluetooth модный и современный, разработан специально для небольших устройств и всяческих датчиков. За счет упрощения, чипы BLE и устройства на их основе должны получаться дешевле и доступнее (противоречия с предыдущим пунктом тут нет, цена оригинальных плат всегда высокая), да и в целом разработка с использованием BLE намного легче по сравнению с Bluetooth Classic. Обратная сторона медали – через BLE не получится подключить те устройства, которым нужен Bluetooth Classic

Единственный известный мне геймпад, который уже поддерживает BLE – это только последняя ревизия контроллера Xbox. А большинство геймпадов продолжают использовать как раз BT Classic (4.0, 5.0 и более поздние версии).

Впрочем, простой способ подключить устройства BT Classic к классическим Arduino все равно существует.

Arduino USB Host Shield

Способ, о котором пойдет речь далее в этой статье – это использование нескольких связанных компонентов:

  1. Плата Arduino

  2. USB Host Shield к этой плате

  3. USB Bluetooth адаптер

  4. Собственно Blutooth геймпад

USB Host Shield

USB Host Shield

Как вы могли заметить, USB Host Shield по масштабам соответствует плате Arduino Uno, а такой конструктор подойдет по размеру далеко не ко всем DIY-проектам. Для более компактных проектов существует Mini USB Host Shield, который по габаритам соответствует уже Arduino Pro Mini, этот набор и будем использовать далее.

Mini USB Host Shield

Mini USB Host Shield

Mini USB Host Shield бывает в двух вариантах – с питанием на 3.3В и на 5В (что тоже соответствует доступным вариантам Pro Mini). Так как плата все же старая, и, видимо, не пользующаяся спросом, в продаже на маркетплейсах сейчас остались только варианты на 3.3В. Были некоторые сомнения, хватит ли 3.3В для питания USB Bluetooth адаптера (который по стандарту все-таки 5В), но, забегая вперед, скажу что и 3.3В хватает для стабильной работы. Поэтому, если все же будете реализовывать описываемую в статье схему подключения BT устройств, то смело покупайте Mini USB Host Shield на 3.3В.

Что касается USB Bluetooth адаптера – готовая библиотека, которая будет далее использована, достаточно старая и редко обновляется (да и в ее обновлении по большому счету нет смысла уже), гарантированно поддерживаются только USB BT 4.0 адаптеры (полный список есть в документации на библиотеку, ссылка будет ниже). Для использования в подобном проекте можно купить что-то с названием, похожим на CSR 4.0, например.

Arduino Pro Mini

Arduino Pro Mini – самая компактная из классических плат Arduino.

Arduino Pro Mini

Arduino Pro Mini

Функционально и по количеству пинов Pro Mini соответствует плате Nano, с одним важным отличием: уменьшение размеров достигнуто за счет удаления с платы USB-UART конвертера. Для подключения к компьютеру и заливки скетчей вам понадобится специальный кабель (о нем чуть ниже). При этом на плате все равно сохранен регулятор напряжения, позволяющий подключить питание от нерегулируемого источника 5-12В. Так как Mini USB Host Shield доступен в 3.3В исполнении, Pro Mini будет тоже на 3.3В (а еще Pro Mini бывает в 5В варианте).

USB-UART адаптер

Этот раздел можете пропустить, если вам уже знаком процесс заливки скетчей в Arduino платы без встроенного USB-UART чипа.

USB-UART адаптер

USB-UART адаптер

Сами процессоры семейства megaAVR, на которых основаны классические Arduino, не имеют встроенного USB интерфейса. На полноразмерных платах Arduino есть дополнительный чип USB-UART, и поэтому такие платы можно подключать к компьютеру обычным USB кабелем.

В случае с Pro Mini, на плате вместо привычного разъема USB расположены только выводы пинов GND/VCC/TX/RX/DTR. Для подключения такой платы к компьютеру необходим внешний USB-UART адаптер. Обычно адаптер представляет из себя кабель, с одной стороны у которого USB-male разъем, с другой стороны шлейф для подключения к пинам Arduino, а в середине плата с чипом USB-UART (и, возможно, с джампером 3.3/5В – обратите на него внимание, выходное напряжение должно соответствовать плате Arduino).

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

Более надежный вариант – это USB-UART адаптеры на чипах CH340 или CP2102, драйверы для которых доступны на сайтах известных производителей компонентов (https://learn.sparkfun.com/tutorials/how-to-install-ch340-drivers/all или https://www.silabs.com/developers/usb-to-uart-bridge-vcp-drivers). При покупке также стоит обратить внимание на наличие провода для подключения к пину DTR (и отсутствие негативных отзывов – бывает DTR есть, а работает криво). Корректно работающий DTR сильно упрощает процесс заливки скетчей из Arduino IDE. Также на адаптерах бывает перепутана маркировка пинов TX/RX, поэтому если адаптер определяется, система видит COM порт, но скетчи не загружаются – попробуйте поменять местами подключения TX/RX, а также поднять настройку скорости порта до 115200.

Подключение Mini USB Host Shield к Arduino Pro Mini

Поскольку Mini USB Host Shield – это плата-шилд, то для подключения к контроллеру нужно соединить соответствующие пины на платах. На самом деле, будет достаточно вот этих соединений: питание, RST, и SPI-пины.

Минимальная схема соединения Mini USB Host Shield и Arduino Pro Mini

Минимальная схема соединения Mini USB Host Shield и Arduino Pro Mini

Пины на Mini USB Host Shield не обозначены, правильную ориентацию платы можно определить по USB разъему и чипу – на приведенной схеме они с верхней стороны платы.

Сборку можно сделать, например, в таком виде:

Слева: сборка в виде классического шилда. Справа: компоненты по отдельности закреплены на плате и соединены очень короткими перемычками

Слева: сборка в виде классического шилда. Справа: компоненты по отдельности закреплены на плате и соединены очень короткими перемычками

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

Когда же будет код?

Кода в этой статье не будет вообще - для Arduino есть превосходная библиотека USB Host Shield 2.0. В ней есть готовая поддержка множества USB устройств, в основном проводных, но, главное, есть поддержка USB Bluetooth адаптера, через который уже подключается геймпад.

После того, как вы собрали железную часть, остается только адаптировать для своего DIY-проекта готовый код. Например, для контроллера от PlayStation 4 в библиотеке есть вот такой пример.

Своим примером я тоже поделюсь: видео на YouTube плюс исходники.

Примечание. Схема и код в моем примере носят исключительно демонстрационный характер, в них не предусмотрено никакой защиты от переразряда LiPo аккумуляторов, поэтому использовать в более-менее настоящем проекте без доработок не рекомендуется.

Что дальше?

То, что в итоге получилось у меня – конечно работает, но занимает места больше, чем хотелось бы. Плюс я уже упоминал о том, что и сам Mini USB Host Shield становится трудно найти в продаже, и USB адаптер нужен именно версии BT 4.0, и библиотека USB Host Shield 2.0 сама по себе достаточно старая (хотя все еще поддерживается и подключение геймпада от PlayStation 5 туда тоже добавили).

Тут самое время вспомнить, что существует ESP32, который объединяет в компактном виде сразу все необходимые компоненты для подключения Bluetooth устройств. В следующей части статьи я расскажу, как сделать все то же самое, но уже на более современной платформе.

Автор: pink0D

Источник

* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js