電子工作初心者が自作キーボードでハローワールドするまで


はじめに

これは、WEB+DB PRESS vol.112で「自作キーボードのススメ」という記事を読んで、面白そう!と思って手を出してみた記録です。実際に材料や道具を揃えて作成したのは1月下旬〜2月上旬です。

完成品

手短に

  • これは楽しい
  • meishi2のキースイッチは5ピンのものを用意しよう
  • QMKのビルド環境はMac OS以外を用意したほうが良さそう

準備物

キーボード本体

meishi2

初めての自作キーボードにあたり、苦労するのははんだ付けであろうことは想像に難くありませんでした。はんだ付けを避けることもできそうでしたが、できるだけキー数の少ないキットで入門することで、はんだ付けの練習も兼ねることにしました。

キースイッチ・キーキャップ

Gateronの所謂「青軸」です。実用目的ではないので、最も「ポチッとな」感があるものを選びました。
ちょっと失敗だったのが、3ピンだと基板にはめ込んだときに隙間ができてしまい、ガタガタになってしまいました。5ピンのものだとピッタリ収まるようです。

道具

  • はんだこて
  • こて台
  • はんだ
  • はんだ吸取り線
    • 用意しましたが、まだ使っていません
  • ニッパー
    • 百均で調達しましたが切れ味が悪かったので、ケチらずちゃんとしたものを買おうと思いました
  • メンディングテープ
    • 部品の固定用
    • 半田こてが当たってしまうと溶けてビニールくさいので、紙製のマスキングテープのほうがいいんだなと実感しました
  • USBケーブル
    • PCとキーボードを繋ぎます
  • Raspberry Pi
    • 当初は使う予定はありませんでしたが、Macでファームウェアの書き込みができなかったため使いました

部品の組み立て

半田付け

主に下記のリンクを参考に半田付けをしました。

ファームウェアの書き込み

当初はMacにインストールしたQMK Toolboxで試みましたが、不具合を踏んでしまいました。

macOS Catalina: Pro Micro (w/Caterina bootloader) flashing - avrdude: butterfly_recv(): programmer is not responding · Issue #6133 · qmk/qmk_firmware · GitHub

MacOS側の問題で、アップデートすれば解消するようです。QMK Toolbox自体が公開されたばかりで、今はこれ以上不具合を踏みたくないと思ったので、家にあったラズパイのRaspbian環境で構築しました。

ビルド環境の構築

ドキュメントに記載はありませんが、avrdudeをインストールします。インストールしないと書き込み時にコマンドが見つからずエラーとなります。

apt-get install avrdude

あとはドキュメントに沿ってインストールします。

apt-get install git
git clone --recurse-submodules https://github.com/qmk/qmk_firmware.git
cd qmk_firmware
util/qmk_install.sh

ビルド

インストールが完了したらビルドと書き込みをします。meishi2をUSBポートに繋ぎます。赤色のランプが2つと緑色のランプが1つ点灯します。
meishi2ビルドガイドを参考にコマンドを実行します。

make meishi2:default:avrdude

途中でリセットしてねとメッセージが出てくるので、リセットボタンを押します。

Detecting USB port, reset your controller now.........

適切にはんだ付けができていれば、リセットボタンを押したときにチカッとランプが一瞬消えるようです。私のは押してもランプに変化がなく、ターミナルの反応もありませんでした。スイッチのはんだ付けができていないとみなし、GNDとRSTをショートさせてリセットしました。
はんだこてを使って、GNDとRSTを繋ぐように触れると、ランプがチカッと消えました。ターミナルでも文字が流れはじめ、しばらくすると「avrdude done. Thank you.」と表示されて処理が終わります。

動作確認

書き込みが終わってすぐにキーをポチポチ押しても反応しませんでした。一度USBケーブルを抜いて挿し直すと、2つの赤色のランプが消え、緑色のランプのみが点灯しました。この状態で押してみると・・・コピペできたー!
ひとつずつ動作確認してみると、1キーだけ反応しませんでした。うまくはんだ付けができていないようです。

キーマップのカスタマイズ

キーマップを書き換えて、右端のキーを押したら「Hello, World.」と入力できるようにします。
新しいキーマップ用のファイルを生成します。

# new_keymap.sh <キーボード名> <新しいキーマップ名>
./util/new_keymap.sh meishi2 custom
vi keyboards/meishi2/keymaps/custom/keymap.c

生成したファイルのうち keymap.c を書き換えます。

keyboards/meishi2/keymaps/custom/keymap.c
#include QMK_KEYBOARD_H

enum custom_keycodes {
  HELLO = SAFE_RANGE,
}

bool process_record_user(uint16_t keycode, keyrecord_t *record) {
  switch (keycode) {
    case HELLO:
      if (record->event.pressed) {
        SEND_STRING("Hello, world.");
      }
      break;
  }
  return true;
};

const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
  [0] = LAYOUT( /* Base */
    KC_A, KC_B, KC_C, HELLO \
  )
};

書き換えが終わったら保存して、再度ビルドを実行します。

# make <キーボード名>:<キーマップ名>:avrdude
make meishi2:custom:avrdude

参考