Собираем кастомную механическую клавиатуру, часть 2: Практика
Причина, по которой я отказался от полноразмерной клавиатуры заключается в том, что на деле с помощью QMK я могу иметь все возможности полноразмерной клавиатуры, но в более компактном корпусе, а это значит, что надо меньше будет передвигать руками чтобы дотянуться до нужных клавиш.
Так что же такое QMK – это ПО с открытым исходным кодом для создания прошивок для клавиатур, которые ее поддерживают. Ну скажем это примерно тоже самое что купить телефон на Android и иметь возможно поставить на него различные LineageOS или CyanogenMod, а также самому дорабатывать данные прошивки.
Начнем, пожалуй с простого – откроем онлайн конфигуратор по ссылке https://config.qmk.fm/ и выбираем в списке PCB нашу YD60MQ/16led
Видим уже определенным образом прописанную конфигурацию, доработаем её так как нам это нужно, делать это можно двумя способами – щелкая мышью по клавишам на экранной клавиатуре и после нажимать желаемую клавишу на физической клавиатуре, либо перетаскивая клавиши из панели конфигуратор на клавиши все той же виртуальной клавиатуры, вторым способ в любом случае придется воспользоваться.
Клавиши, которые вы можете установить через конфигуратор:
Разберем некоторые возможности на примере моей конфигурации. На нулевом слое у нас нет ничего не обычного, разве что MO (1) и MO (2). Это значит, что при нажатии на эту кнопку клавиатура переходит на слой 1 и 2 соответственно, ну то есть вполне понятный всем FN при отпускании кнопки мы снова вернемся на нулевой слой.
На первом слое у нас стоит управление громкостью и плеером на курсорных клавишах и вот только сейчас заметил, что повесил на две кнопки Play который является в тоже время и Pause, ну это первоначальные наброски, всегда можно переделать, треугольных стрелочках листание треков в плеере. На левой кнопке клавиатуры у нас можно сделать скриншот, открыть калькулятор, мой компьютер и управление колесиком мыши чтобы не тянуться за мышкой, когда читаешь длиннопосты на пикабу. Куда интереснее что такое C_S_T и TG. C_S_T я не совсем верно понял, при нажатии на F1 у нас будет F1, но если клавишу слегка удержать то сработает CTRL+SHIFT, когда я прописывал этот конфиг то думал что сработает CTRL+SHIFT+F1, но ошибся. Конечно, можно сначала зажать допустим F2, а потом нажать F1 и тогда получится то, что требуется, но зачем такие сложности? К сожалению, онлайн конфигуратор не позволяет сделать то, что я хотел, но полноценный QMK это позволяет и я напишу о том, как это сделать чуть ниже. Кнопки TG полностью переключают всю раскладку на указанный слой, то есть слой меняется ‘на всегда’, пока пользователь не переключит ее через TG на другой слой. Очень важно разместить на клавиатуре кнопку ‘RESET’, она нужна чтобы перевести клавиатуру в режим прошивки.
На третьем слое исключительно кнопки управлением подсветки.
На четвертом слое у меня тоже самое что на нулевом, но часть клавиш заменена на нампад. Почему-то если я устанавливал привычный MO, то он не срабатывал, и я не мог переключиться на нулевой слой обратно, так что поставил вместо него TO, не совсем понимаю, чем они отличаются. Если кто-то знает, то напишите в комментариях.
Ну и пятый слой так же повторяет первый, но часть клавиш заменены на управление мышкой, а вдруг она откажет? Управлять кстати вполне удобно, но в контру, наверное, особо не поиграешь.
Онлайн конфигуратор имеет и другие функции, например смена местами CTRL и CAPS LOCK и подобное, но в сравнении с полноценным QMK они всё же малы.
Итак, все что хотелось из того, что позволяет онлайн конфигуратор мы накрутили, скачиваем теперь JSON файл, он нам понадобится в дальнейшем. Жмем кнопку “Cкомпилировать”, ждем пока в космосе прокрутится картошка, после чего жмем кнопку “Прошивка” и сохраняем hex файл прошивки. Теперь скачиваем QMK Toolbox – программу для заливки прошивки на клавиатуру. Выбираем в ней наш hex файл, переводим клавиатуру в режим прошивки (стандартное расположение кнопки RESET обычно пишут в документации к PCB, у YD60MQ по умолчания она прописана на FN+ESC), выведется желтая надпись о том, что устройство подключено. Жмем кнопку FLASH, две секунды и можно пользоваться клавиатурой.
QMK – расширенные возможности
Онлайн конфигуратор имеет крайне урезанный функционал относительно полноценного QMK. Для того чтобы им воспользоваться, нам нужно его установить. Инструкция по установке для разных платформ описана в официальной документации, в качестве примера приведу установка для WINDOWS, так как я сижу именно на нем.
Для начала нам нужно установить MSYS, но после установки не запускать msys2.exe, а запустить mingw64.exe (либо mingw32.exe).
Вводим последователь три команды:
pacman --needed --noconfirm --disable-download-timeout -S git mingw-w64-x86_64-toolchain mingw-w64-x86_64-python3-pip
python3 -m pip install qmk
qmk setup
После этого QMK будет установлен, у меня он работал после этого криво (при компиляции файлов прошивки возникали ошибки с тарабарщиной), но после команды “qmk doctor” всё встало на свои места.
Чтобы не делать двойную работу конвертируем скачанный ранее наш .json файл с помощью команды “qmk json2c наш_файл.json -o keymap.c”. Вводим команду “qmk new-keymap” после чего вводим название нашей PCB, в моем случае “yd60mq” и название для нашей раскладки, в моём случае это будет например “dsio”. Скидываем сгенерированный нами файл keymap.c по пути "C:\Users\%ИМЯ ПОЛЬЗОВАТЕЛЯ%\qmk_firmware\keyboards\yd60mq\keymaps\dsio" с заменой. Теперь приступим к его редактированию, при открытии он будет выглядеть примерно так:
Для лучшей читаемости лучше его немного отформатировать, для примера так:
Что же мы тут можем сделать. Для начала, например с помощью такой незамысловатой конструкции мы можем повесить вызов CTRL+ALT+DEL:
Ранее я писал о том, что немного спутал задачу команды C_S_T, так давайте же исправим её. Для начала исправим наши C_S_T(KC_F1) на просто KC_F1, с остальными так же. И напишем небольшой макрос:
Итак, с помощью данного макроса у нас при нажатии на F1 (и другие F клавиши) и ESC будет срабатывать непосредственно F1 и ESC. Но если клавишу чуть удержать, то сработает CTRL+SHIFT+F1 и CTRL+SHIFT+ESC (вызов диспетчера задач) соответственно. Таким же образом я добавил блок (на скриншоте обведет красным) который при небольшом удержании знака точки в русской раскладки добавлял к ней SHIFT, превращая её в запятую.
Не будем на этом заканчивать, напишем еще один макрос, который допустим будет запускать приложение на клавишу. Для начала зарегистрируем новые клавиши:
Вставляем эти клавиши на нашу раскладку:
Этот макрос правда имеет недостаток, если в системе в данный момент выбрана русская раскладка, то соответственно пусть к программе будет введен на русском языке и программа не запустится. Сам же результат работы макроса можно увидеть на этом видео:
Так же редактированию можно подвергать и другие файлы, например в yd60mq.c парой каталогов выше изменив строчку “writePin(F4, !led_state.caps_lock);” на “writePin(F4, led_state.caps_lock);” можно добиться того чтобы лампочка CAPS LOCK горела когда он находится не в активном состоянии, а напротив в неактивном.
Так как у меня на PCB находится 16 rgb светодиодов, но существует так же версия этой платы на 12 светодиодов. То не лишним будет в файле rules.mk изменить строчку “DEFAULT_FOLDER = yd60mq/12led” на “DEFAULT_FOLDER = yd60mq/16led”.
Итак, после всех тех веселых вещей что мы реализовали, надо бы как-то теперь это всё скомпилировать. Делается это просто, выполняем команду, содержащую название нашей платы и раскладки:
qmk compile -kb yd60mq -km dsio
Если всё хорошо, то мы увидим множество [OK]. Если же где, то мы допустили ошибку, то компилятор нам намекнет, где нам её искать и соответственно hex файл на выходе мы не получим.
Прошивка данным hex файлом идёт через QMK Toolbox и полностью аналогична прошивке hex файлом полученным из онлайн конфигуратора.
Если углубиться в QMK, то его возможности кажутся действительно безграничными. Например, помимо макросов можно менять анимацию подсветки при переключении слоев или при нажатии на определенные клавиши, можно создавать свои собственные варианты анимации подсветки. Настроить воспроизведение звуков при включении клавиатуры либо нажатия клавиш. Выполнения определенных действий при нажатии кнопки определенное количество раз либо после определенной комбинации кнопок.
Я сам его изучал буквально 1-2 вечера, так что знаю пока крайне мало, возможно чуть позже продолжу его изучение и напишу еще один пост. Если кто-то знает хорошую русскоязычную документацию, буду благодарен за ссылку.