Skip to main content

Bluetooth

Введение

Технология Bluetooth уже давно распространена в электронике, а тем более в клавиатурах, но в кастомную механику она попала совсем недавно. Основное препятствие – совместимость платформы контроллеров и отсутствие до недавнего времени совместимых прошивок.

Все эти годы сообщество развивало QMK – прошивку, на которой работает 99% кастомных клавиатур. Но когда появился запрос на портирование его на Bluetooth, появилось несколько проблем:

а) Код QMK лицензирован под "вирусной" GPLv2, которая требует распространять исходники всех используемых компонентов. Реализации Bluetooth от производителей большинства контроллеров, увы, несовместимы с этим требованием.

б) Даже если игнорировать лицензирование, портирование QMK на контроллеры, которые есть в свободном доступе и подходят для использования с клавиатурами – нетривиально. Версии есть, но старые и неподдерживаемые.

В связи с этим, сообщество решило создать прошивку строго для Bluetooth. Многие концепции в ней унаследованы из QMK, но реализация и работа с ней сильно отличается.

ZMK

ZMK это open-source прошивка для беспроводных клавиатур построенная на Zephyr™  Real Time Operating System (RTOS).

В данный момент портирован не весь функционал из QMK , но основные и самые востребованные функции уже реализованы. Количество поддерживаемых клавиатур совсем небольшое относительно QMK, но лист постоянно пополняется - Shields. Добавить свою клавиатуру также довольно просто.

Платы с поддержкой ZMK

Cамые распространенные контроллеры, которые поддерживают ZMK и находятся в свободной продаже – это nice!nano и nRFMicro. Они оба построены на процессоре nRF52840 и являются drop-in заменой для Pro Micro. Это значит, что если какая-то клавиатура спроектирована для работы с Pro Micro (а это почти все эрго клавиатуры), вы можете установить вышеперечисленные контроллеры вместо Pro Micro без какой-либо модификации. Батареи можно припаивать напрямую к контроллеру.

Выключения из прошивки в ZMK пока нет (только сон), поэтому для транспортировки может быть удобен физический выключатель. Их можно добавить на стандартные платы, но есть и беспроводные их версии с выделенными посадочными местами под выключатели и батареи.

nice!nano

Контроллер разработан Nick Winans При покупке клавиатуры на нашем сайте есть опция установки данного контроллера, а на сайте проекта есть другие дистрибьюторы за рубежом.

nRFMicro

Контроллер разработан членом нашего локального коммьюнити – Joric. Контроллера нет в свободной продаже, но в отличии от nice!nano он с открытым исходным кодом, поэтому иногда энтузиасты собирают партию из нескольких контроллеров на продажу. У nRFMicro есть множество разных версий (например, со встроенным выключателем), также бывают разные цвета, рисунки и толщина плат.

note

Оба контроллера очень похожи в своем функционале и с точки зрения простого пользователя отличия незаметны, но эти контроллеры не копия друг друга. nice!nano тоньше, и V2 немного энергоэффективнее. Но стоит повториться – различия крайне минорные.

Создание и модификация прошивки

Введение

Стоит учитывать, что из-за относительной новизны ZMK, процесс конфигурации, прошивки и последующей ее установки несколько отличается от привычной в QMK и не всегда такой тривиальный. Если с приходом VIA для QMK отпала нужда в каких-либо манипуляциях с исходным кодом и перепрошивкой для простого пользователя, то ZMK пока что только в начале этого пути.

С другой стороны, в ZMK этот процесс намного более оптимизирован, вам не нужно устанавливать полный стек C++ для компиляции прошивки, она происходит в docker контейнере прямо в GitHub через GitHub Actions.

caution

Гайд по настройке подразумевает, что у вас нет опыта работы с Git и Linux. Если это не так, вас не должно затруднить сделать все по-вашему. Вы также можете взглянуть на оригинальный гайд, который не так упрощен (но все равно, откровенно говоря, недостаточно подробен)

Начало работы и настройка репозитория

Первоначальная настройка

  • Установите git, он понадобится для работы с репозиториями – https://git-scm.com/download/ (при установке оставьте все настройки по-умолчанию)
  • Создайте аккаунт на GitHub – https://github.com/signup
  • Создайте новый репозиторий с именем zmk-config – https://github.com/new (все настройки оставьте по-умолчанию).
  • Запустите скрипт установки в зависимости от вашей системы:
note

После установки Git на Windows у вас появится программа Git Bash. Запускать код нужно из него.
На Mac (а расскажите что на маке, у меня его нет)

В командной строке запустите следующий код:

bash -c "$(curl -fsSL https://zmk.dev/setup.sh)"
  1. На пункте MCU Board Selection выберете nice!nano (нажав 1) → Enter
  2. На пункте Keyboard Shield Selection выберите клавиатуру, введя ее соответствующую цифру → Enter
  3. На пункте Copy in the stock keymap for customization? [Yn] нажмите Enter
  4. На пункте GitHub Username введите имя пользователя которого вы создали → Enter
  5. На пункте GitHub Repo Name введите zmk-config → Enter
  6. На пукте GitHub Repo скопируйте полный URL вашего репозитория, например: https://github.com/Flumeded/zmk-config → Enter
  7. Проверьте корректность введеных данных и нажмите Enter
  8. Скрипт запросит логин и пароль для работы с репозиторием, введите их.

После этого скрипт заполнит ваш репозиторий нужными данными и мы можем приступить к модификации прошивки.

Изменение раскладки

Зайдите в ваш репозиторий zmk-config в GitHub в папку config → откройте файл "имяклавиатуры.keymap" → В верхней панели нажмите на иконоку карандаша "Edit This File"

В файле ищите часть, похожую на форму клавиатуры – массив кейкодов, каждый из которых начинается с &. Например: "&kp LALT", "&kp A", "&bt BTCLR"

Если вы захотите изменить поведение какой-либо клавиши, откройте список кейкодов, найдите нужный и замените его в файле.

Обращайте внимание на поведение после амперсанда, например "&bt" – это команды для настройки Bluetooth, а "&kp" – команды кейкодов. Если вы введете что-то вроде "&bt LALT" - прошивка не соберется. Подробнее про ошибки сборки тут.

После того, как вы изменили раскладку под свои нужды, внизу страницы нажмите Commit Changes. Вверху этой же страницы нажмите Actions, вы должны увидеть процесс запуска сборки прошивки, это должно занять около минуты. Тогда, когда маркер рядом с билдом станет зеленым – нажмите на заголовок билда.

Если билд упал, и вы видите красный маркер, то вы что-то очень сильно сломали в раскладке, и компилятор не смог ее собрать. Ищите ошибку в файле, который вы редактировали – лишние знаки, кавычки, запятые.

Попав на страницу готового билда, вы должны увидеть "Артефакт" внизу страницы – архив с прошивкой для клавиатуры, скачайте его.

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

Прошивка

Прошивка контроллеров осуществляется очень просто:

Нажмите на кнопку "сброс" на клавиатуре дважды. Это введет контроллер в режим DFU, при подключении кабелем к компьютеру он должен распознаться как флешка. Откройте свежескачанный артефакт и просто перетяните или скопируйте файл на диск. Если у вас сплит клавиатура, то файлов будет 2 – один для каждой половники. После того, как файл полностью скопируется, окно закроется само, а контроллер выйдет из режима DFU. Если вылетит ошибка - это нормально, контроллер просто "небезопасно" вышел из режима DFU, прошивка скорее всего скопировалась. Если у вас сплит, повторите тоже самое для второй половины клавиатуры.

tip

Правая половинка клавиатуры не требует перепрошивки при смене раскладки. После того, как вы прошили обе половинки в первый раз, тривиальные изменения раскладки нужно записывать только в левую половинку (несмотря на то, что генерируются прошивки для обоих половинок). Но если вы добавляете функциональность (дисплеи, подсветка) или кейкоды для нового поведения ("&out", "&ext_power") - прошивку нужно записать на обе половинки.

Подключение

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

Если у вас сплит клавиатура, вторая половинка не будет работать сама по себе (даже по USB). Вы не должны видеть вторую половинку в списке устройств, главная половинка будет с ней общаться самостоятельно. Чтобы спарить обе клавиатуры единожды, нажмите на них клавишу сброса одновременно. Через 3-5 секунд обе половинки должны заработать.

Работа с Bluetooth

Процесс подключения и работы Bluetooth требует дополнительных пояснений.
Когда вы впервые подключаетесь с любого устройства к клавиатуре, клавиатура запоминает это устройство в профиль. После этого вы все еще можете видеть клавиатуру доступной с других устройств, но вы не сможете к ней подключиться, потому что активный профиль уже "занят". Также, если вы зайдете в настройки устройства, с которым профиль уже существует, забудете устройство, и попробуете подключиться повторно, клавиатура не даст вам это сделать, так как она всё ещё помнит старый профиль. Чтобы клавиатура очистила профиль, вам нужно нажать кейкод "&bt BT_CLR" и вы сможете подключиться снова.

Как и многие другие современные клавиатуры и мышки, в ZMK можно хранить несколько профилей одновременно и переключаться между ними. Чтобы переключаться между профилями, можно использовать поведение "&bt BT_SEL" c нужной цифрой. Таким образом можно быстро менять подключения между, например, компьютером, ноутбуком и телефоном.

info

Гайд написан так, чтобы вам не проходить Курс Молодого Бойца по разработке, но на самом деле, Git очень мощный инструмент, и его знание может пригодиться практически где угоднов в IT.
Вы можете пройти любой тренажер или курс Git, чтобы пользоваться научиться пользоваться всеми его возможностями и упростить редактирование прошивки.

В свое время, я проходил этот бесплатный курс (не реклама 🤠)