Featured image of post Pro MicroにQMKファームウェアを書き込む方法の備忘録

Pro MicroにQMKファームウェアを書き込む方法の備忘録

目次

背景

  • 最近、自作キーボードのLily 58 Proと7sProを組み立てた
  • その際に、それぞれのキーボードで利用されたマイコンにQMK Firmwareを書き込む必要があった
  • そこで、マイコンへのファームウェアの書き込み方法の備忘録を残す

使ったもの

ソフトウェア

OSは次を使用した。

  • Windows 11

Arduino IDEのバージョンは以下である。 (マイコンのドライバー用にArduinoはインストールをした)

Arduino Version

  • その際に、Arduino AVR Boards (ver. 1.8.6)のインストールも行った。
  • Menuから、Tools > Board > Board Managerと進み、AVR検索すればインストールできる。

QMKは次のバージョンになる。

1
2
[mike@DESKTOP-F0UL539 qmk_firmware]$ qmk --version
1.1.1

QMK toolboxは次になる。

QMK toolbox Version

ハードウェア

また、マイコンとパソコンの通信及びリセットの為に次が必要だった。

  • Pro Micro
    • Arduino Pro Micro互換の中国のマイコンボードのSparkfun Pro Microを使用
    • Pro MicroのマイコンはATmega324U4
    • ATmega324U4はAVRのマイコン
  • データ転送できるMicro USBケーブル
  • リセットの為の道具 (OR)
    • ブレッドボードとジャンプワイヤー
    • ピンセット

注意!

  • Micro USBケーブルは「充電専用」と「データ転送専用」がある
  • Micro USBケーブルは見た目ではデータ転送ができるかは分からない
  • 故に、パッケージを確認するか、使ってみてExplorerが立ち上がるかを確認しないと分からない
  • USBトライデントマークがあるからデータ転送ができるとも限らないので注意

USBトライデントマーク

前提知識

マイコン

マイコンとは

Googleで調べると次が生成された。

マイコンとは、マイクロコントローラ(Microcontroller Unit、MCU)やマイクロコンピュータの略で、電気機器を制御するための小さなコンピュータ

つまりは、電気的な回路や機械的な部分を制御する半導体チップの事。

マイコンの種類

自作キーボードではArduionoのPro Microがよく使われる。 そのPro MicroはAVR系のアーキテクチャのマイコンである。 他にも有名どころでは、PICやARMがあるが、その種類は以下になる。

  • PICマイクロコントローラ
    • Microchip Technologyによって開発された
    • 低コスト、低消費電力であり、趣味の電子工作から産業用途まで幅広く使用されている
  • ARMマイクロコントローラ
    • ARM Holdingsによって設計されたアーキテクチャを採用
    • 高性能で省エネルギー性に優れており、スマートフォンから組み込みシステムまで広範囲に渡って利用されている
  • AVRマイクロコントローラ
    • Atmel(現在はMicrochip Technologyが所有)によって開発された
    • Arduinoなどの人気のある開発ボードに採用されており、教育や趣味のプロジェクトに広く使われている
  • Intel 8051/8052
    • Intelによって開発された古典的なマイクロコントローラ
    • 教育や一部の産業用途にまだ使われている
  • MSP430(Texas Instruments)
    • 低消費電力の設計で知られ、バッテリー駆動の携帯機器やセンサー類に利用される
  • ESPシリーズ(Espressif Systems)
    • WiFiやBluetooth組み込みのマイクロコントローラ
    • IoTデバイスやスマートホームアプリケーションに適している

マイコンとマイコンチップとマイコンボードの違い

マイコンとマイコンボードとマイコンチップには次の違いがある。

  • マイコン(マイクロコントローラ)
    • マイコンは、1つの集積回路(IC)の中にプロセッサ(CPU)、メモリ(RAM、ROM)、入出力のI/Fなどを統合した半導体デバイス
    • 一般的に「マイコン」と言った場合、この単一のチップを指す
  • マイコンチップ(マイクロコントローラチップ)
    • これはマイコンの別の呼び方
  • マイコンボード(マイクロコントローラボード)
    • マイコンボードは、マイコンチップを含む、より大きな電子基板
    • 例えば、ArduinoやRaspberry Piなど

