- 2024/02/14(水)
分割キーボードのためのqmkファームウエア忘備録
表示が乱れた場合は再ロードをお試しください。
自作キーボードに興味があるなら、QMKファームウェアと分割キーボードの仕組みは必見です。この記事では、QMKで左右分割型キーボードを構築するための基本的な考え方や設定方法を解説します。Let's Splitのような人気モデルの参考情報や、Raspberry Pi Picoを使った事例も紹介し、自作ユーザーが知っておくべき基礎知識をまとめました。
分割キーボードのためのqmkファームウエア作成を忘備録として書きます。
自分でも完全に理解しているわけではないですが、qmkファームウエアのバージョンの違いかインターネット上の情報だと上手くいかなかったため書きます。
jsonファイルの作成
環境設定については、自分なりにまとめたので必要だったらご覧ください。
環境設定やファイルの製作が終わっている前提で進めます。
因みに上手くいかない理由は、ちょっと前のバージョンでは上述のファイルのほかにconfig.h、rules.mk、info.jsonなどのファイルがあり、ドキュメント等でもこれらのファイルについて多く解説されていますが、これらに記載していた内容はData Driven Configurationの思想に基づき、最近のバージョンでほぼkeyboard.jsonに集約されたそうです。
私はpromicroを使っていますので、他のMCUを使う方はそちらを調べてください。
考え方は同じだと思います。
{
"manufacturer": "test",
"keyboard_name": "test",
"maintainer": "test",
"development_board": "promicro",
"features": {
"bootmagic": true,
"command": false,
"console": false,
"extrakey": true,
"mousekey": true,
"nkro": true
},
"usb": {
"device_version": "1.0.0",
"pid": "0x0000",
"vid": "0xFEED"
},
"diode_direction": "COL2ROW",
"matrix_pins": {
"cols": ["D4", "C6", "D7", "E6", "B4", "B5"],
"rows": ["F7", "B1", "B3", "B2", "B6"]
},
"split": {
"enabled": true,
"soft_serial_pin": "D0",
"matrix_pins": {
"right": {
"cols": ["D4", "C6", "D7", "E6", "B4", "B5"],
"rows": ["F6", "B1", "B3", "B2", "B6"]
}
}
},
"layouts": {
"LAYOUT": {
"layout": [
{ "matrix": [0, 0], "x": 0, "y": 0 },
{ "matrix": [0, 1], "x": 1, "y": 0 },
{ "matrix": [0, 2], "x": 2, "y": 0 },
{ "matrix": [0, 3], "x": 3, "y": 0 },
{ "matrix": [0, 4], "x": 4, "y": 0 },
{ "matrix": [0, 5], "x": 5, "y": 0 },
{ "matrix": [1, 0], "x": 0, "y": 1 },
{ "matrix": [1, 1], "x": 1, "y": 1 },
{ "matrix": [1, 2], "x": 2, "y": 1 },
{ "matrix": [1, 3], "x": 3, "y": 1 },
{ "matrix": [1, 4], "x": 4, "y": 1 },
{ "matrix": [1, 5], "x": 5, "y": 1 },
{ "matrix": [2, 0], "x": 0, "y": 2 },
{ "matrix": [2, 1], "x": 1, "y": 2 },
{ "matrix": [2, 2], "x": 2, "y": 2 },
{ "matrix": [2, 3], "x": 3, "y": 2 },
{ "matrix": [2, 4], "x": 4, "y": 2 },
{ "matrix": [2, 5], "x": 5, "y": 2 },
{ "matrix": [3, 0], "x": 0, "y": 3 },
{ "matrix": [3, 1], "x": 1, "y": 3 },
{ "matrix": [3, 2], "x": 2, "y": 3 },
{ "matrix": [3, 3], "x": 3, "y": 3 },
{ "matrix": [3, 4], "x": 4, "y": 3 },
{ "matrix": [3, 5], "x": 5, "y": 3 },
{ "matrix": [4, 0], "x": 0, "y": 4 },
{ "matrix": [4, 1], "x": 1, "y": 4 },
{ "matrix": [4, 2], "x": 2, "y": 4 },
{ "matrix": [4, 3], "x": 3, "y": 4 },
{ "matrix": [4, 4], "x": 4, "y": 4 },
{ "matrix": [5, 0], "x": 0, "y": 0 },
{ "matrix": [5, 1], "x": 1, "y": 0 },
{ "matrix": [5, 2], "x": 2, "y": 0 },
{ "matrix": [5, 3], "x": 3, "y": 0 },
{ "matrix": [5, 4], "x": 4, "y": 0 },
{ "matrix": [5, 5], "x": 5, "y": 0 },
{ "matrix": [6, 0], "x": 0, "y": 1 },
{ "matrix": [6, 1], "x": 1, "y": 1 },
{ "matrix": [6, 2], "x": 2, "y": 1 },
{ "matrix": [6, 3], "x": 3, "y": 1 },
{ "matrix": [6, 4], "x": 4, "y": 1 },
{ "matrix": [6, 5], "x": 5, "y": 1 },
{ "matrix": [7, 0], "x": 0, "y": 2 },
{ "matrix": [7, 1], "x": 1, "y": 2 },
{ "matrix": [7, 2], "x": 2, "y": 2 },
{ "matrix": [7, 3], "x": 3, "y": 2 },
{ "matrix": [7, 4], "x": 4, "y": 2 },
{ "matrix": [7, 5], "x": 5, "y": 2 },
{ "matrix": [8, 0], "x": 0, "y": 3 },
{ "matrix": [8, 1], "x": 1, "y": 3 },
{ "matrix": [8, 2], "x": 2, "y": 3 },
{ "matrix": [8, 3], "x": 3, "y": 3 },
{ "matrix": [8, 4], "x": 4, "y": 3 },
{ "matrix": [8, 5], "x": 5, "y": 3 },
{ "matrix": [9, 0], "x": 0, "y": 4 },
{ "matrix": [9, 1], "x": 1, "y": 4 },
{ "matrix": [9, 2], "x": 2, "y": 4 },
{ "matrix": [9, 3], "x": 3, "y": 4 },
{ "matrix": [9, 4], "x": 4, "y": 4 }
]
}
}
}
まず、matrixピンには使うピンの設定です。
promicroの場合は以下の画像の文字列を使用します。
例で挙げたキーボードは縦6個、横5個みたいな感じで設定しています。

