linuxでqmk firmwareを使ってみる | 工作者(kousakusya)のブログ

Nano-ITXマザーボードenx-pnv-d510-a2rを、ヘッドレスサーバとして、

SCSI/SAS用に使用している。

SASボード SAS3442E-Rをこのボードで使用しているが、

BIOS起動時にCtrl+Cを押さないと、NVRANという画面で止まってしまうという

怪現象が発生している。

ヘッドレスサーバなので、一々キーボードを接続するのも面倒くさいので、

pro micro atmega32u4 を使って Ctrl +C を発生する 1キー キーボードを

以下の手順で作ってみた

 

なお、pro microのfirmwareに書き込むためのqmk firmwareの環境は、

rockpro64 の debian上に構築している。

 

(1) qmk firmwareの環境構築

$ git clone https://github.com/qmk/qmk_firmware.git

  $ ./qmk_firmware/util/qmk_install.sh

$ cd qmk_firmware

$ make git-submodule

 

(2) pro microへのスイッチ取り付け

    端子仕様は以下のサイトに記載されている。

https://cdn.sparkfun.com/assets/f/d/8/0/d/ProMicro16MHzv2.pdf

       Reset SW用に 22pin(RST)と23pin(GND)をSWで結線。

      Ctrl+C キー用に 5pin(D2)と6pin(D3)をSWで結線。

 

(3) firmwareの準備

     $  qmk new-keyboard -u <github username>

       Keyboard Name? onekey (キーボード名をonekeyとする)

→ Default Layout? 52 (none of the aboveの数字を入力)

→ MCU? 13(promicroの数字を入力)

でfirmwareの準備ができる。

 

(4) keymapの作成

$ cd qmk_firmware/keyboards/onekey (キーボード名のDirectoryの配下へ移動)

→ info.json を以下のように編集

{
    "manufacturer": "****",
    "keyboard_name": "onekey",
    "maintainer": "ksumi",
    "bootloader": "caterina",
    "diode_direction": "COL2ROW",
    "features": {
        "bootmagic": true,
        "command": false,
        "console": false,
        "extrakey": true,
        "mousekey": true,
        "nkro": true
    },
    "matrix_pins": {
        "cols": ["D0"],
        "rows": ["D1"]
    },
    "processor": "atmega32u4",
    "url": "",
    "usb": {
        "device_version": "1.0.0",
        "pid": "0x0000",
        "vid": "0xFEED"
    },
    "layouts": {
        "LAYOUT_ortho_1x1": {
            "layout": [
                {"matrix": [0, 0], "x": 0, "y": 0},
            ]
        }
    }
}

 

    →  keymaps/default/keymap.c を以下のように編集

// Copyright 2023 QMK
// SPDX-License-Identifier: GPL-2.0-or-later

#include QMK_KEYBOARD_H

const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
    /*
     * ┌───┐
     * │ c │
     * └───┘
     */
    [0] = LAYOUT_ortho_1x1(
        LCTL(KC_C)
    )
};

   → LCTLは「左cntrol keyを押しながら」の意味なので、

       LCTL(KC_C)は「Ctrl+C」の意味になる。

       key mapに対応するkey codeは以下に記載がある。

 

 

(5) firmwareのcompile

    $ qmk compile -kb onekey -km default

 

 (6) firmwareの書き込み

    コンピュータとpro microをUSBケーブルで接続する。

    firmwareの書き込みの前に、書き込みするユーザーを dialout groupに

    追加しておく必要がある。

      $ sudo usermod -aG dialout <user>

    これをしておかないと、firmwareの書き込みの時、

    「Waiting for /dev/ttyACM0 to become writable.....」で処理が継続されなくなる。

    ( /dev/ttyACM0 の group が dialoutであるため )

    書き込みは、以下のコマンドを実行。

      $ qmk flash -kb onekey -km default

    途中で、pro microのReset SWの押下が要求されるので、SWを押す。

    すると、赤色LEDが何回かチカチカして書き込みが完了する。

 

これで、Ctrl+Cを発生するキーが完成した。