ホーム » 技術 » 分割キーボードのためのqmkファームウエア忘備録

分割キーボードのためのqmkファームウエア忘備録


本文中にアフィリエイトリンクが含まれる場合があります。
表示が乱れた場合は再ロードをお試しください。

分割キーボードのための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 Keyboard | QMK Firmware

キーの設定に関しては左手から記述していき、右手は新しい行として記述します。

イメージとしては縦長のキーボードをつくる感じです。

    "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
  )
    
};

キーマップに関しては先ほど設定した配置に合わせて設定していくだけです。

キーコードに関してはいかを参照してください。

Keycodes Overview | QMK Firmware

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です