今回は分割キーボードということで、二つのキーボードを作る感じになると思います。
なので、最初のmatrixpinで左手を記述して、その後のsplitの項で右手を記述する感じです。
同じだったらコピペ、異なる場合はそれに合わせて変更する感じです。
シリアル通信のために使うピンをD0として設定しています。

キーの設定に関しては左手から記述していき、右手は新しい行として記述します。
イメージとしては縦長のキーボードをつくる感じです。

"split": {
"enabled": true,
"soft_serial_pin": "D0",
"matrix_pins": {
"right": {
"cols": ["D4", "C6", "D7", "E6", "B4", "B5"],
"rows": ["F6", "B1", "B3", "B2", "B6"]
}
}
},キーマップの設定
// Copyright 2023 QMK
// SPDX-License-Identifier: GPL-2.0-or-later
#include QMK_KEYBOARD_H
#define DIODE_DIRECTION COL2ROW
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
[0] = LAYOUT(
KC_5,
KC_4,
KC_3,
KC_2,
KC_1,
LSFT_T(KC_ESC),
KC_T,
KC_R,
KC_E,
KC_W,
KC_Q,
KC_TAB,
KC_G,
KC_F,
KC_D,
KC_S,
KC_A,
KC_LEFT_SHIFT,
KC_B,
KC_V,
KC_C,
KC_X,
KC_Z,
KC_LEFT_CTRL,
KC_NO,
KC_NO,
KC_CAPS_LOCK,
KC_ENTER,
KC_SPACE,
KC_BACKSPACE,
KC_0,
KC_9,
KC_8,
KC_7,
KC_6,
KC_MINUS,
KC_P,
KC_O,
KC_I,
KC_U,
KC_Y,
KC_QUOTE,
KC_SEMICOLON,
KC_L,
KC_K,
KC_J,
KC_H,
KC_BACKSLASH,
KC_SLASH,
KC_DOT,
KC_COMMA,
KC_M,
KC_N,
KC_LEFT,
KC_RIGHT,
KC_PAGE_DOWN,
KC_PAGE_UP,
KC_NO
)
};
キーマップに関しては先ほど設定した配置に合わせて設定していくだけです。
キーコードに関してはいかを参照してください。