まえがき
最近、また自作キーボードを作っている。
前回、一度目の自作キーボードを作った時は、初めてということでファームウェアの作成にはWebツールを活用した。しかし、今回はマイコンをPro MicroからRP2040 zeroに変更したため、前回使ったツールが使えなくなった。
そこで、今回は最も標準的なファームウェア作成ツールと言っても過言ではない、QMKを使ってファームウェアを作成してみた。
QMKは現在も活発に開発が進められており、変化が大きいということで、過去の記事やChat GPTの情報と異なる部分があったので、その辺を中心にこの記事にメモ書きしておく。
QMK環境
WindowsでQMKを導入するのは、ちょっと手間がかかりそう。
ということで、筆者は隣の部屋に放置していたiMac 2017を引っ張り出すという方法で解決。
macであれば、
brew install qmk/qmk/qmk
だけで導入できるので楽。とても楽。M4 mac mini欲しくなった。
なお、上記コマンドを使うにはpipやhomebrewが使えるようにする必要がある……といってもwin機より楽だよね。
new-keyboard
まずは、ターミナルを開いて、セットアップ。
qmk setup
これはQMKを使う時は毎回打つ必要がある。
続いて、新しいキーボードを作成する。以下のようにnew-keyboardコマンドを実行すると、対話形式で名称等を設定できるため、筆者のようなソフト苦手な人間にも優しい。
qmk new-keyboard
それぞれの項目を以下に示す。
Keyboard Name
キーボード名。
“作者/キーボード名”の形式で入力するらしい。筆者は知らなかったので、キーボード名だけ入力したが、なんとかなった。
GitHub / Real Name
名前を2回聞かれるが、GitHubにあげるわけでなければ気にしなくていいと思う。
Default Layout
作成するキーボード配列が特殊で、特に参考になりそうなものがなかったため、”none of the above”を選択した。
Using a Development Board?
Pro Microのように、マイコンが基板に載ってて、水晶振動子や外部端子も付いてるやつがdevelopment boardと呼ばれるもの。
これを使っていますか?という問いだが、RP2040 zeroのボードを使っているため、y(yes)……としたら選択肢になかったので、n(no)でやった。
MCU
RP2040を使っているため、RP2040を選択。
ファイル構成
new-keyboardコマンドで新しいキーボードを作成すると、以下のようなファイルが生成された。
.
├── keymaps
│ └── default
│ └── keymap.c
├── keyboard.json
└── readme.m
過去のバージョンでは、これよりも複雑なファイル構成だったようだが、設定ファイルがkeyboard.jsonに統合された結果として、現在ではこのような構成になっている。
そのため、Chat GPTでは学習データが古いため、正確な情報が出てきにくい。
RP2040-zeroではkeyboard.jsonを以下のように書いた。
--- 前略 ---
"bootloader": "rp2040",
"diode_direction": "COL2ROW",
--- 中略 ---
"matrix_pins": {
"cols": ["GP8", "GP7", "GP6", "GP5", "GP4", "GP3", "GP29", "GP28", "GP27", "GP26", "GP15", "GP14"],
"rows": ["GP9", "GP10", "GP13", "GP12"]
},
"processor": "RP2040",
--- 後略 ---
コンパイル
keyboard.jsonとkeymap.cをいい感じに編集できたら、コンパイルする。
(keymap.cについては別でまとめる予定なので、詳しくはそちらをご参照ください。)
qmk setupをしてから以下のコマンドでコンパイルする。
qmk compile -kb test -km default
これは、testという名前のキーボードのdefalutレイアウトをコンパイルしている。
なお、new-keyboardで正しく設定していれば、testの部分は”開発者/キーボード名”の形式になるはず……
無事にコンパイルが済めば、(筆者はエラーと格闘したが)作業ディレクトリに.uf2という拡張子のファイルができている。
これがRP2040 zeroボードで使えるファームウェア。
書き込み
RP2040 zeroの場合、Bootスイッチを押しながらUSBケーブルでPCに接続すると、外部ストレージのようにfinder(Windowsならエクスプローラー)で表示される。
ここに先ほどの.uf2ファイルをドラッグ&ドロップして突っ込めば、完了。
最初は戸惑うぐらい書き込みが簡単。
差し直したらUSBキーボードとして認識された。
あとがき
QMKの設定ファイルが統合されたおかげで、思っていたよりも簡単にQMKでファームウェアを作成することができた。
RP2040 zeroに関しても、特に厄介なトラブルが起きなかったので、これからはPro Microではなく、RP2040 zeroを採用していこうと思う。安いし、