キーボード関係ブログ

自作キーボードの話題を中心に

QMK firmware キーレイアウトの編集 Introduction

エディタはVisual Studio Codeを使用する。プログラミングの経験がある人はそれぞれ好みのエディタを使えばよい。

Visual Studio Code - Visual Studio

 

エディタの初回起動時には、ソフトによってはプラグインやらアドオンやらの追加のインストールを要求してくる場合がある。プログラミングに触れたことが無い人はとりあえず全てYESで構わないだろう。やがて色々やりたくなってきたり、使いやすくしたくなったら各自調べてカスタマイズして頂きたい。

エディタを用いる最大の理由はその視認性である。プログラミングのイメージとして未経験者にありがちな「文字と数字がバラバラに並んでいるもの」を作るのがエディタの役割であり、またそうすることによってプログラムを読みやすくしてくれている。メモ帳でプログラムを書くことがいかに面倒なことであるかを知りたければ、実際にこれから下記で説明するファイルをメモ帳で開いてみればよい。

 

 

さてQMK firmwareは対応モデルのdefalultキーマップが大体揃っているので、それを元にして自分用のキーマップを編集していくことになる。キットを用いない場合でも、配線を既存のキットと同じようにすることでこれらのライブラリが使用できる。

それらはQMK firmwareインストールフォルダ内のkeyboardsフォルダに収められているので、まずはエディタから開いて確認しよう。

<msys2>\home\<username>\qmk_firmware\keyboards\<model>

 

例えばXD60フォルダ内のxd60.hを開くとこのようになる。

f:id:hukimijirantan:20180522212626p:plain

中央より下にかけてで表示された文字列が確認できる。これがXD60のキー配列(レイアウト)の定義を表している。

ここでXD60実機の配列を確認してみよう

f:id:hukimijirantan:20180517230656j:plain

文字列の並びとキーの配置がなんとなく似ていることがイメージできればそれでよい。少なくともエディタ内K45の表示がスペースキーに対応していそうだと予測できるだろう。

実際にこのK00K4Dまでの文字列に対してキーの機能を割り当てることで独自の配列を作成していくことになる。

 

次にエディタから、同フォルダ内"keymaps"フォルダにアクセスする。その中に"default"というフォルダがあるので、その中の"keymap.c"を開いてみよう。

f:id:hukimijirantan:20180523014238p:plain

先ほどと似たような文字列を含むプログラムが表示されていることがわかる。しかし先ほどとは違い、文字は青色ではなく、単語も異なることがわかる。

単語の部分に注目すると、その配置と意味がなんとなく理解できるだろう。実はこのファイルこそが独自のキーマップを作るための雛型であり、この部分の単語を好きに並び変えていくことによってオリジナルのキーマップを作成することができる。

default以外にも有志が作成したキーマップが色々とあるので、ここまで理解できたら他のファイルも眺めてみるといいだろう。世の中には面白いキーボードがあるものだと思いを馳せることができる。

 

次回、ついにキーマップの編集。

QMK firmware ファームウェアの初歩の初歩 8

ここから先は実機が必要となる。

例の如く実機をXD60として、この先の手順を見ていこう。

今回この記事を作成するにあたり、私もストックのPCBで一台組んだので、それを適時説明に用いることにする。

【表面】

f:id:hukimijirantan:20180517230643j:plain

【裏面】

f:id:hukimijirantan:20180517230656j:plain

ハード的にはPCBにキースイッチが半田付けされた状態であるのが望ましい。これはファームウェアを書き込んだ後に臨んだ動作をしてくれるかテストするために私が推奨するもので、慣れてきたら後回しにしても構わない。また、LEDの設定をファームウェアに盛り込んでいる場合にはもちろんLEDも先に半田付けしておかないと動作確認はできない。*1

 

それではQMK公式ページを確認して、ファームウェアを書き込もう

f:id:hukimijirantan:20180518002807p:plain

