まえがき
本記事は私の記事の改変・転載になります。
少しでも多くの方に自作キーボードの素晴らしさを広めたいと思いこのような形となりました。
一人でも多く、キーボード自作erが増えてくれれば嬉しく思います。
最後に、次回のリンクがありますがQiitaへの転載は順次行います。
早く続きが読みたい方はリンクから飛んでみてくださいませ。
自作キーボードの日本語化
前回まででようやく物理的にはJIS(日本語)配列のキーボードができました。
ただ、このままではもともと海外で生産されたPCBに無理やり日本語配列通りにキースイッチをくっつけて、キートップをつけただけです。
実際に打ってみるとわかりますが、思ったように文字が入力できません。
そこで今回は、DZ60(今回使用したPCB)のファームウェアを書き換えて、真の意味でのオリジナル自作日本語キーボードを完成させましょう!!
そう「オリジナル自作日本語キーボード」を!!
【以下余談】
なぜ2回言ったのかというと、会社の先輩方にも
😤「日本語配列は情弱の極み、英語配列キーボードこそ最適化されたキーボードで仕事も捗る!!」
と煽られるですが、キーボードを自作するようなちょっと変わった方々も同じなのか、情報が少量しかないんですよね。
それでも邪教(日本語配列)を崇拝する同志の手助けになるべく記録を残したいと思います。
おや…誰か来たようだ。誰だろう、こんな夜中なのに…
理想の配列を具現化しよう
キースイッチの配置が同じでも、各キースイッチに何を割り当てるかは完全に個人の自由です!!
まず自分の理想とするキー配置を一旦整理しましょう。
そこでオススメのツールはkeyboard-layout-editor.com
ここで自分の追い求める理想のキーマップを形にしていきましょう。
使い方は簡単
上のpresetからISO60%を読み込んで、DeleteKeyとAddKeyを駆使して形にしていくだけ!
今回、私が目指すキーマップはこんな感じ
(かの名機BLACK PAWNを参考にした配列になってます)
突然レイヤーという概念が出てきましたが、難しいことはなにもありません。
基本的にはLayer1はそのまま押したときの動作。
その他のレイヤーは指定したキーを押しながら入力した際の動作を示してます。
ちなみにShiftキーの機能(「Shiftキー+1キー」で「!」)はレイヤーではなく標準で決まっています。
今回はFnキーを押しながらの時の動作をLayer2にまとめてます。
ファンクションキーとプリントスクリーンキー、LEDの調光機能を実現しています。
RGB関係のキーはこちらを参照
Layerはいくつでも設定できますのでここはお好みでどうぞ。
意外と書き出してみると、あーでもないこーでもないと思案しますが、それがいい…
キーボードを作る時はね、誰にも邪魔されず 自由でなんというか救われてなきゃあダメなんだ 独りで静かで豊かで・・・
ファームウェアの書き換え
ではゴールが決まったので、早速設定を作り込んでいきましょう!!
環境構築
実際にキーボードへの書き込みにはqmk_firmwareというツールを使います。
私はMac OS Catalina で実施しました。
Windowsの方はWSLを利用すると同様の手順で実施できるかと思います。
(参考記事はこちら)
cd WorkDir
git clone https://github.com/qmk/qmk_firmware
cd qmk_firmware
./util/qmk_install.sh
make git-submodule
それなりに時間がかかるので、終わるまでのんびり待ちましょう。
これで環境構築は終わりです。
キーマップの定義ファイル
実行が終わると、様々なPCB用の定義ファイルなどがダウロードされています。
その中にあるDZ60用のプロファイルに、先程決めたキーマップを定義していきます。
今回はDZ60を使っているので
keyboards/dz60/dz60.hの最終行の
#endif
の手前に下記コードを追加してくだい。
これによって今回のキースイッチの配列をPCBに宣言することができます。
#define LAYOUT_65_yuzuki( \
k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0a, k0b, k0c, k0e, k0f, \
k10, k12, k13, k14, k15, k16, k17, k18, k19, k1a, k1b, k1c, k1d, \
k20, k22, k23, k24, k25, k26, k27, k28, k29, k2a, k2b, k2c, k1e, k2d, \
k30, k32, k33, k34, k35, k36, k37, k38, k39, k3a, k3b, k3c, k3d, k3e, \
k40, k41, k43, k46, k4a, k4b, k4c, k4d, k4e \
)
{ \
{ k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0a, k0b, k0c, k0e, k0f }, \
{ k10, KC_NO, k12, k13, k14, k15, k16, k17, k18, k19, k1a, k1b, k1c, k1d, k1e }, \
{ k20, KC_NO, k22, k23, k24, k25, k26, k27, k28, k29, k2a, k2b, k2c, k2d, KC_NO }, \
{ k30, KC_NO, k32, k33, k34, k35, k36, k37, k38, k39, k3a, k3b, k3c, k3d, k3e }, \
{ k40, k41, KC_NO, k43, KC_NO, KC_NO, k46, KC_NO, KC_NO, KC_NO, k4a, k4b, k4c, k4d, k4e } \
}
(KC_NOはキースイッチが接続されていないことを意味します)
キーの役割を決める
前項でPCBに「どこに何という名前のキースイッチが接続されているか」を教えてあげたので
次はPCBに「各名前のキースイッチの役割」を教えてあげます。
その定義ファイルはqmk_firmware/keyboards/dz60/keymaps 配下にあります。
過去の偉人達のテンプレートを見ることができます。
結構勉強になりますし、思わぬキーボードの使い方も発見できるので、一度見てみると楽しいです。
しかし、今回はこれらのテンプレートを使うことなく、新たに作っていきます。
まずは過去の偉人たちに仲間入りすべくディレクトリを作成。
mkdir qmk_firmware/keyboards/dz60/keymaps/yuzuki-jis
その中に下記の2ファイルを追加していきます。
MOUSEKEY_ENABLE = no
CONSOLE_ENABLE = yes
#include QMK_KEYBOARD_H
enum layer_names {
_QW,
_L1,
};
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
/* 0: qwerty */
/*┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┐
│Esc│ 1 │ 2 │ 3 │ 4 │ 5 │ 6 │ 7 │ 8 │ 9 │ 0 │ - │ ^ │ ¥ |BS │ 15
├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───┤
│ Tab │ Q │ W │ E │ R │ T │ Y │ U │ I │ O │ P │ @ │ [ │ Ent │ 13
├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┐ │
│ Ctrl │ A │ S │ D │ F │ G │ H │ J │ K │ L │ ; │ : │ ] │ │ 14
├──────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬───┤
│Shft │ Z │ X │ C │ V │ B │ N │ M │ , │ . │ / │ _ | ↑ |Sft│ 14
├────┬──┴─┬─┴──┬┴───┴───┴───┴───┴───┴───┼───┼───┼───┼───┼───┤
│Alt │Win │MHNK│ Space |HNK│FN │ ← │ ↓ │ → │ 9
└────┴────┴────┴────────────────────────┴───┴───┴───┴───┴───┘
FnキーをL1レイヤーへの切り替えキーに指定
*/
[_QW] = LAYOUT_65_yuzuki(
// 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_JYEN, KC_BSLS,
KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC,
KC_LCTL, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_BSPC, KC_ENT,
KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RO, KC_UP, KC_RSFT,
KC_LALT, KC_LGUI, KC_HANJ, KC_SPC, KC_HAEN, MO(_L1), KC_LEFT, KC_DOWN, KC_RIGHT
),
/* 1: fn 1 */
/*┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┐
│ │F1 │F2 │F3 │F4 │F5 │F6 │F7 │F8 │F9 │F10│F11│F12│ |Del│
├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───┤
│ │ │ │ │ │ │ │ │ │ │Prn│ │ │ │
├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┐ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │
├──────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬───┤
│ │HUI│HUD│VAI│ │ │ │ │ │ │ │ | | │
├────┬──┴─┬─┴──┬┴───┴───┴───┴───┴───┴───┼───┼───┼───┼───┼───┤
│ │ │ │ | │ │ │ │ │
└────┴────┴────┴────────────────────────┴───┴───┴───┴───┴───┘
HUI…色相を変更
HUD…色相を逆方向に変更
VAI…光度をアップ、Shiftを押しながらでダウン
*/
[_L1] = LAYOUT_65_yuzuki(
// 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
_______, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_PSCR, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, RGB_HUI, RGB_HUD, RGB_VAI, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______
),
};
各コードの意味や役割はこちらのドキュメント参照してください。
また関数名やレイヤー名は自由に変更しても大丈夫です。
これで、準備は完了です!
ファームウェアの書き込み
さぁいよいよ書き込みです。
キーボードをパソコンと接続して、下記コマンドを実行してください。
make dz60:yuzuki-jis:dfu
すると、実際にPCBに認識されているキースイッチの数と設定ファイルに書き込まれているキーの数に相違がなければ、5回[OK]という表記が出た後
ERROR: Bootloader not found. Trying again in 5s.
というエラーが出ます。
このエラーが出たら、キーボードをひっくり返して…
このリセットボタンをポチッと押しましょう。
すると、キーボード内のメモリに残っていた設定が消され、今回の設定が記録されます!!
完成!!
最後に入力テストを行って、問題がなければ…
これで名実ともに邪教(日本語配列)の自作キーボードの完成です!
お疲れ様でした!!
また、今更になりますが今回のコードはあくまでも一例です。
この通りにしなければいけないわけではなく、自由に書き換えて自分だけのキーマップを実現してください!
基本的にはこれが日本語キーボードの全てですが、実は細かい微調整もあるので次回(最終回予定)で解説したいと思います。
待て!次回!!