マイコン(Microcontroller)のチップやボードの違いで呼び名が変わるという事。

QMK

QMKについて

  • QMKは、コンピューターのキーボードを制御するマイコン用のOSSのファームウェア
  • QMKの意味は、Quantum Mechanical Keyboard
  • メカニカルキーボード界隈ではよく利用されるファームウェア

QMKのツールについて

主に、以下の3つのQMKのツールを使う。

  • QMK Configurator
    • Firmware(hexファイル)をオンラインで作成するためのWebsite
  • QMK Toolbox
    • Firmware(hexファイル)を書き込む為のツール
  • QMK MSYS
    • Firmwareをローカルで作成するためのツール

NOTE:

  • なお、QMK ConfiguratorとQMK MSYSはどちらもhexファイルを作成するのが目的
  • そののため、それらどちらか好きな方を使うのでOK
  • 次の使い分けになる
    • Keymapだけを変更したいならQMK Configurator
    • 細かく修正したい場合はQMK MSYS

QMKのツールの使い方

QMK Configurator

QMK Configuratorとは

  • QMKが提供しているWebサイト
  • キーボードのKeymapの設定を簡便に行うために利用する
  • URLはここになる

QMK Configurator

利用方法

自分のキーボードタイプとレイアウトを選べば、好みのKeymapに設定できる。 設定後にCompleボタンとDLボタンを押下して、hexファイルをDLする。 それをQMK Toolboxで焼けばOK。

NOTE:

  • なお、Keycode > QuantumにあるAnyは任意のキーを設定できるモノだが、次のリンクのコードを入力する必要がある。

qmk_firmware/docs/keycodes.md at master · qmk/qmk_firmware

QMK MSYS

QMK MSYSとは

  • QMK Confugulatorでhexをビルドせずに、ローカルでソースコードからビルドする時に使うツール
  • QMKは、MSYS2、CLI、および必要な全ての依存関係のバンドルしている

QMK MSYS

MSYSとは

  • MSYS (Minimal SYStem)は、Windows上で動作するUNIXシェル(Bash)や各種ツール類(gawk, sed, tarなど)を統合したプログラム開発環境を提供するパッケージ
  • コンパイラ環境である、MinGW(Minimalist GNU for Windows)をより使い易くサポートするもの
  • MinGWを導入すれば、gcc/g++コンパイラや各種開発ツールを用いてシェル環境上でC/C++言語プログラムを開発できる
  • MSYSはMinimal SYStemの略

一言で言えば、WSLが無かった頃に使われていたWindows上のLinuxの開発環境。

QMK MSYSのインストール方法

QMK MSYSからexeファイルをダウンロード。 それを実行する。

すると以下のようにshellが立ち上がる。 自分の場合はMSYSをインストール後次のようになった。

1
2
3
4
[mike@DESKTOP-F0UL539 ~]$ which sh
/usr/bin/sh
[mike@DESKTOP-F0UL539 ~]$ pwd
/c/Users/mike

その後、qmk setupを行う。 Submoduleも含めてCloneするので時間がかかった。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
[mike@DESKTOP-F0UL539 ~]$ qmk setup
☒ Could not find qmk_firmware!
Would you like to clone qmk/qmk_firmware to C:/Users/mike/qmk_firmware? [y/n] y
Cygwin WARNING:
  Couldn't compute FAST_CWD pointer.  This typically occurs if you're using
  an older Cygwin version on a newer Windows.  Please update to the latest
  available Cygwin version from https://cygwin.com/.  If the problem persists,
  please see https://cygwin.com/problems.html

