LoginSignup
3
3

More than 1 year has passed since last update.

自作キーボードにファームウェア書き込む方法覚え書き

Posted at

TL;DR

  • QMKをWindowsに入れて使う
  • キーボードはCorne Cherry

余談ですが左右分離キーボード導入のきっかけは元旦の骨折です。固定具のシーネが干渉してキーボード分離必要でした。

事前にインストールが必要なもの

  • MSYS2(mingw64を使う)
  • git (git bashなど)

手っ取り早い参考資料はこのあたり
「Windows上にMSYS2 + Ruby2.4 + Git環境を作成する」 https://qiita.com/shyse/items/dc7919d09cfd957908f1

QMKのセットアップ

QMK

git clone --recrusive https://github.com/qmk/qmk_firmware.git
cd qmk_firmware/
util/qmk_install.sh

LUFA

pushd lib
git/ clone https://github.com/qmk/lufa.git
popd

参考資料
「QMK Firmwareビルド環境構築」 https://qiita.com/msrx9/items/60c41e7866182eec0768

keymap作成

pushd keyboards/crkbd/keymaps/
cp -r default your_name

設定値

変えてる箇所を中心に抜粋

your_name/config.h
// #define MASTER_LEFT
#define MASTER_RIGHT
// #define EE_HANDS

#define USE_SERIAL_PD2

#define TAPPING_FORCE_HOLD
#define tapping_term 250

#define MASTER_RIGHTで左右分離のうち右からUSB出力する。

#define tapping_term 250の数値でタップダンス(後述)の反応閾値を調整する。デフォルトの100msは割と短め。

keymap

まだ試行錯誤中。keymap部分まで掲載。

your_name/keymap.c
/*
Copyright 2019 @foostan
Copyright 2020 Drashna Jaelre <@drashna>

This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 2 of the License, or
(at your option) any later version.

This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
GNU General Public License for more details.

You should have received a copy of the GNU General Public License
along with this program.  If not, see <http://www.gnu.org/licenses/>.
*/

#include QMK_KEYBOARD_H
#include "keymap_jp.h"

// Tap Dance declarations
enum {
    TD_BRC,
};

// Tap Dance definitions
qk_tap_dance_action_t tap_dance_actions[] = {
    // Tap once for [, twice for ]
    [TD_BRC] = ACTION_TAP_DANCE_DOUBLE(JP_LBRC, JP_RBRC),
};

