Эмуляция мыши клавиатурой
Одна из главных фишек клавиатуры на базе ZMK — возможность добавить поддержку мыши. Согласно документации, это делается просто: достаточно добавить одну строку в конфигурацию.
CONFIG_ZMK_POINTING=y
Однако, когда я это сделал, ничего не произошло. Назначенные мной кнопки вели себя по-прежнему. Перепробовал всё — не помогло.
Оказалось, в конфигурацию Zephyr нужно было отдельно включить поддержку мыши как таковой.
# Enable mouse support
config ZMK_MOUSE
default y
config ZMK_POINTING
default y
Эту деталь подсказал мне Trae — ChatGPT и Claude об этом не упомянули, хотя честно пытались помочь. Теперь, чтобы двигать курсор, вовсе не обязательно использовать мышку — можно обойтись клавишами клавиатуры.
Honeycomb Wall
В моём углу, где я работаю, постепенно скапливается много всякой мелочи, которую нужно куда-то убирать. Часть вещей я убираю в выдвижной ящик, часть — на полочку над столом, но всё равно хочется ещё куда-то убирать клавиатуры и рабочий лэптоп. Горизонтальных поверхностей не очень много, но есть много вертикальных. Идеально было бы вешать некоторые вещи на стену, но нужно придумать для этого какие-то крючки. Сейчас у меня уже висят на стене монитор, лэптоп, внешний диск, лампа. Но туда ещё можно много всего навесить...
У ИКЕА есть доска с дырками SKÅDIS, которая отлично подходит для этого. Однако размер доски фиксированный и не очень вписывается в мой угол, где уже висят монитор, ноутбук и полка. Стал гуглить, существует ли какая-то модульная система, и нашёл вот такое: Honeycomb wall storage system.
Даже на картинке у автора такой же бардак, как у меня — значит, мне точно подойдёт!
Печатать придётся самому, зато можно сделать точно под свой размер и цвет. Мне не очень нравится, что соединять элементы автор предлагает специальными внешними клипсами, что уменьшает количество свободных ячеек и портит внешний вид. Нужно будет попробовать добавить ещё в схему клипсы-защёлки, чтобы панели можно было соединять вместе...
P-канальный полевой транзистор
Обнаружил, что транзисторы, которые я поставил в поливалку и которыми коммутирую делитель напряжения и датчик влажности почвы, не самые подходящие — я использовал n-канальные IRLML2402, которые мне любезно подсказал Леонид Каганов. Они отлично открываются при уровнях трёхвольтовой логики, на которой работает ESP-8266, и держат большой ток. Но для коммутирования нагрузки, если нужно разрывать плюсовой провод питания, не годятся — для этого обычно используют p-канальные транзисторы, например IRLML6402. Заказал на AliExpress, но посылка так и не приехала — где-то потерялась по дороге. Заказал ещё раз, транзисторы приехали, но после того как я их поставил в устройство, выяснилось, что при уровнях трёхвольтовой логики транзистор полностью не запирается — на нагрузке вместо нуля оказывается 2.6 вольта. То ли прислали из бракованной партии, то ли прислали транзисторы другого номинала. Бог любит троицу — заказал ещё раз, на этот раз на Amazon, чтобы прислали побыстрее: не терпится начать отлаживать софт для устройства.
Update. Подумалось, а не перепутал ли я сток с истоком? Если да, то это объясняет почему транзистор не закрывается. Напряжение в 2.6 вольт это очень похоже на падение напряжения на паразитном диоде полевого транзистора.... Приду домой проверю эту гипотезу...
Update 2. Блин, точно, в отличии от обычных транзисторов где n-p-n и p-n-p включаются почти одинаково эммитером к низу, полевые транзисторы "переворачивают" при работе в режиме ключа. Поэтому p-канальные транзисторы нужно подключать верх-ногами - истоком к плюсу и стоком к нагрузке! Теперь стало все на свои места, век живи, век учись.
Универсальная раскладка клавиатуры
Меня всегда раздражало, что знаки препинания на русской и английской клавиатурах расположены в разных местах. Но настоящий ад начался, когда я переехал в Германию и начал пользоваться немецкой раскладкой.
Если на английской и русской раскладках различия хотя бы ограничиваются знаками препинания, то немецкая — это отдельная история. Тут не только точка и запятая прячутся куда-то подальше, но и привычные клавиши вдруг оказываются в неожиданных местах. При этом я умею печатать вслепую, но этого недостаточно — запомнить местоположение всех знаков препинания в трёх раскладках оказалось невозможной задачей.
Часто замечаю, что не помню, где находится нужный символ в русской раскладке — и специально переключаюсь на английскую или немецкую, чтобы его набрать. Это прерывает поток мысли, замедляет набор текста и вызывает раздражение. Особенно бесят умляуты на немецкой клавиатуре — они оккупировали те клавиши, где в английской раскладке были нужные знаки. А если символ прячется под левым Alt, приходится выкручивать кисть в стиле ручной Камасутры, чтобы нажать сразу две неудобные клавиши.
Теперь, когда я научился настраивать кастомную клавиатуру при помощи ZMK, стало интересно — справится ли он с этой задачей? ZMK — это прошивка для кастомных клавиатур на базе операционной системы реального времени Zephyr. И использовать его просто как посредника между кнопкой и символом — значит бездарно тратить его потенциал. Хочется задействовать всю его мощь, чтобы создать действительно умную раскладку, которая адаптируется под мои реальные задачи и привычки.
И тут у меня возник вопрос: а можно ли сделать так, чтобы все знаки препинания были на одних и тех же клавишах — вне зависимости от того, включена русская, немецкая или английская раскладка?
Оказалось, можно! И работает это потрясающе удобно.
Русскую раскладку почти не пришлось трогать — в ней мало специфических символов. В немецкой я убрал умляуты с основных клавиш и перенёс их под правый Alt, а на их места вернул знаки препинания, совпадающие с английской раскладкой.
До:
После:
Теперь я буквально влюблён в свою раскладку. Набирать текст стало в разы проще и приятнее. Осталось довести проект до ума, собрать обе половинки клавиатуры — и носить её с собой. Потому что печатать на чужих клавиатурах после этого просто невозможно.
Выложил прошивку на github.