qmk vial 対応

以前にsu120を使ってつくったコントコーラー
ちょっと変更しようとしたら、qmkが進化してて、compileが通らない。
今回作りたいのは、読書用のコントローラー。
PGUP/PGDOWN や、MOUSE WHEELの操作をロータリーエンコーダで行いたい。
色々トライした結果、やりたいことが以下のように絞れた
- GUIでkeymapの(再)設定がしたい
- RotaryEncoderが使いたい
- OLEDを自由に使いたい
- Mouse Key が使いたい
- LAYER で、独自SAFE_RANGE が使いたい
(QMKキーボードを複数台使う場合、通常のMO(0)などを利用すると、別キーボード影響がでてしまう。)
これを全部かなえるためには、VIAではなく、 VIAL対応
が必要だとわかった。
AIに頼んで、まとめてもらった
qmk, VIA, VIAL 比較
✅ QMK / VIA / VIAL の比較表
機能・特徴 | QMK | VIA | VIAL |
---|---|---|---|
キー配列の設定 | コードで定義 | UIでリアルタイムに変更可 | UIでリアルタイムに変更可 |
カスタムキーコード | ✅ 対応(自由) | ❌ 非対応(SAFE_RANGE不可) | ✅ 対応(SAFE_RANGE使用可) |
OLED表示 | ✅ 対応 | ✅ ただし表示内容は固定 | ✅ 同上 |
ロータリーエンコーダー | ✅ 対応 | ✅ QMK側で制御 | ✅ 同上 |
keymap変更 Web UI | ❌ なし | ✅ usevia.app | ✅ vial.rocks |
専用アプリ | ❌ 不要(QMK Toolboxなど) | ✅ VIAアプリ(軽量) | ✅ VIALアプリ(高機能) |
EEPROMの設定保存 | ✅ 可 | ✅ 可 | ✅ より細かく制御可 |
セキュリティロック(鍵機能) | ❌ | ❌ | ✅ キーボードの保護機能あり |
独自キーUI表示(名前付きキー) | ❌ | ❌ | ✅ 対応 |
複数レイヤーサポート | ✅ | ✅(最大4レイヤー) | ✅(制限なし) |
初心者向け | ❌(やや上級者向け) | ✅ とても扱いやすい | △ やや知識が必要 |
開発者向け自由度 | ✅ 最大限の自由 | △ 制限あり | ✅ ほぼ自由 |
✨ ざっくりまとめ
- QMK:すべての土台。最も自由だけどコード編集が必要。
- VIA:初心者向け。UIでレイヤーやキー変更ができて簡単。
- VIAL:VIAのパワーアップ版。カスタムキーやセキュリティも扱える上級者向けUIツール。
QMKからvialへの移行作業
ざっくりとは、この解説がとてもよかった。
必要な構成は、以下の通り。
vial-qmk/keyboards/su120/
.
├── keyboard.json
└── keymaps
└── vial
├── config.h
├── keymap.c
├── rules.mk
└── vial.json
作成すべき.jsonは keyboard.json と vial.json。
以降に2つのjsonファイルの内容を記述する。
vial.json の作成
レイアウトファイルを作成
vial GUI用に、どんなキー配置かを情報化する。
以下のサイトで、キー配置を作成し、 Top Legend
に0 origin でキーの配置を 0,0
という形式で記述しておく。
今回は、1行x4列のキーボードなので、こんな感じ。
レイアウトのJSON形式は、 Raw data
TABで確認できる。
が、ここで特殊な対応。
今回のキーボードは、1 ROW なので、配列の要素が浅い。
正しい値は、以下の通り。
[["0,0","0.1","0.2","0.3"]]
vial.json の作成
以上のキー配列データをGUIに渡すための情報、vial.json の 項目 keymap
に設定する。
{
"lighting": "none",
"matrix": {
"rows": 1,
"cols": 4
},
"layouts": {
"keymap": [
["0,0","0,1","0,2","0,3"]
]
}
}
keyboard.json の作成
qmk の config.h に記述するような内容を以下の形式で記述する。
AIに変換してもらった。。
{
"keyboard_name": "SU120",
"manufacturer": "e3w2q",
"maintainer": "e3w2q",
"url": "",
"usb": {
"vid": "0x1209",
"pid": "0x4649"
},
"processor": "atmega32u4",
"bootloader": "caterina",
"matrix_pins": {
"rows": ["F6" ],
"cols": [ "D1", "D0", "D4", "C6" ]
},
"diodes": {
"direction": "COL2ROW"
},
"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 }
]
}
}
}
souce codeの移行
config.h
VIAL_KEYBOARD_UID は、ユーニックなるように生成
python3 util/vial_generate_keyboard_uid.py
output をconfig.h に反映して、こんな感じ。
#pragma once
#define DEVICE_VER 0x0001
#define VIAL_KEYBOARD_UID {0xDC, 0xB9, 0x6E, 0xD8, 0x30, 0xFC, 0x43, 0xE5}
#define VIAL_UNLOCK_COMBO_ROWS {0, 0}
#define VIAL_UNLOCK_COMBO_COLS {0, 1}
/* Rotary encoder */
#define ENCODERS_PAD_A {F5, B5}
#define ENCODERS_PAD_B {F4, B4}
#define ENCODER_RESOLUTION 4
// エンコーダーのデバウンス設定を強化
#define DEBOUNCE 10 // デバウンス時間を増やす(デフォルトは5)
#define ENCODER_RESOLUTIONS {4, 4} // 分解能を下げて誤検知を減らす
#define ENCODER_RESOLUTIONS_RIGHT {4, 4}
// 方向検出の安定化
#define ENCODER_DIRECTION_FLIP // 方向が逆の場合はこの行をコメントアウト
#define ENCODER_DEBOUNCE 8 // エンコーダー専用のデバウンス値を設定
// スキャン頻度を調整
#define TAP_CODE_DELAY 20 // 遅延を少し増やして安定性を向上
/* COL2ROW, ROW2COL*/
#define DIODE_DIRECTION COL2ROW
rules.mk
このファイルが一番大事
今回、OLEDとMOUSE KEYとロータリーエンコーダを全部利用しようとしたら、compile後のbinaryが大きすぎて、Pro Micro 入りきらない。
どうやってサイズダウンしようかとAIに相談すると、使わない高度な機能を全部無効化しろと。
結果、なんとか収まったので、AIありがとう。
# VIAL対応
VIA_ENABLE = yes
VIAL_ENABLE = yes
# ロータリーエンコーダのカスタマイズ用
ENCODER_ENABLE = yes
ENCODER_MAP_ENABLE = yes
# OLED
OLED_ENABLE = yes
# マウス操作
MOUSEKEY_ENABLE = yes
# binaryのsize縮小用にdebugや使わない機能を除外
CONSOLE_ENABLE = no
COMMAND_ENABLE = no
SPACE_CADET_ENABLE = no
GRAVE_ESC_ENABLE = no
MAGIC_ENABLE = no
KEY_OVERRIDE_ENABLE = no
TAP_DANCE_ENABLE = no
COMBO_ENABLE = no
# バイナリ最適化オプションを有効化
LTO_ENABLE = yes
keymap.c
compile
git colne した vial-qmk配下で、qmkと同様にcompile
qmk compile -kb su120 -km vial
今回のディレクトリ構成。keyboardは、 su120
。keymap は、 vial
とした。
vial-qmk/keyboards/su120/keymaps/vial
ところで、AIに聞くと、以下のコマンドで、vialだよーという情報が出るらしいが、出ない。
でも動いたからよし。
qmk info -kb su120 -km vial
---
☒ su120: VIAL_ENABLE in rules.mk is no longer a valid option and should be removed
⚠ su120: DEVICE_VER in config.h is deprecated in favor of `usb.device_version` in info.json and will be removed at a later date
☒ su120: VIAL_KEYBOARD_UID in config.h is no longer a valid option and should be removed
☒ su120: VIAL_UNLOCK_COMBO_COLS in config.h is no longer a valid option and should be removed
☒ su120: VIAL_UNLOCK_COMBO_ROWS in config.h is no longer a valid option and should be removed
Keyboard Name: SU120
Manufacturer: e3w2q
Website:
Maintainer: e3w2q
Layouts: LAYOUT
Processor: atmega32u4
Bootloader: caterina
ファームウェアの書き込み
qmk flash -kb su120 -km vial
以下のメッセージがでたら、Pro Microのリセットスイッチを押す。
Flashing for bootloader: caterina
Waiting for USB serial port - reset your controller now (Ctrl+C to cancel)....
remap!
あとは、vialのWeb UIか、専用アプリでremapするだけ!
Chromeで、以下のサイトにアクセスする。
USBの接続メニューは、 su120
を選択。
keymapの設定画面は、まず、上部の4個のキーのどれかをクリックし、その後、下部のキーコードサンプルをクリックすると設定される。
ただし、一番右の 0x7e40
は、 SAFE_RANGE
で指定したLAYER指定なので、触ってはいけない