본문 바로가기
정보

자작 풀와이어링 키보드 QMK 펌웨어 빌드하고 플래시하기 (RP2040)

by sohke 2023. 7. 1.

 

RP2040에 QMK를 올리는 방법을 까먹지 않기 위해 글을 작성해놓으려고 합니다.

윈도우 사용자 기준으로 작성하였습니다.

제가 이전에 만들었던 풀와이어링(핸드와이어링) 돌치매크로패드를 기준으로 작성하였습니다.

 

 

 

 

1. 윈도우에 WSL 설치하기

 

시스템 요구사항 : Windows 10 버전 2004 이상(빌드 19041 이상) 또는 Windows 11

CMD를 관리자권한으로 실행하고 아래 명령어를 입력하여 리눅스 가상머신을 설치해 줍니다.

 

wsl --install

 

혹은 마이크로소프트 스토어에서 Ubuntu를 검색하시고 설치하셔도 됩니다.

 

 

 

2. QMK WSL 설치하기

 

최신버전의 QMK WSL을 설치하신 후  실행해 줍니다.

 

qmk -admin

 

위 명령어를 입력해서 퀵스타트창 마법사창을 띄우고 1번을 선택하여 퀵세팅을 시작합니다.

기다리면 아래와 같이 'QMK is ready to go'라는 문구가 뜨고 세팅이 완료됩니다.

OK - Cancel을 눌러 첫 화면으로 돌아와 줍니다.

이렇게 하면 기본적인 준비는 끝났습니다.

 

 

 

3. 새로운 키보드에 대한 QMK 소스파일 생성하기

 

 

qmk new-keyboard

 

위 명령어를 통해 새 키보드의 소스파일을 생성해 줍니다.

몇 가지 필요정보를 입력해 줍니다.

 

그다음, 기준으로 삼을 레이아웃을 골라주어야 합니다.

저는 2x5사이즈 매크로패드의 펌웨어를 만들어야 하기 때문에 29번 (ortho_2x6)를 선택했습니다.

 

마지막으로 MCU를 선택해 줍니다.

돌치매크로패드는 rp2040_zero로 만들었으니 36번 RP2040을 선택해 줍니다.

 

위와 같은 메시지와 함께 새로운 키보드의 qmk 소스파일이 생성되었습니다.

이제 새롭게 생긴 소스파일을 키보드 작동이 가능하게끔 수정을 해줘야 합니다.

 

4. 소스파일 수정하기

 

파일탐색기를 열어서 리눅스 폴더를 열어줍니다.

\wsl.localhost\QMK\home\qmk\qmk_firmware\keyboards\<새로 생성한 키보드이름>에 들어갑니다.

 

 

텍스트 에디터에서 info.json 파일을 열어줍니다. (메모장으로도 가능합니다)

아까 입력한 내용을 토대로 아래와 같은 코드가 만들어졌습니다.

 

{
    "manufacturer": "song",
    "keyboard_name": "dolch_pad",
    "maintainer": "sohke3",
    "bootloader": "rp2040",
    "diode_direction": "COL2ROW",
    "features": {
        "bootmagic": true,
        "command": false,
        "console": false,
        "extrakey": true,
        "mousekey": true,
        "nkro": true
    },
    "matrix_pins": {
        "cols": ["C2", "C2", "C2", "C2", "C2", "C2"],
        "rows": ["D1", "D1"]
    },
    "processor": "RP2040",
    "url": "",
    "usb": {
        "device_version": "1.0.0",
        "pid": "0x0000",
        "vid": "0xFEED"
    },
    "layouts": {
        "LAYOUT_ortho_2x6": {
            "layout": [
                {"matrix": [0, 0], "x": 0, "y": 0},
                {"matrix": [0, 1], "x": 1, "y": 0},
                {"matrix": [0, 2], "x": 2, "y": 0},
                {"matrix": [0, 3], "x": 3, "y": 0},
                {"matrix": [0, 4], "x": 4, "y": 0},
                {"matrix": [0, 5], "x": 5, "y": 0},
                {"matrix": [1, 0], "x": 0, "y": 1},
                {"matrix": [1, 1], "x": 1, "y": 1},
                {"matrix": [1, 2], "x": 2, "y": 1},
                {"matrix": [1, 3], "x": 3, "y": 1},
                {"matrix": [1, 4], "x": 4, "y": 1},
                {"matrix": [1, 5], "x": 5, "y": 1}
            ]
        }
    }
}

 

