超小型キーボードBlocKeyをつくる・ソフトウェア編

 ちぺらです。前回作ったBlocKeyに魂を吹き込むのが今回の目標です。

 初めに言っておくと、ぼくのPCはWindows10 Proなので、macOSLinux等々をお使いの方にはたいして役に立たない部分も出てきます。いやLinuxを普段から使ってる人はこんなとこ見なくても動かせるかな……?

 何はともあれWindowsで自作キーボードにファームウェアを焼くために必要なものは以下の通りです。

・QMK Firmware

・MSYS2

・USBケーブル

ビルドガイドには「QMK Firmwareにファームがあるのでそれを焼いて完成です」と一行だけでサラッと流されているこの工程ですが、不慣れな初心者には途方もなく高い壁に感じられました。それでは奮闘のあとをご覧ください。

1.環境構築

 まずはQMK Firmwareをダウンロードします。
github.com


 ダウンロードしたら適当な所に展開しておきます。といってもあまり深い階層に展開してもいいことないので、Cドライブ直下とかでいいと思います。以降はC:/に置いたものとして話を進めます。

 お次はMSYS2をインストール。
www.msys2.org


64bitOSをお使いの方はmsys2-x86_64-20190524.exeを、イマドキは少ないかもしれませんが32bitOSの方はmsys2-i686-20190524.exeをダウンロードしてください。落としたらウィザードに従ってインストールしましょう。インストールが完了するとMSYS2のシェルが起動します。

 必要なものは全て揃ったので、まずはQMK Firmwareのビルドに必要なツールをインストールします。といっても、親切なことに先ほどダウンロードしたQMK Firmware一式の中にこれを自動でやってくれるスクリプトがあるので、それを実行するだけです。すでに起動しているシェルに、 

 $ cd c:/qmk_firmware-master

と入力して先ほど展開したディレクトリに移動します。違うところに展開した人はディレクトリの場所は適宜読み替えてください。移動したらさらに次のコマンドを実行します。

$ ./util/msys2_install.sh

実行したらしばらくほったらかして処理が終わるまで待ちます。途中いくつか質問があるので、AとかYとか、とにかく進めるほうを選んで回答します。それと途中に「このプログラムがお使いのPCを変更するのを許可しますか」的なWindowsからの警告も出るので、「はい」を選んで処理を進めましょう。すべて終了して再びプロンプトが出てきたら一旦MSYS2を終了して再起動します。以上でソースをビルドする環境が整いました。

2.ソースコードのビルド

 これからやるのはキーボードとしての動作を記述したプログラムをPro Microが理解できる形に翻訳してやる作業です。といってもQMK FirmwareにはBlocKeyのソースコードが含まれているので、先ほどスクリプトに揃えてもらったツールでビルドするだけです。

 まずQMK Firmwareのあるディレクトリに移動します。先ほどと同様に

 $ cd c:/qmk_firmware-master

でOKです。ちなみにカーソルの上キーを押すとさっき入力したコマンドを再び出してくれるので大変便利です。ヒストリー機能とかっていいます。

 移動したら早速ビルドしてみましょう。キーボード名はBlocKey、キーマップはデフォルトなので、

$ make blockey:default

何も問題がなければHEXファイルが生成されてファイルサイズが表示されるはずですが……

f:id:cipher_413:20200424011507p:plain
エラー吐きやがった!この野郎!
ここからが長い長い地獄の始まりでした…

3.エラー潰し

 シェルはマウスで選択してコピーができるので、エラーメッセージをGoogleにコピペして関連しそうなサイトを片っ端から読んでみるという作業を繰り返します。そうしているうちにおぼろげながらわかってきたことが。
r7cancer.hatenablog.com

なるほど、qmk_firmware-master/lib/lufaの中身が問題らしいなとわかったところでいざ自分の当該ディレクトリを覗いてみると……案の定何もないわけです。そりゃエラーも出るわけだ。
github.com

GitHubから落としてきたデータをディレクトリ構造に注意しながらエイヤッとlufaの中に入れてやると、このエラーは消えました。めでたしめでたし。

 次です。もう一つエラーが消えていません。

/bin/sh: avr-gcc: コマンドが見つかりません

というやつです。名前からしてAVR向けgccなのでしょうが。もう一度msys2_install.shを走らせ直してみましたが解決しません。ならばということで一旦MSYS2そのものをアンインストールし、もう一回インストールし直してみましたがエラーが消えません。このへんでだいぶ嫌になってきています。「avr-gcc コマンドが見つかりません」のエラーメッセージでググってもろくな情報が出てこないあたり腹が立ってきます。腹も減ってきて思考力が落ちているので無意味にMSYS2の再インストールを繰り返しますが当然解決しません。ショート箇所をほったらかしてヒューズばっかり換えてるようなものなので当たり前のことではあるんですが…

 もう一度落ち着いてmsys2_install.shを走らせていると、妙な箇所を発見しました。zipファイルの形で落とされてきたavr-gccが解凍されてないようなのです。まさかとは思うがデフォルトでzipを解凍できないのでは…?と思い立ち、そっちから調べるとドンピシャのようで。
toshiya.org

こちらを参考にn度目の正直でMSYS2を入れなおします。一旦シェルを再起動するところまで行ったら次のコマンドを実行。

$ pacman Su
$ pacman -S unzip

これでzipファイルが解凍できるようになったはずなので、改めて…

$ ./util/msys2_install.sh

おや?流れていくメッセージがさっきまでと微妙に違います。うまくいったようです。半分祈りながらビルドコマンドを実行するすると…

f:id:cipher_413:20200424023136p:plain
ヨッシャ!
長かった…長かったよ……

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

 紆余曲折を経ましたが、ともかくこれで正常にビルドできることは確認できたので、いよいよBlocKeyのPro Microにファームウェアを焼きます。まず完成しているBlocKeyを今一度入念に点検し、ショートやハンダブリッジ等の異常がないか調べましょう。異常がなければUSBケーブルでパソコンと接続し、Pro Microとして認識されるかチェックします。BlocKeyの方はPro Micro上の赤いパイロットランプが点灯すればひとまずよしとしていいでしょう。

 さあ、いよいよファームウェアを書き込みます。パソコンとBlocKeyは接続したまま、MSYS2を開いてQMK Firmwareを展開したディレクトリに移動し、以下のコマンドを実行します。

make blockey:default:avrdude

先ほどのビルド時と同じようなメッセージが流れたあとに、

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

とピリオドが無限に出力され始めますので、すかさずBlocKey本体裏のリセットボタンを押して書き込みます。全てがつつがなく終われば、それまでPro Microとして認識されていた物体がBlockeyとして認識されなおします。お疲れ様でした。これでBlocKeyは晴れてキーボードとしての役目を獲得しました。

 テンションが上がってBlocKeyからツイートしてますね。ここまで来れば後はケースを組み立てたりキーキャップをはめたりすれば完成です。

 ここまでBlocKeyを作ってきたわけですが、自作キーボード初心者には(主にソフトウェア面で)ちょっとハードルが高かったですね。表面実装ダイオードのせいでハードの組み立てが難しいと書いている記事もありますが、ランドも広くとられていて特にハンダ付けが難しいという印象もなかったです。それよりもavr-gccで大コケした印象のほうが強いですね。もっとも環境構築はもう終わったのでこれからキーボードをつくる時は格段に楽になるわけですが。今回ぼくが言いたいのは一つだけです。ピンセットには金をかけろ!以上!