たねやつの木

Photographs, Keyboards and Programming

QMKのビルド環境構築

IMG_20180903_011916

こんにちは、たねやつです。

最近、tada68という自作キーボードに手を出して、着々と沼にはまりつつある状態です ^^) _旦~~

またこのキーボードも紹介したいですね!

今回はQMKでのキーマップファイルのビルド環境構築についてメモを残します。 そんな複雑ではないですが、こうやって残しておくと数年後の自分に超感謝されますね、、、( ;∀;)

プラスで結構厄介そうなIMEの入力モードのトグルを1キーだけ(私の場合は右ALT)で実行できるマクロも作成できましたので載せておきます。(別記事に分割)

環境構築

対象

Linux(Debian)環境に作成しました。Windowsだと構築手順がめんどくさそうだったのでやめにしました。FTPでファイルを行ったり来たりさせるのが少々面倒なので、いづれWindows環境でも作成しようと思います。

依存関係の解消

以下のモジュールを導入します。ビルド時に必要となるものなのでしょう。この辺は公式Readmeから拾って来れました。

# apt-get install gcc unzip wget zip gcc-avr binutils-avr avr-libc dfu-programmer dfu-util gcc-arm-none-eabi binutils-arm-none-eabi libnewlib-arm-none-eabi

QMKの取得

完了したらgit clone https://github.com/qmk/qmk_firmware.gitで最新のQMKを取得します。この時私はとりあえず自分のリポジトリにフォークさせておきました。 push先を変更させるためには、git remote set-url origin [フォーク先のURL]でOKです。

ビルド~インストール

ビルドできるかテスト

qmk_firmwareディレクトリ直下で以下のコマンドを実行します。

$ make tada68:default

上記コマンドではtada68用のレイアウトをデフォルト(工場出荷時)のキーマップでビルドしています。make [keyboard]:[profile]というような感じで任意のキーマップを生成できます。[profile]の部分は後から作成します。

ログが出力されて正常にビルドが完了したら、qmk_firmware/.build内に先ほどの[keyboard]-[profile].binという形式でマイコンにインストールするファイルが生成されています。

インストール

以下tada68における手順となります。 リセットボタン付きのPromicroなんかだとほぼ同じような手順と思いますがよく確認してみてください。高級文鎮になっても自己責任で。

  1. 裏面のボタンを押してLEDが点滅している状態にする。
  2. PCに外部デバイスとして認識されるので、マイコンピューター等から開く。 中にFLASH.BINというファイルがあることを確認する。
  3. 上記のファイルをPCへバックアップしデバイス上から削除する。
  4. ビルドしたbinファイルを置く。
  5. ESCキーを押してLEDの点滅を停止させる。(USBを抜いたりしないこと!)

というような手順です。

インストール後、入力の確認や修正箇所が正常に動作するかの確認を行います。

余談ですが、なんかいい感じのキー入力確認用のWEBサービスとかフリーソフトないですかね( 一一)?

キーマップの自作

キーボード自作したらやっぱりこれもやらないとね!(適当)

自分用のディレクトリを作成

qmk_firmware/keyboards/[キーボード名]/keymaps/[任意の名前]ディレクトリを作成します。作成というよりも、デフォルトのキーマップが各キーボードに存在しているはずなので、それをコピーして作成したほうが簡単でしょう。

以下、tada68というキーボードの場合です。適宜読み替えてください。

$ cd qmk_firmware/tada68/keymaps/
$ cp -r default taneyats

これでデフォルトと同じ内容でtaneyatsという名前のプロファイル(?)ができました。

このディレクトリ名によってビルドのコマンドが変更します。この作成したキーマップを使ってビルドする場合には、make tada68:taneyatsとするとOKです。結構簡単ですね。

キーマップを編集

デフォルトの場合、以下のようになっています。(何度もですがtada68の場合です)

#define _BL 0
#define _FL 1

#define _______ KC_TRNS

...

const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {

    ...

    [_BL] = LAYOUT_ansi(
    KC_ESC,  KC_1,    KC_2,    KC_3,   KC_4,   KC_5,   KC_6,   KC_7,   KC_8,   KC_9,    KC_0,    KC_MINS,  KC_EQL, KC_BSPC, KC_GRV,  \
    
    ...

    KC_LCTL, KC_LGUI, KC_LALT,                KC_SPC,                       M_HNZN_TGL, MO(_FL), KC_RCTRL, KC_LEFT,KC_DOWN, KC_RGHT),
    )

    [_FL] = LAYOUT_ansi(
        ...
    )
}

省略しまくっていますが、上記のような感じです。C言語のようです。高校生の頃文法だけやったっけなあ、、そのあと何を作ればいいかわからなくてさっぱり忘れてしまいましたが。

最初の#define [レイヤー名] [レイヤー番号]でレイヤーを宣言しています。この状態から新たに3つ目のレイヤーを追加したければ、#define _ADD 2という感じです。

[_BL] = LAYOUT_ansi()内で対象のレイヤーのキーマップを定義します。_BLは0層目のレイヤーなのでデフォルトになっているようです。キーを変更したい場合は、対象のキーコードを変えるだけです。

各キーコードは以下のページから参照できます。

例えば、ESCキーをCAPSロックに変更したい場合は、KC_ESCKC_CAPSLOCKに変更すればOKです。

0層目の最下段にあるMO(_FL)は、レイヤーの変更を意味しています。押している間は引数で指定しているレイヤーに変更するというような感じです。先ほどのキーコード一覧の下のほう(Layer Switching)の部分にも記載があります。 ほかにもトグルさせたり、長押しでレイヤーの変更もできるそうなので組み合わせでいろいろできますね!( ;∀;) さすが自作というような感じですが、あまり慣れすぎると他の人のPCとかノートパソコンのキーボードが使えなくなってしまいますね(笑)

とりあえずこれで基本的なキーの変更などはできるようになります。レイヤーの追加なんかは私はそんなに必要としていないので後回しで('ω')

マクロの割り当てもこの記事にまとめようかと思いましたが、長くなるので諦めました。 次の記事で紹介します。

参考

使用できるキーコード一覧

公式文書 https://beta.docs.qmk.fm/newbs/newbs_getting_started