Backlog Task #2 - Ergodox Keyboard.

Слабоумие и отвага: Сборка клавиатуры Ergodox в 2025.

Intro

В 2012-2015 годы я собрал клавиатуры Egrodox, GH60. Было интересно, клавиатуры были собраны, работают до сих пор. Смета подробная здесь, здесь и здесь.

Но вот захотелось собрать еще несколько клавиатур, чтобы можно было оставить в офисе, дома, взять в дорогу.

Архаика

Клавиатура Ergodox появилась в 2010-2011 годы, имела ряд спорных решений - порт MiniUSB, плата Teensy 2.0. 4 пиновый разьем TRRS для связи левого и правого блока между собой.

В 2025 году - это уже очень и очень архаичное решение. Проблема достать разьемы MiniUSB, платы Teensy 2.0, разьемы TRRS.

Внимание - Я не рекомендую собирать клавиатуру Ergodox в 2025 году и в последующих годах. Посмотрите в сторону проектов, которые развились от Ergodox - это Ergodox EZ, ZSA Moonlander.

Trigger

И вот летом 2025 я купил 3д-принтер. Снова, только разница между принтерами из 2015 и 2025 годов - просто космос.

Ну значит решил распечатать корпуса, keycaps.

С 2015 года у меня остались Teensy 2.0, кабели TRRS.

Потом подумал - а собрать одну клавиатуру или 5 клавиатур по времени займет приблизительно одно время.

Электронные компоненты

Запчасти можно купить на DigiKey, Mouser. В 2015 году я так и покупал, помню попросили заполнить экспортную декларацию, я ее заполнял и получил посылку.

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

На ebay, amazon, aliexpress этих запчастей нет.

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

Если вы находитесь в EU, то рекомендую закупить сразу готовый набор на этом сайте.

Сделал заказ, заказ собирали очень медленно, заняло около 3х недель, потом почта около месяца доставляла посылку.

Таким образом я получил все необходимые запчасти для сборки.

Изготовление платы - JLCPCB

С сайта github загружаем файлы, делаем zip-архив и загружаем на сайте JLCPCB, оплачиваем и через месяц молучаем набор плат. Я заказывал 10 штук. Качество изготовления на высоте.

Сборка

Диоды DO-35 на купил в Астане, на принтере распечатал сгибатель. Приготовил диоды, затем за один выходной день запаял их. И допустил ошибку, просто невнимательность моя.

Внимание - У вас есть мультиметр и вы используете для проверки полярности диодов. То левой половине клавиатуры, красный шуп (+) будет слева, на правой половине клавиатуры красный шуп будет справа. Ну и на плате есть куча отметок, чтобы понять как правильно установить диоды. Но я был не внимательным. Не повторяйте моих ошибок.

Пришлось на aliexpress купить диоды SOD-123, выпаять все диоды на правой половине, затем припаять SMD диоды. Ну скажу так паять DO-35 гораздо проще и приятнее.

QMK Configurator

Спасибо ребятам из проекта QMK, которые сделали замечательный сайт QMK Configurator. Здесь можно сконфигурировать свою раскладку, скомпилировать и записать прошивку в Teensy. Я использую программу QMK Toolbox.

Ниже оставлю свою раскладку, если вдруг захотите повторить.

