Closed3
自作キーボードのファームウェア開発自分用メモ v1

QMK
キーマップについて
キーボードレイアウトエディター [1] を活用すると layout の matrix を手軽に設定できるとのこと [2].
- キーボードレイアウトエディターから Raw data をコピー
- PCB エディタを開きながら確認しつつ 2,3 のように ROW,COL の番号にキーボードレイアウトエディターの値を設定する
- コンバーターで変換 [3]
- フォーマット [4]
- 加工
$ cat copy.json | sed -e "s/label/matrix/g" | sed -e "s/x\":\"/x\": [/g" | sed -e "s/\",/],/g"
- ロータリーエンコーダー設定
keyboard.json の features の encoder を true にする
"features": {
"encoder":true,
},
encoder フィールドを設定
"encoder": {
"rotary": [
{ "pin_a": "C6", "pin_b": "D4", "resolution": 4 }
]
},
keymap.c にエンコーダー設定追加
bool encoder_update_user(uint8_t index, bool clockwise) {
if (index == 0) {
if (clockwise) {
tap_code(KC_AUDIO_VOL_UP);
} else {
tap_code(KC_AUDIO_VOL_DOWN);
}
return true;
}
return false;
}
clockwise の bool で向きを制御(逆向き !clockwise)
- Arduino Pro Micro の PIN の確認 [5]
参考
[1] keyboard-layout-editor.com
[2] 自作キーボード設計ガイド Vol 1 [3] Convert KLE raw to QMK info.json [4] JSON formatter [5] 1キーのキーボードを作ってみるPro Micro のピンと、atmega32u4 のピンの対応表が必要です。

Remap の対応
主にこちらの記事 [1] とドキュメント [2] を参考に進めた. ありがとうございます.
- VIA キーマップ追加
$ qmk new-keymap -kb papertools -km via
- rules.mk 作成
ロータリーエンコーダーの設定も忘れず.
VIA_ENABLE = yes
ENCODER_MAP_ENABLE = yes
- keymap.c にて, keymaps を default からコピー
- keymap.c にて, ロータリエンコーダー用のマップ追加
const uint16_t PROGMEM encoder_map[][NUM_ENCODERS][NUM_DIRECTIONS] = {
[0] = { ENCODER_CCW_CW(KC_AUDIO_VOL_DOWN, KC_AUDIO_VOL_UP) },
};
- config.h 追加
#pragma once
#define NUM_ENCODERS 1
#define NUM_DIRECTIONS 2
- マージされてない場合 Remap にて info.json を求められるので, 追加
keyboard.json をコピーして必須項目 [2] を追加していく.
name, vendorId, productId, matrix, layouts keymap
layouts keymap は, キーボードレイアウトエディター [3] から JSON ファイルをダウンロードして, info.json に反映させる
例:
"layouts": {
"keymap": [
["0,1", "1,0", "0,0"],
[
{
"y": -0.5,
"x": 3.75
},
"1,3\n\n\n\n\n\n\n\n\ne0"
],
[
{
"y": -0.5,
"x": 0.25
},
"1,2",
"0,2",
"1,1"
]
]
}
ロータリーエンコーダーのレイアウトについては, こちらを参考 [4].
- コンパイル
$ qmk compile -kb papertools -km via
- QMK Toolbox で Flash, Flash 後に Remap で設定した場合に ROM の内容で混乱する可能性があるので, 動作確認の際には Clear EEPROM を忘れず.
参考
[1] QMK Firmware、REMAP(VIA)の対応手順
[2] Specification
[3] keyboard-layout-editor.com
[4] Rotary Encoders

とりあえず流れがつかめたので, クローズ.
このスクラップは8日前にクローズされました