여기서 우리가 수정해야 할 부분은 matrix_pins 부분과 layouts 부분입니다.

 

와이어링 하신 대로 matrix_pins에 적힌 내용을 수정해 줍시다.

저의 경우 0열부터 4열까지 순서대로 8,9,10,11,26번 핀을, 0행과 1행에 5,6번 핀을 연결했습니다.

 

 

    "matrix_pins": {
        "cols": ["GP8", "GP9", "GP10", "GP11", "GP26"],
        "rows": ["GP5", "GP6"]
    },

 

이렇게 수정해 줍니다.

좌우반전에 주의하세요.

 

 

0,0 0,1 0,2 0,3 0,4 0,5
1,0 1,1 1,2 1,3 1,4 1,5

[0,5]와 [1,5]는 필요 없기 때문에 지워줍니다.

그리고 LAYOUT_ortho_2x5으로 수정해줬습니다.

    "layouts": {
        "LAYOUT_ortho_2x5": {
            "layout": [
                {"matrix": [0, 0], "x": 0, "y": 0},
                {"matrix": [0, 1], "x": 1, "y": 0},
                {"matrix": [0, 2], "x": 2, "y": 0},
                {"matrix": [0, 3], "x": 3, "y": 0},
                {"matrix": [0, 4], "x": 4, "y": 0},
                {"matrix": [1, 0], "x": 0, "y": 1},
                {"matrix": [1, 1], "x": 1, "y": 1},
                {"matrix": [1, 2], "x": 2, "y": 1},
                {"matrix": [1, 3], "x": 3, "y": 1},
                {"matrix": [1, 4], "x": 4, "y": 1},
            ]

 

 이로써 info.json의 수정은 마무리되었습니다.

 

이제 키맵 파일을 수정해 주면 준비가 마무리됩니다.

 

 

 

5. 키맵 수정하기

\\wsl.localhost\QMK\home\qmk\qmk_firmware\keyboards\<새로 생성한 키보드이름>\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] = {
    /* 
     * ┌───┬───┬───┬───┬───┬───┐
     * │ A │ B │ C │ D │ E │ F │이 부분은 주석이라 굳이 수정하지 않으셔도 됩니다.
     * ├───┼───┼───┼───┼───┼───┤
     * │ G │ H │ I │ J │ K │ L │
     * └───┴───┴───┴───┴───┴───┘
     */
    [0] = LAYOUT_ortho_2x6(
        KC_A,    KC_B,    KC_C,    KC_D,    KC_E,    KC_F,
        KC_G,    KC_H,    KC_I,    KC_J,    KC_K,    KC_L
    )
};

 

아까 json 파일에서 수정한 것처럼 LAYOUT_ortho_2x6을 LAYOUT_ortho_2x5로 바꿔주고, 

KC_F와 KC_L  지워줍니다.

 

 

    [0] = LAYOUT_ortho_2x5(
        KC_A,    KC_B,    KC_C,    KC_D,    KC_E,
        KC_G,    KC_H,    KC_I,    KC_J,    KC_K
    )

 

 

여기에 레이어를 몇 개 추가해 주겠습니다.

 

    [0] = LAYOUT_ortho_2x5(
        KC_A,    KC_B,    KC_C,    KC_D,    KC_E,
        KC_G,    KC_H,    KC_I,    KC_J,    KC_K
    ),
    [1] = LAYOUT_ortho_2x5(
        KC_A,    KC_B,    KC_C,    KC_D,    KC_E,
        KC_G,    KC_H,    KC_I,    KC_J,    KC_K
    ),
    [2] = LAYOUT_ortho_2x5(
        KC_A,    KC_B,    KC_C,    KC_D,    KC_E,
        KC_G,    KC_H,    KC_I,    KC_J,    KC_K
    ),
    [3] = LAYOUT_ortho_2x5(
        KC_A,    KC_B,    KC_C,    KC_D,    KC_E,
        KC_G,    KC_H,    KC_I,    KC_J,    KC_K
    )

 

0 레이어부터 3 레이어까지 총 4개의 레이어가 만들어졌습니다.

근데 보시다시피 이대로는 ABCDEGHIJK의 입력만 가능할 뿐이고 레이어 관련 키도 설정해주지 않았기 때문에 1,2,3 레이어는 아무런 동작도 하지 못합니다.

 

원하는 키로 작동하게끔 하기 위해서 QMK 키코드를 보고 입맛에 맞게 변경해 줍니다.

 

키코드 리스트

 

QMK Firmware Docs

The full documentation of the open-source firmware

docs.qmk.fm

 

 

#include QMK_KEYBOARD_H

const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
    /*
     * ┌───┬───┬───┬───┬───┐
     * │ A │ B │ C │ D │ E │
     * ├───┼───┼───┼───┼───┤
     * │ G │ H │ I │ J │ K │
     * └───┴───┴───┴───┴───┘
     */
    [0] = LAYOUT_ortho_2x5(
        MO(1)	,    KC_PAGE_DOWN	,    KC_UP,    KC_PAGE_UP	,    KC_KB_VOLUME_UP	,
        MO(2)	,    KC_LEFT,    KC_DOWN,    KC_RIGHT	,    KC_KB_VOLUME_DOWN
    ),
    [1] = LAYOUT_ortho_2x5(
        KC_TRANSPARENT,    KC_F1,    KC_F2,    KC_F3,    KC_F4,
        MO(3),    KC_F5,    KC_F6,    KC_F7,    KC_F8
    ),
    [2] = LAYOUT_ortho_2x5(
        MO(3),    KC_A,    KC_B,    KC_C,    KC_D,
        KC_TRANSPARENT,    KC_E,    KC_F,    KC_G,    KC_H
    ),
    [3] = LAYOUT_ortho_2x5(
        KC_TRANSPARENT,    KC_TRANSPARENT,    KC_TRANSPARENT,    KC_TRANSPARENT,    KC_TRANSPARENT,
        KC_TRANSPARENT,    KC_TRANSPARENT,    KC_TRANSPARENT,    KC_TRANSPARENT,    QK_REBOOT
    )
};

 