{
  "documentation": "\"This file is a QMK Configurator export. You can import this at <https://config.qmk.fm>. It can also be used directly with QMK's source code.\n\nTo setup your QMK environment check out the tutorial: <https://docs.qmk.fm/#/newbs>\n\nYou can convert this file to a keymap.c using this command: `qmk json2c {keymap}`\n\nYou can compile this keymap using this command: `qmk compile {keymap}`\"\n",
  "notes": "",
  "version": 1,
  "keyboard": "ergodox_ez/base",
  "keymap": "ergodox_ez_base_layout_ergodox_pretty_2025-10-04",
  "layout": "LAYOUT_ergodox_pretty",
  "layers": [
    [
      "KC_EQL",
      "KC_1",
      "KC_2",
      "KC_3",
      "KC_4",
      "KC_5",
      "KC_ESC",
      "KC_PSCR",
      "KC_6",
      "KC_7",
      "KC_8",
      "KC_9",
      "KC_0",
      "KC_MINS",
      "KC_BSLS",
      "KC_Q",
      "KC_W",
      "KC_E",
      "KC_R",
      "KC_T",
      "TO(1)",
      "KC_LBRC",
      "KC_Y",
      "KC_U",
      "KC_I",
      "KC_O",
      "KC_P",
      "KC_RBRC",
      "KC_TAB",
      "KC_A",
      "KC_S",
      "KC_D",
      "KC_F",
      "KC_G",
      "KC_H",
      "KC_J",
      "KC_K",
      "KC_L",
      "KC_SCLN",
      "KC_QUOT",
      "KC_LSFT",
      "KC_Z",
      "KC_X",
      "KC_C",
      "KC_V",
      "KC_B",
      "TO(2)",
      "KC_NO",
      "KC_N",
      "KC_M",
      "KC_COMM",
      "KC_DOT",
      "KC_SLSH",
      "KC_RSFT",
      "KC_LGUI",
      "KC_GRV",
      "KC_BSLS",
      "KC_LEFT",
      "KC_RGHT",
      "KC_LEFT",
      "KC_DOWN",
      "KC_UP",
      "KC_RGHT",
      "KC_RGUI",
      "KC_LCTL",
      "KC_LALT",
      "KC_LALT",
      "KC_RCTL",
      "KC_HOME",
      "KC_PGUP",
      "KC_BSPC",
      "KC_DEL",
      "KC_END",
      "KC_PGDN",
      "KC_ENT",
      "KC_SPC"
    ],
    [
      "KC_F12",
      "KC_F1",
      "KC_F2",
      "KC_F3",
      "KC_F4",
      "KC_F5",
      "KC_TRNS",
      "KC_TRNS",
      "KC_F6",
      "KC_F7",
      "KC_F8",
      "KC_F9",
      "KC_F10",
      "KC_F11",
      "KC_TRNS",
      "KC_EXLM",
      "KC_AT",
      "KC_LCBR",
      "KC_RCBR",
      "KC_PIPE",
      "TO(0)",
      "KC_TRNS",
      "KC_UP",
      "KC_7",
      "KC_8",
      "KC_9",
      "KC_ASTR",
      "KC_F12",
      "KC_TRNS",
      "KC_HASH",
      "KC_DLR",
      "KC_LPRN",
      "KC_RPRN",
      "KC_GRV",
      "KC_DOWN",
      "KC_4",
      "KC_5",
      "KC_6",
      "KC_PLUS",
      "KC_TRNS",
      "KC_TRNS",
      "KC_PERC",
      "KC_CIRC",
      "KC_LBRC",
      "KC_RBRC",
      "KC_TILD",
      "TO(2)",
      "KC_TRNS",
      "KC_AMPR",
      "KC_1",
      "KC_2",
      "KC_3",
      "KC_BSLS",
      "KC_TRNS",
      "KC_NO",
      "KC_TRNS",
      "KC_TRNS",
      "KC_TRNS",
      "KC_TRNS",
      "KC_TRNS",
      "KC_DOT",
      "KC_0",
      "KC_EQL",
      "KC_TRNS",
      "UG_NEXT",
      "KC_TRNS",
      "UG_TOGG",
      "ANY(RGB_M_P)",
      "KC_TRNS",
      "KC_TRNS",
      "UG_VALD",
      "UG_VALU",
      "KC_TRNS",
      "KC_TRNS",
      "UG_HUED",
      "UG_HUEU"
    ],
    [
      "KC_TRNS",
      "KC_TRNS",
      "KC_TRNS",
      "KC_TRNS",
      "KC_TRNS",
      "KC_TRNS",
      "KC_TRNS",
      "KC_TRNS",
      "KC_TRNS",
      "KC_TRNS",
      "KC_TRNS",
      "KC_TRNS",
      "KC_TRNS",
      "KC_TRNS",
      "KC_TRNS",
      "KC_TRNS",
      "KC_TRNS",
      "MS_UP",
      "KC_TRNS",
      "KC_TRNS",
      "TO(1)",
      "KC_TRNS",
      "KC_TRNS",
      "KC_TRNS",
      "KC_TRNS",
      "KC_TRNS",
      "KC_TRNS",
      "KC_TRNS",
      "KC_TRNS",
      "KC_TRNS",
      "MS_LEFT",
      "MS_DOWN",
      "MS_RGHT",
      "KC_TRNS",
      "KC_TRNS",
      "KC_TRNS",
      "KC_TRNS",
      "KC_TRNS",
      "KC_TRNS",
      "KC_MPLY",
      "KC_TRNS",
      "KC_TRNS",
      "KC_TRNS",
      "KC_TRNS",
      "KC_TRNS",
      "KC_TRNS",
      "TO(0)",
      "KC_TRNS",
      "KC_TRNS",
      "KC_TRNS",
      "KC_MPRV",
      "KC_MNXT",
      "KC_TRNS",
      "KC_TRNS",
      "KC_TRNS",
      "KC_TRNS",
      "KC_TRNS",
      "MS_BTN1",
      "MS_BTN2",
      "KC_VOLU",
      "KC_VOLD",
      "KC_MUTE",
      "KC_TRNS",
      "KC_TRNS",
      "KC_TRNS",
      "KC_TRNS",
      "KC_TRNS",
      "KC_TRNS",
      "KC_TRNS",
      "KC_TRNS",
      "KC_TRNS",
      "KC_TRNS",
      "KC_TRNS",
      "KC_TRNS",
      "KC_TRNS",
      "KC_WBAK"
    ]
  ],
  "author": ""
}

Links