作ったもの
TL;DR
- Meishi のファームウェア初回書き込みはリセットボタンを連打して成功しました
- Windows の場合は WinCompose を常駐させておくことで Unicode をキーボードから直接入力できます
- 「㋿」を入力する場合は
rules.mk
でUNICODE_ENABLE = yes
にしてUC(0x32FF)
をキーマップに書いてコンパイルしましょう - 「🔜」などの絵文字も入力したい場合は
UNICODE_ENABLE
の代わりにUNICODEMAP_ENABLE
を使いましょう
はじめに:自作キーボードに入門する
ゴールデンウィーク中、急にキーボードを自作したくなったので遊舎工房に行ってみたところ、入門者に良さそうな Meishi ― The micro macro keyboard kit を見つけたので早速作ってみることにしました。店頭ではスイッチとキーキャップ付きで 1,620 円でした。ちなみに、自作キーボード作成経験は Google 日本語入力 ピロピロバージョンぐらいしかありません。キーやボードがあるのは初めてです。
また、店頭では令和キーキャップが売っていました。
この時、これは新元号「令和」を打つためのキーボードを作れという事だ、と私は理解しました。早速取りかかりましょう。
Meishi の組み立て
組み立て方は「Meishi keyboard 組み立て方ガイド - たのしい人生」に記載されています。見落としがちな点として、マイコン基盤 (Pro Micro) の横にあるタクトスイッチ (丸い小さなスイッチ) は Pro Micro のリセットボタンです。ファームウェア書き込みに使います。
はんだ付けは先人達のガイド(例えば「キーボード自作、特に Helix キーボードキットの製作に最低必要な工具のメモ」)などを参考に良い道具を揃えて挑みましょう。道具代の方が高いですが、これから沼に浸かっていく際にずっと使い続けられるので、実質無料みたいなものです。道具を揃えられない場合は遊舎工房の工作室や、DMM.make AKIBAを活用するのも手でしょう。
できあがり。
ファームウェアの書き込み
Windows 10 で QMK Toolbox を使って書き込みました。
1. QMK Driver のインストール
Releases · qmk/qmk_driver_installer から qmk_driver_installer.zip
をダウンロードしてインストールします。管理者権限のコマンドプロンプトから install_all_drivers.bat
を実行します。(なお Meishi 接続後に install_connected_drivers.bat
でインストールしようとしたら「プロセスが使用中」と言われて失敗しました。)
ドライバインストールが終わったら、念のため PC を再起動します。その後、Meishi を PC に接続します。
2. QMK Toolbox とデフォルトファームウェアの準備
Releases · qmk/qmk_toolboxから qmk_toolbox.exe
をダウンロードして起動します。
ファームウェアを QMK Firmware - All Supported Keyboards から meishi を探してダウンロードします。ダウンロード先の URL は https://qmk.fm/compiled/meishi_default.hex でした。落としたファームウェアを QMK Toolbox の Open ボタンを押して開きます。
3. ファームウェアの書き込み (ハマりポイント)
QMK Toolbox の Auto-Flash にチェックを付けます。そしてリセットボタンを 連打 します。(初回書き込み時のみ。2 回目以降はリセットボタンを 1 回押すだけで OK。)書き込み処理後に avrdude.exe done. Thank you.
と表示されたら完了です。動作確認をしてみましょう。
ファームウェアの書き込みで私はハマりました。上記の通りやれば成功するはずです。私は Auto-Flash を使わず Flash ボタンで書き込もうとしていたのですが、何度やっても
Connecting to programmer: .avrdude: butterfly_recv(): programmer is not responding
と出て止まってしまって、さらに Ubuntu で試してみてもうまくいかず…。
結局、下記サイトを参考に「リセットボタンを連打する→Flashボタンを押下→連打を止める」としたら成功しました。以降はリセットボタンを 1 回押すだけで書き込まれるようになります。おそらく Auto-Flash を使えばリセット連打して書き込み準備が整ったタイミングで処理が走るため、よりうまく行きやすいでしょう。リセットボタンを押すだけで書き込まれるようにできるので Auto-Flash は便利です。
- 参考:
-
Helixキーボードを組み立てた - 面白コンテンツ探求日記
- 書き込みがうまくいかない時の対処について参考になりました。適当にリセット連打するのが解決策だとは思わなかったです。
-
(初心者編)自作キーボードにファームウェアを書き込む - 自作キーボード温泉街の歩き方
- QMK Toolbox の使い方の参考にしました。
-
Helixキーボードを組み立てた - 面白コンテンツ探求日記
キーマップのカスタマイズ
「㋿」を入力できるようにするため、キーマップをカスタマイズします。その前にちょっと Unicode の確認と環境の準備をしましょう。
新元号「令和」と Unicode
Unicode では「令和」の合字「㋿」が U+32FF
に割り当てられています。
2019/5/1 に Windows では早速アップデートが入り、合字のグリフが実装されています。Windows 10 であればこの記事のタイトルにも使っている「㋿」が tofu にならずに見えているかもしれません。(私は 5/4 に更新が降ってきて見えるようになりました)
その他、調べてみると Source Han Sans こと源ノ角ゴシックは令和の合字に対応したようですね。他にも https://32ff.info/という Web ページも見つけましたがこのためだけにドメイン取ったのかな…。
コンパイル環境の構築
QMK Firmware 公式ドキュメントの Getting Startedの Set Up Your Environment を参考にコンパイル環境を構築しましょう。私は Ubuntu 18.04 上に環境を作りました。Windows でも大丈夫です。
util/qmk_install.sh
は必要なパッケージをその環境のパッケージマネージャからダウンロードするスクリプトなので Ubuntu の場合は sudo
を付けて実行しましょう。
ファームウェアのコンパイル
git clone
した qmk_framework
ディレクトリで以下のコマンドを打てば Meishi 向けファームウェアがコンパイルされます。
make meishi:default
default
というのはキーマップで、qmk_firmware/keyboards/meishi/keymaps/default/
ディレクトリを指しています。コンパイルされたファームウェアは qmk_firmware/meishi_default.hex
に出力されます。
「㋿」へのマッピング
ここからファームウェアをカスタマイズします。
QMK Firmware は Unicode の入力に対応していますがいくつか注意点があります。
- OS によって入力方式が異なります。Windows や macOS では異なる手法で Unicode を入力するため、使う OS を変える場合は設定を変えたファームウェアを書き込み直す必要があります。
- Windows の場合は WinCompose (ポータブル版あり) を起動した状態での入力を想定しています。
-
UNICODE_ENABLE
は0xFFFF
まで入力できるため0x32FF
の「㋿」を入力できます。この文字だけ打ちたい場合はこの手法が便利です。ただし、絵文字を入力したい場合はこのコードポイントの範囲外にあるためUNICODEMAP_ENABLE
を使う必要があります。- 例えば 🔜 のコードポイントは
0x1F51C
です。(参考:🔜 Soon With Rightwards Arrow Above Emoji)
- 例えば 🔜 のコードポイントは
今回は UNICODEMAP_ENABLE
を使って実現しました。
1. キーマップの雛型を作る
qmk_firmware/keyboards/meishi/keymaps/default/
ディレクトリを qmk_firmware/keyboards/meishi/keymaps/reiwa/
にコピーします。これを雛型とします。
2. rules.mk
にビルドオプションを追加する
qmk_firmware/keyboards/meishi/rules.mk
を編集します。下の方にあるビルドオプションに UNICODEMAP_ENABLE = yes
を追加します。
# Build Options
# change yes to no to disable
#
BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration(+1000)
MOUSEKEY_ENABLE = yes # Mouse keys(+4700)
EXTRAKEY_ENABLE = yes # Audio control and System control(+450)
CONSOLE_ENABLE = yes # Console for debug(+400)
COMMAND_ENABLE = yes # Commands for debug and configuration
# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
# if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
NKRO_ENABLE = no # USB Nkey Rollover
BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality on B7 by default
MIDI_ENABLE = no # MIDI support (+2400 to 4200, depending on config)
UNICODE_ENABLE = no # Unicode
BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
AUDIO_ENABLE = no # Audio output on port C6
FAUXCLICKY_ENABLE = no # Use buzzer to emulate clicky switches
UNICODEMAP_ENABLE = yes # これを追加
3. キーマップの編集
qmk_firmware/keyboards/meishi/keymaps/reiwa/keymap.c
を編集します。
#include QMK_KEYBOARD_H
enum unicode_names {
SOON,
SHOWA,
HEISEI,
REIWA,
};
const uint32_t PROGMEM unicode_map[] = {
[SOON] = 0x1F51C, // 入力したい Unicode のコードポイントを指定
[SHOWA] = 0x337C,
[HEISEI] = 0x337B,
[REIWA] = 0x32FF,
};
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
[0] = LAYOUT( /* Base */
X(SHOWA), X(HEISEI), X(SOON), X(REIWA) \ // X() を使って入力キーを指定
),
};
const uint16_t PROGMEM fn_actions[] = {
};
void matrix_init_user(void) {
set_unicode_input_mode(UC_WINC); // Windows 向けの入力方式に設定。macOS なら UC_OSX とする
}
void matrix_scan_user(void) {
}
bool process_record_user(uint16_t keycode, keyrecord_t *record) {
return true;
}
void led_set_user(uint8_t usb_led) {
}
4. カスタムファームウェアのコンパイル
qmk_firmware
ディレクトリでコンパイルを実行します。
make meishi:reiwa
5. カスタムファームウェアの書き込み
出来上がった meishi_reiwa.hex
を QMK Toolbox で書き込みます。Auto-Flash にチェックしてリセットボタンを押せば OK。
これで完成!
WinCompose を立ち上げた状態で入力してみましょう!
番外編:簡単にキーマップを変えるには
QMK Configurator を使うと Web 上で簡単にキーマップを変更したファームウェアを作成できます。残念ながら Unicode には対応していませんが、大体のことはできます。使い方は「QMK configuratorを使ってキーマップを作成する - 天高工房」を参考にすると良いです。
上記のサイトで途中、芋が焼けるまで待ってくださいとあって となると思います。つまり、コンパイル中はこういう画面なわけです。
その他参考
-
【Let's split】qmkの書き込み - ULTRA GENMA
- VM 上の Linux で書き込みしようとしたとき参考にしました。結局 VM からだとシリアル接続がうまくいかなくて諦めました。
-
Ubuntu 18.04にArduino IDEをインストールして、プログラムをArduinoに書き込む - Symfoware
- Linux 上で Arduino の認識がうまくいかないなと思って Arduino IDE でポートを見たりしたときの参考です。
-
Arduino Pro MicroにキーパッドをつなげてPCの入力装置に | 東京お気楽カメラ
- 同じ Pro Micro を使ったキーボード作成例です。素の Arduino を触るときの参考になるかなと。
-
QMK Firmwareによる日本語入力 - NaCl非公式ブログ
-
UC()
について、このサイトによれば
ドキュメントには
UNICODE_ENABLE
で0xFFFF
までの値を入力できるとありますが、UC()
というマクロで MSB を立てて他のキーコードと区別するようになっているので、MSB が立っている値を入力すると MSB が落ちて入力されてしまいます。とのことです。今もこの事象は発生するかは未検証です。
-