최종적으로 위와 같은 키맵을 완성했습니다.

 

이제 컴파일을 해주고 RP2040(_zero)에 플래시 해주면 모두 마무리됩니다.

 

 

 

6. 컴파일하고, RP2040에 적용시키기

 

컴파일은 앞의 과정들에 비하면 정말 쉽습니다.

 

다시 QMK WSL을 실행해서 아래 명령어를 실행해 주면 컴파일이 진행됩니다.

 

qmk compile -kb <키보드이름> -km <키맵이름>

 

 

ex) qmk compile -kb dolch_pad -km default

 

컴파일이 완료되면

\\wsl.localhost\QMK\home\qmk\qmk_firmware 디렉터리에 <키보드이름>+<키맵이름>을 이름으로 가진 uf2 파일이 생깁니다.

이 파일을 RP2040(zero)에 설치해 주면 모든 과정이 완료됩니다.

 

RP2040(zero) 부트로더에 진입하고, uf2파일을 부트로더로 드래그앤 드롭해주면 알아서 설치가 완료되고 재부팅됩니다.

QMK 펌웨어가 정상적으로 설치되었다면 이제 키보드가 완벽하게 작동합니다.

 

 

RP2040 부트로더 진입방법

  • usb를 연결한 상태에서 RESET 버튼을 두 번 누릅니다.
  • BOOT 버튼을 누른 상태에서 RESET 버튼을 한번 누릅니다.
  • BOOT 버튼을 누르고 있는 상태에서 USB를 연결합니다.

 

 

 

 

 

 

 

 

 

 

 

반응형