ブレッドボード上で2x2キーのキーボードを作った
キーボードの仕組みを理解するために、ブレッドボードで2x2キーの小さいキーボードを作ってみた。 マイコンでキーを読み取る仕組みについては、「キーマトリックス」で検索すると、分かりやすい解説がたくさん見つかるので、それを参考に理解した。 ファームウェアはQMK firmwareを利用した。
利用したパーツ
配線
Pro microのVCCやGPIOの電圧の仕様は5Vで、テスターで測定したところ実際には4.7V程度だった。 Pro microの端子はプルアップされているので、何もしなければHIGH(5V)になっている。 リセット(RST)も何もしない状態ではHIGHで、GNDと短絡されるとLOWになり、ブートローダーモードになる。
今回作成するキーボードの回路図は以下のようなもの。 キーマトリックスのCOLとROWはどの端子を用いてもいいので、適当に選んだ。
上図の回路図を実際のブレッドボード上で再現したものが、以下の写真。
ファームウェアの作成・書き込み
ファームウェアはQMK firmwareを利用した。
新規キーボードの作成は以下のコマンドで出来る(2023-09-14現在。QMK firmwareは頻繁にアップデートされるので、アップデートで変わるかも)。
qmk new-keyboard # 指示にしたがって適当に選択していく # layout: 52 (none of the above) # MCU: 12 (promicro)
自分のキーボードの物理配線(キーマトリックス)に合わせて、以下のファイルを修正する。
info.json
{ "matrix_pins": { "cols": ["F6", "F7"], "rows": ["B5", "B4"] }, "layouts": { "LAYOUT_2x2": { "layout": [ {"matrix": [0, 0], "x": 0, "y": 0}, {"matrix": [0, 1], "x": 1, "y": 0}, {"matrix": [1, 0], "x": 0, "y": 1}, {"matrix": [1, 1], "x": 1, "y": 1} ] } } }
keymap.c
#include QMK_KEYBOARD_H const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { [0] = LAYOUT_2x2( KC_1, KC_2, KC_3, KC_4 ) };
キーマトリックスのPin配置やキーマップの修正が出来たら、ファームウェアをコンパイル・書き込みする。
qmk compile -kb keyboard_name -km default sudo qmk flash -kb keyboard_name -km default # リセットボタンを押すと、ブートローダーモードになって書き込みが行われる