Cloning into '/c/Users/mike/qmk_firmware'...
Updating files:   0% (134/37180)
Updating files:   0% (258/37180)
Updating files:   1% (372/37180)
Updating files:   1% (388/37180)
Updating files:   1% (521/37180)
Updating files:   1% (663/37180)
Updating files:   2% (744/37180)
Updating files:   2% (818/37180)
Updating files:   2% (989/37180)
Updating files:   3% (1116/37180)
Updating files:   3% (1138/37180)
Updating

...

Submodule path 'lib/printf': checked out 'c2e3b4e10d281e7f0f694d3ecbd9f320977288cc'
Submodule path 'lib/vusb': checked out '819dbc1e5d5926b17e27e00ca6d3d2988adae04e'
Ψ Successfully cloned https://github.com/qmk/qmk_firmware to C:/Users/mike/qmk_firmware

これにてqmkのセットアップは完了。

自分のカスタムkeymapを作成する

qmk_firmware/keyboardsフォルダ以下にレイアウト毎のキーマップフォルダが作成されているので、好みのキーボードで自分のkeymapフォルダを作る。 例としてlily58のキーマップを作る。

lily58フォルダは次にある。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
$ pwd
/mnt/c/Users/mike/qmk_firmware/keyboards/lily58
$ tree . -L 1
.
├── config.h
├── glow_enc
├── keymaps
├── lib
├── light
├── r2g
├── readme.md
├── rev1
└── rules.mk

このlily58のフォルダのkeymaps以下にlily58のキーボードのキーマップの設定例がある。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
$ tree . -L 1
.
├── barabas
├── bcat
├── bongocat_wpm_responsive
├── chuan
├── curry
├── cykedev
├── datadavd
├── default
├── domnantas
├── drasbeck
├── druotoni
├── gaston
├── gshmu
├── hvp
├── jhelvy
├── keymap
├── lily58l
├── manna-harbour_miryoku
├── mb_via
├── mikefightsbears
├── muppetjones
├── muuko
├── narze
├── ninjonas
├── niolang
├── oldfieldtc
├── paulomp90
├── pomodoro
├── pttbx
├── via
├── yshrsmz
└── yuchi

そこでlily58lのフォルダをコピーして同じ階層にmylily58を作成する。 以下のような感じになる。

1
2
3
4
5
6
7
8
9
$ pwd
/mnt/c/Users/mike/qmk_firmware/keyboards/lily58/keymaps/mylily58

$ tree . -L 1
.
├── config.h
├── keymap.c
├── readme.md
└── rules.mk

