Closed3

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

おでんおでん

QMK

キーマップについて

キーボードレイアウトエディター [1] を活用すると layout の matrix を手軽に設定できるとのこと [2].

  1. キーボードレイアウトエディターから Raw data をコピー
    • PCB エディタを開きながら確認しつつ 2,3 のように ROW,COL の番号にキーボードレイアウトエディターの値を設定する
  2. コンバーターで変換 [3]
  3. フォーマット [4]
  4. 加工
$ cat copy.json | sed -e "s/label/matrix/g" | sed -e "s/x\":\"/x\": [/g" | sed -e "s/\",/],/g"
  1. ロータリーエンコーダー設定

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)

  1. Arduino Pro Micro の PIN の確認 [5]

参考

[1] keyboard-layout-editor.com
https://www.keyboard-layout-editor.com/
[2] 自作キーボード設計ガイド Vol 1
https://shop.yushakobo.jp/products/6557?pr_prod_strat=jac&pr_rec_id=6e7018d3c&pr_rec_pid=8300714623207&pr_ref_pid=8501747843303&pr_seq=uniform
[3] Convert KLE raw to QMK info.json
https://qmk.fm/converter/
[4] JSON formatter
https://jsonformatter.org
[5] 1キーのキーボードを作ってみる
https://note.com/kudoshusak/n/n6d4a5c360bcc

Pro Micro のピンと、atmega32u4 のピンの対応表が必要です。
おでんおでん

Remap の対応

主にこちらの記事 [1] とドキュメント [2] を参考に進めた. ありがとうございます.

  1. VIA キーマップ追加
$ qmk new-keymap -kb papertools -km via
  1. rules.mk 作成

ロータリーエンコーダーの設定も忘れず.

VIA_ENABLE = yes
ENCODER_MAP_ENABLE = yes
  1. keymap.c にて, keymaps を default からコピー
  2. keymap.c にて, ロータリエンコーダー用のマップ追加
const uint16_t PROGMEM encoder_map[][NUM_ENCODERS][NUM_DIRECTIONS] = {
    [0] = { ENCODER_CCW_CW(KC_AUDIO_VOL_DOWN, KC_AUDIO_VOL_UP) },
};
  1. config.h 追加
#pragma once

#define NUM_ENCODERS 1
#define NUM_DIRECTIONS 2
  1. マージされてない場合 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].

  1. コンパイル
$ qmk compile -kb papertools -km via
  1. QMK Toolbox で Flash, Flash 後に Remap で設定した場合に ROM の内容で混乱する可能性があるので, 動作確認の際には Clear EEPROM を忘れず.

参考

[1] QMK Firmware、REMAP(VIA)の対応手順
https://zenn.dev/74th/articles/7efc788a31d06f

[2] Specification
https://caniusevia.com/docs/specification/

[3] keyboard-layout-editor.com
https://www.keyboard-layout-editor.com/

[4] Rotary Encoders
https://caniusevia.com/docs/layouts#rotary-encoders

おでんおでん

とりあえず流れがつかめたので, クローズ.

このスクラップは8日前にクローズされました