英語は要点を一番最初に書く傾向が強い。要はキーボード本体を書き込みモード(Bootlorder mode)にしろと書いてあるのだが、その方法はPCBの型番によって異なるようである。

XD60の場合は裏面にある物理スイッチを押すことで書き込みモードになる。まずはその位置を確認しよう

f:id:hukimijirantan:20180518005431j:plain

f:id:hukimijirantan:20180518005510j:plain

次にいよいよケーブルをPCに接続する。

接続したら裏面のLEDが点灯するのでそれを確認する。

f:id:hukimijirantan:20180518010105j:plain

次にQMK Toolboxに目を移すとこのようになっているはずである。

f:id:hukimijirantan:20180516214836p:plain

"Microcontroller"のプルダウンから"Atmega32u4"を選択する。

f:id:hukimijirantan:20180518010733p:plain

次に、これは本来任意だが"Auto-flash"にチェックを入れる。これによりPCBが書き込みモードに移行したことを自動認識してファームウェアを書き込んでくれるようになる。チェックしない場合はモードが移行したことのみ認識してくれるので、書き込む際は"Flash"ボタンを自分で押す必要がある。

f:id:hukimijirantan:20180518011334p:plain

"Auto-flash enabled"の文章がログに追加されたことが確認できる。以上で準備は完了なので、PCBの物理スイッチを押下しよう。

 

USBケーブルが取り外され、そして接続された時の音が流れる。これが書き込みモードになった合図である。

その後ログが流れ出し、書き込みが終了すると次のようになる。

f:id:hukimijirantan:20180518011902p:plain

セットアップからここまで長かったが、以上で書き込みまでの手順は完了である。

お疲れさまでした。 

 

 

さて今回はdefaultのキーマップを書き込んでおり、書き込みが成功しているかどうかの確認はログから読み取る他にない。

重要なのはログ画面中央付近にある2本のプログレスバーwindowsだと、何かをインストールするときに進捗の度合いによって左から右に動く緑色のあれ)とその周辺である。プログレスバーは100%まで進行しており、そのすぐ右側に"Success"の文字が確認できる。これは書き込みが成功したことを表している。

f:id:hukimijirantan:20180518012720p:plain

 

 

最後に、説明を飛ばしてしまった"Microcontroller"について述べる。

キーボード本体には、キースイッチが押下されたことを検知してデジタル信号をPC本体に送る機能を持ったマイコン(マイクロコントローラー)というハードウェアが搭載されている。ファームウェアとはまさにこのマイコンの動作を決定する役割を持ったソフトウェアのことを言う。ファームウェアマイコンに直接書き込まれるため、市販品のゲーミングキーボードのように何かしらのソフトウェアをPCにインストールしてOS上でキーマップを書き換える方式とは異なり、どこのPCに接続しても変更済みのキーマップで動作させることができる。しかしながら、PCBの型番によって搭載されているマイコンも異なる場合があるので、QMK toolbox側でそれを指定してやる仕組みになっている。

現在PCBで最も採用されている(と思われる)マイコンATmega32u4である。PCBを用いない自作キーボードを設計する場合には、このATmega32u4をコントローラーに選択することによってQMK firmwareを用いることが可能となり、キーマトリクスの理論や電気回路の知識を持たずともソフトウェア的な開発が可能である。

実はこのATmega32u4はもうひとつ有名な採用実績があり、それこそがArduinoと呼ばれる電子工作用のハードウェアなのである。実際には、Arduinoと呼ばれる製品群の中の一部のモデルにATmega32u4が採用されている。Arduinoはキーボードに限らず、様々な電子工作に用いられている。更にArduinoオープンソースであるため、特に中華系の互換デバイスが格安で販売されており、その中にPro Microというモデルがある。自作キーボードについて調べていてPro Microという謎のデバイスを見かけることが多いのはそういう理由である。

 

 

次回から、キーマップの変更について解説したい。

*1:表面の画像を見るとプロファイルがXD60のdefaultから若干変更されているが、今回の話の中では関係ない。