そのmylily58の中のkeymap.cを変更すればキーマップを変更できる。 下はkeymap.cの中身の一部。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {

/* QWERTY
 * ,-----------------------------------------.                    ,-----------------------------------------.
 * | ESC  |   1  |   2  |   3  |   4  |   5  |                    |   6  |   7  |   8  |   9  |   0  |  `   |
 * |------+------+------+------+------+------|                    |------+------+------+------+------+------|
 * | Tab  |   Q  |   W  |   E  |   R  |   T  |                    |   Y  |   U  |   I  |   O  |   P  |  -   |
 * |------+------+------+------+------+------|                    |------+------+------+------+------+------|
 * |LCTRL |   A  |   S  |   D  |   F  |   G  |-------.    ,-------|   H  |   J  |   K  |   L  |   ;  |  '   |
 * |------+------+------+------+------+------|   [   |    |    ]  |------+------+------+------+------+------|
 * |LShift|   Z  |   X  |   C  |   V  |   B  |-------|    |-------|   N  |   M  |   ,  |   .  |   /  |RShift|
 * `-----------------------------------------/       /     \      \-----------------------------------------'
 *                   | LAlt | LGUI |LALT|   /Space  /       \Enter \  | RALT |BackSP| RGUI |
 *                   |      |      |      |/       /         \      \ |      |      |      |
 *                   `----------------------------'           '------''--------------------'
 */

 [_QWERTY] = LAYOUT(
  KC_ESC,   KC_1,   KC_2,    KC_3,    KC_4,    KC_5,                     KC_6,    KC_7,    KC_8,    KC_9,    KC_0,    KC_GRV,
  KC_TAB,   KC_Q,   KC_W,    KC_E,    KC_R,    KC_T,                     KC_Y,    KC_U,    KC_I,    KC_O,    KC_P,    KC_MINS,
  KC_LCTL,  KC_A,   KC_S,    KC_D,    KC_F,    KC_G,                     KC_H,    KC_J,    KC_K,    KC_L,    KC_SCLN, KC_QUOT,
  KC_LSFT,  KC_Z,   KC_X,    KC_C,    KC_V,    KC_B, KC_LBRC,  KC_RBRC,  KC_N,    KC_M,    KC_COMM, KC_DOT,  KC_SLSH,  KC_RSFT,
                             KC_LALT, KC_LGUI,KC_LALT, KC_SPC,   KC_ENT,   KC_RALT,   KC_BSPC, KC_RGUI
),

変更が終わったら今回作ったmylily58をビルドする。 一旦qmk_firmwareのリポジトリのルートフォルダまで行く。

1
2
$ pwd
/mnt/c/Users/mike/qmk_firmware

ここで次のコマンドを実行しビルドする。 なお、ビルドに関してはMSYSから行う(自分はWSLから行ったらフリーズしたため)。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
[mike@DESKTOP-F0UL539 qmk_firmware]$ make lily58/light:mylily58

QMK Firmware 0.22.14
Making lily58/light with keymap mylily58

Generating: .build/obj_lily58_light_mylily58/src/info_deps.d                                        [OK]
Generating: .build/obj_lily58_light_mylily58/src/default_keyboard.c                                 [OK]
avr-gcc.exe (GCC) 8.5.0
Copyright (C) 2018 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

Generating: .build/obj_lily58_light_mylily58/src/info_config.h                                      [OK]
Generating: .build/obj_lily58_light_mylily58/src/default_keyboard.h                                 [OK]
Compiling: .build/obj_lily58_light_mylily58/src/default_keyboard.c                                  [OK]
Compiling: quantum/keymap_introspection.c                                                           [OK]
Compiling: quantum/quantum.c                                                                        [OK]
Compiling: quantum/bitwise.c                                                                        [OK]
Compiling: quantum/led.c                                                                            [OK]
Compiling: quantum/action.c                                                                         [OK]
Compiling: quantum/action_layer.c                                                                   [OK]
Compiling: quantum/action_tapping.c                                                                 [OK]
Compiling: quantum/action_util.c                                                                    [OK]
Compiling: quantum/eeconfig.c                                                                       [OK]
Compiling: quantum/keyboard.c                                                                       [OK]
Compiling: quantum/keymap_common.c                                                                  [OK]
Compiling: quantum/keycode_config.c                                                                 [OK]
Compiling: quantum/sync_timer.c                                                                     [OK]
Compiling: quantum/logging/debug.c                                                                  [OK]
Compiling: quantum/logging/sendchar.c                                                               [OK]
Compiling: quantum/bootmagic/bootmagic_lite.c                                                       [OK]
Compiling: quantum/bootmagic/magic.c                                                                [OK]
Compiling: quantum/matrix_common.c                                                                  [OK]
Compiling: quantum/matrix.c                                                                         [OK]
Compiling: quantum/debounce/sym_defer_g.c                                                           [OK]
Compiling: quantum/split_common/split_util.c                                                        [OK]
Compiling: quantum/split_common/transport.c                                                         [OK]

すると、同じ階層にmylily58hexファイルが生成される。

1
2
[mike@DESKTOP-F0UL539 qmk_firmware]$ ls -al | grep lily
-rw-r--r-- 1 mike None 73081 Nov 16 03:19 lily58_light_mylily58.hex

このhexファイルをマイコンに焼き付ける。

QMK Toolbox

QMK Toolboxとは

  • QMKでFirmwareをマイコンに書き込むだめの、Windows / Macアプリ
  • ビルドしたHexファイルをマイコンに書き込むため利用する

インストール方法

このReleases · qmk/qmk_toolboxページから、 最新のバージョンのqmk_toolbox_install.exeを選択して、DLしてインストールする。

ファームウェアの焼き方

MIC / Microcontrollerの箇所で今回のマイコンであるATmega324U4を選択する。 また、load fileはQMK MSYSかQMK Configurationで作成した.hexファイルを選択する。

qmk toolbox

TIPS:

  • auto-flashを選択するとマイコンがリセットされた際に、自動的に書き込まれる。
  • Pro microはリセット後に8sしか書き込み状態にならないので、auto-flashを選択すると便利である。

次にPro microのpinoutを示す。

Pinout

Pro MicroはGNDとRSTを2回ショートさせるとリセットモードになる。 次の写真のようにブレッドボードにさしてジャンプワイヤーを使ったり、ピンセットで短絡させたりする。 QMK toolboxを起動していればログが吐かれるので、それで確認をしても良い。 その際に、RX LEDとTX LEDが微笑に光るので、それでリセットされたかを確認することも可能。

リセット方法

リセットが完了し書き込まれると、次のようなログが流れる。 これは書き込みが完了したと事を示す。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
Caterina device connected (usbser): Arduino LLC (www.arduino.cc) Arduino Leonardo bootloader (COM5) (2341:0036:0001) [COM5]
Attempting to flash, please don't remove device
> 
> Connecting to programmer: .
> Found programmer: Id = "CATERIN"; type = S
>     Software Version = 1.0; No Hardware Version given.
> Programmer supports auto addr increment.
> Programmer supports buffered memory access with buffersize=128 bytes.
> 
> Programmer supports the following devices:
>     Device code: 0x44
> 
> avrdude.exe: AVR device initialized and ready to accept instructions
> 
> Reading | ################################################## | 100% 0.00s
> 
> avrdude.exe: Device signature = 0x1e9587 (probably m32u4)
> avrdude.exe: NOTE: "flash" memory has been specified, an erase cycle will be performed
>              To disable this feature, specify the -D option.
> avrdude.exe: erasing chip
> avrdude.exe: reading input file "C:\Users\mike\Downloads\salicylic_acid3_7skb_rev1_layout_mine (2).hex"
> avrdude.exe: writing flash (22292 bytes):
> 
> Writing | ################################################## | 100% 1.66s
> 
> avrdude.exe: 22292 bytes of flash written
> avrdude.exe: verifying flash memory against C:\Users\mike\Downloads\salicylic_acid3_7skb_rev1_layout_mine (2).hex:
> avrdude.exe: load data flash data from input file C:\Users\mike\Downloads\salicylic_acid3_7skb_rev1_layout_mine (2).hex:
> avrdude.exe: input file C:\Users\mike\Downloads\salicylic_acid3_7skb_rev1_layout_mine (2).hex contains 22292 bytes
> avrdude.exe: reading on-chip flash data:
> 
> Reading | ################################################## | 100% 0.16s
> 
> avrdude.exe: verifying ...
> avrdude.exe: 22292 bytes of flash verified
> 
> avrdude.exe: safemode: Fuses OK (E:FD, H:D8, L:FF)
> 
> avrdude.exe done.  Thank you.
> 
Flash complete

これで書き込みは完了である。

なお、USBケーブルを抜き差しをするとQMK Tookboxで次のようなログが残る。 ArduinoをでインストールされたArduino Leonardoのドライバが働いて、Pico Microのブートローダーが認識されていると言う事である。

1
2
3
4
USB device connected (usbccgp): (Standard USB Host Controller) USB Composite Device (04D8:EB5F:0007)
USB device connected (HidUsb): (Standard system devices) USB Input Device (04D8:EB5F:0007)
USB device connected (HidUsb): (Standard system devices) USB Input Device (04D8:EB5F:0007)
Caterina device disconnected (usbser): Arduino LLC (www.arduino.cc) Arduino Leonardo bootloader (COM5) (2341:0036:0001) [COM5]

参考文献

Built with Hugo
テーマ StackJimmy によって設計されています。