const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
  [0] = LAYOUT_split_3x6_3(
  //,-----------------------------------------------------.                    ,-----------------------------------------------------.
       KC_TAB,    KC_Q,    KC_W,    KC_E,    KC_R,    KC_T,                         KC_Y,    KC_U,    KC_I,    KC_O,   KC_P,  KC_BSPC,
  //|--------+--------+--------+--------+--------+--------|                    |--------+--------+--------+--------+--------+--------|
      KC_LSFT,    KC_A,    KC_S,    KC_D,    KC_F,    KC_G,                         KC_H,    KC_J,    KC_K,    KC_L, JP_COLN, TD(TD_BRC),
  //|--------+--------+--------+--------+--------+--------|                    |--------+--------+--------+--------+--------+--------|
      KC_LCTL,    KC_Z,    KC_X,    KC_C,    KC_V,    KC_B,                         KC_N,    KC_M, JP_COMM,  JP_DOT, JP_SLSH, RCTL_T(KC_ESC),
  //|--------+--------+--------+--------+--------+--------+--------|  |--------+--------+--------+--------+--------+--------+--------|
                                  LGUI_T(JP_ZKHK),   MO(1),  KC_SPC,   RSFT_T(KC_ENT), MO(2), KC_RALT
                                      //`--------------------------'  `--------------------------'

  ),

  [1] = LAYOUT_split_3x6_3(
  //,-----------------------------------------------------.                    ,-----------------------------------------------------.
      KC_HOME,    KC_1,    KC_2,    KC_3,    KC_4,    KC_5,                        KC_F1,   KC_F2,   KC_F3,   KC_F4,   KC_F5, _______,
  //|--------+--------+--------+--------+--------+--------|                    |--------+--------+--------+--------+--------+--------|
       KC_END,    KC_6,    KC_7,    KC_8,    KC_9,    KC_0,                        KC_F6,   KC_F7,   KC_F8,   KC_F9,  KC_F10, JP_UNDS,
  //|--------+--------+--------+--------+--------+--------|                    |--------+--------+--------+--------+--------+--------|
      JP_ASTR, JP_PLUS, JP_MINS, KC_LEFT,   KC_UP,KC_RIGHT,                       KC_F11,  KC_F12,  JP_EQL, _______, _______, RCTL_T(JP_YEN),
  //|--------+--------+--------+--------+--------+--------+--------|  |--------+--------+--------+--------+--------+--------+--------|
                                          KC_DOWN, _______, _______,    _______, _______, _______
                                      //`--------------------------'  `--------------------------'
  ),

  [2] = LAYOUT_split_3x6_3(
  //,-----------------------------------------------------.                    ,-----------------------------------------------------.
      JP_ZKHK, XXXXXXX, XXXXXXX, XXXXXXX,KC_PAUSE,KC_PSCREEN,                    JP_EXLM, JP_DQUO, JP_HASH,  JP_DLR, JP_PERC,  KC_DEL,
  //|--------+--------+--------+--------+--------+--------|                    |--------+--------+--------+--------+--------+--------|
      KC_LSFT, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,KC_APPLICATION,                JP_AMPR, JP_QUOT, JP_LPRN, JP_RPRN, JP_SCLN, TD(TD_BRC),
  //|--------+--------+--------+--------+--------+--------|                    |--------+--------+--------+--------+--------+--------|
      KC_LCTL, _______, XXXXXXX, XXXXXXX,  KC_ESC,KC_INSERT,                       JP_AT, JP_CIRC, JP_COMM, _______, _______, RCTL_T(JP_BSLS),
  //|--------+--------+--------+--------+--------+--------+--------|  |--------+--------+--------+--------+--------+--------+--------|
                                          KC_LGUI, _______, _______,    _______, _______, _______
                                      //`--------------------------'  `--------------------------'
  )

};

  • MOキーがレイヤー切り替え
  • KC_がANSIキー
  • JP_が日本語配列入力向けキー(英語キーボードなら不要かと)
  • _______は上位レイヤーと同じキー

JP_の名称対応はheaderファイルを読むのが早い

Mod-TapとしてWindowsキーやctrlキーなどの短押し・長押しで昨日切り替えができる

自分で設定するMod-Tapはタップダンスと呼ばれている(後述)

タップダンスの設定

宣言

// Tap Dance declarations
enum {
    TD_BRC,
};

定義

// Tap Dance definitions
qk_tap_dance_action_t tap_dance_actions[] = {
    // Tap once for [, twice for ]
    [TD_BRC] = ACTION_TAP_DANCE_DOUBLE(JP_LBRC, JP_RBRC),
};

キーマップ中での使い方

TD(TD_BRC)

キーボードへの書き込み

avrdude付きでmakeする最後に、USB挿してる側のリセットスイッチを押す。

vim your_name/keymap.c
popd

make crkbd:your_name
make crkbd:your_name:avrdude

2回目以降

cd qmk_firmware/
pushd keyboards/crkbd/keymaps/your_name/
vim keymap.c
popd

make crkbd:your_name
make crkbd:your_name:avrdude

今回購入したキーボード+α

BTOSさんの半田済みPCBなCorne Cherry(購入ページリンク切れになっていた。売り切れたのかも)。
先人も言っていますが骨折した状態でキーボード使うのは少なくとも左右分離が必要で、はんだ付け難しすぎる。

凄い先人:骨折したので右手でfloggy

持ち運び用ケースはこちらを参考に無印のポーチにした

参考文献

3
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
3