先日、左右分割キーボードのErgoDash miniを作ったが、早速ワイヤレス化をしてみた。

無線化にはBLE Micro Proというマイコンボードを使う。せきごん氏が作成されたPro Micro互換のパーツで、Pro Microを使っているキーボードを無線化することができる。PCとはBluetoothで接続する。
自作キーボード初心者の僕には結構ハードルは高かったけど、無事にちゃんと動作させることができた。

部品の調達

BLE Micro Pro

Pro MicroサイズのUSB対応nRF52マイコンボード – のぎけす屋 – BOOTH

分割キーボードなら、左右分で2枚必要。

電池基板

CR1632コイン電池2並列基板キット(2個セット) – のぎけす屋 – BOOTH

ボタン電池を電源として使えるようになる基板。これをBLE Micro Proと繋ぐ。
電池基板やケースを自作している人もいるようだが、僕は電子回路の知識も電子工作の知識もないので、最初から専用品を購入。

工作用コード

ELPA 工作用コード 5m ブラック HK-WS12H(BK)

BLE Micro Proと電池基板を繋げるためのコード。

スプリングピンヘッダ

スプリングピンヘッダ(コンスルー) 12ピン | 遊舎工房

キーボードのPCBとのはんだ付けが不要になるので、前回Pro Microに使ったのと同じスプリングピンヘッダを購入。

あとは、前回購入した、はんだやはんだごてなど。

BLE Micro Proと電池基板。


はんだ付け

BLE Micro Proとスプリングピンヘッダのはんだ付け

Pro Microと同じように、スプリングピンヘッダをはんだ付けする。

これも前回と同じく、一応Micro USB端子がモゲてしまわないように、セメダインで補強した。

電池基板のはんだ付け

そもそもどうはんだ付けをしていいか分からなかったのと、部品が小さすぎてめちゃくちゃ大変だった。ピンセットは必須。

組み立て上の注意点の説明と写真を穴が空くほど見て、多分こうやろ……と、まずは以下のように部品を並べてみた。

写真右上は電源スイッチ。これは穴にはめるとどこをはんだ付けするかすぐ分かる。
写真中央右は、コンデンサ?これは、写真とは反対側にはんだ付けする。向きはどっちでもいいみたい。
写真左下は、ダイオードで、これが曲者。

ダイオードの向きに注意(ダイオードのカソード(ラインが入ってるほう)がシルクのマーク側)

とガイドに書いてある。ダイオードをめちゃくちゃよく見ると、微妙に線が入っている側がある。そして基板の「D1」などと書かれている右上に「・」というマークが見えるけど、それが「シルクのマーク」。
つまり、ダイオードの線が入っている側を「・」に合わせてはんだ付けする。

ダイオードなどの、基板に差し込むのではなく基板に乗せるだけのパーツ(表面実装と言うらしい)は、まず基板の片側にあらかじめはんだを盛っておく。そのはんだを溶かしつつダイオードの片側をはんだ付けして固定し、その後反対側をはんだ付けするとうまくいった。

スイッチとダイオードをはんだ付け。いい感じになった。

次に反対側。こっちはコンデンサと、電池ホルダをはんだ付けする。電池ホルダは、組み立てガイドの写真を見ながら、同じ向きになるようにはんだ付けした。

両面とも完成!

電池基板の絶縁

電池基板の、電池ホルダの反対側がPCBと接触しそうだったので、ロードバイク用のフィニッシュテープが家に余っていたので、それを貼って絶縁した。

BLE Micro Proと電池基板のはんだ付け

次はBLE Micro Proと電池基板をはんだ付けするわけだけど、その前に電池基板の場所を決める必要がある。

Pro Microがキーボードの上や横に露出しているタイプのキーボードなら、BLE Micro Proの上に電池基板を重ねるレイアウトが良さそう。ErgoDash miniはPro Microがキーボードの下にあるタイプなので、電池基板を重ねると厚みが出すぎてアクリルプレートがネジ留めできなくなってしまう。
最高なことに、Pro Microが入る場所の左横に電池基板がちょうど収まるスペースがあるので、横並びで配置することにした。

組み立てガイドの写真を参考に、こんな感じで配線した。なるべくコードが反対側から見えないようにするのにかなり苦労したが、割といい感じにできた。

こんな感じで、ほぼコードが見えない。まぁキーボードの裏側なので、普段は見えないんだけど。

ErgoDash miniへの組み込み

こんな感じでぴったり収まる。最高ですね。

アクリルプレートを取り付けて完成!


QMKファームウェアのビルド環境の構築

組み込みは終わったものの、BLE Micro ProにQMKファームウェアを書き込めるようにしないといけない。macOS Mojave (10.14.3)で環境構築した。

Homebrewのインストール

Homebrewをインストールしておく。

QMK Firmwareのセットアップ

~/Devディレクトリ以下に環境構築する前提で話を進めます。

$ cd ~/Dev
$ git clone https://github.com/qmk/qmk_firmware.git
$ cd qmk_firmware
$ util/qmk_install.sh

を実行すれば終わり。簡単ですね。

BLE Micro Pro用QMK FirmwareをClone

$ cd ~/Dev
$ git clone --recursive --depth 1 -b nrf52 https://github.com/sekigon-gonnoc/qmk_firmware.git qmk_firmware_ble

QMK Firmwareとは別のディレクトリにCloneすることにした。--recursiveオプションをつけておくと、submoduleを自動でcloneしてくれて便利。

nRF5_SDKのインストール

nRF5_SDK v15.x.xから「 nRF5_SDK_15.0.0_a53641a.zip 」をダウンロードして、適当な場所に解凍しておく。15.2.0とかをダウンロードしてはいけない。
~/Dev/nRF5_SDK_15.0.0_a53641aにファイルを展開した。

環境変数にnRF SDKの場所を設定

nRF SDKの場所を指定する。

$ export NRFSDK15_ROOT=~/Dev/nRF5_SDK_15.0.0_a53641a

僕はdirenvを使った。direnvの使い方は以下を参考に。
direnvを使おう - Qiita

Python 2.7のインストール

pyenvを使って、Python 2.7.15をインストールした。

$ pyenv install 2.7.15
$ pyenv local 2.7.15
$ pyenv rehash

2.7である必要はないかもだけど、ドキュメントに2.7って書いてあったので。

nrfutilのインストール

$ pip install nrfutil

エラー対策

macOSだと、ファームウェアのビルド時にusb_serialが見つからないというエラーが出るはず。僕の場合は出た。その場合、以下を参考にコードを書き換える。

書き込み時にusb_serialが見つからないとエラーが出る場合(MacOSなど?)

そんな感じで環境構築は完了。

ErgoDash miniのBLE Micro Pro用QMKファームウェアの作成

BLE Micro Pro用QMK Firmwareのkeyboardsディレクトリを見ると、「xxx_ble」というような名前で、有志の方が作成された各キーボードのBLE Micro Pro用の設定ファイルが入っている。ただErgoDash miniのものは無かったので、他の設定ファイルを参考にしたりコピペしたりして、自分で作った。

qmk_firmware/keyboards/ergodash_mini_ble at ryonakae/ergodash_mini_ble · ryonakae/qmk_firmware · GitHub

C言語は分からんわ、コピペの山でなんとも言えないけど、まぁ動いているのでOK。
BLE Micro Proのパラメータを調節できるけど、後述。

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

BLE Micro Proに作ったファームウェアを書き込む。Master(左手側)とSlave(右手側)の両方のBLE Micro Proに書き込む必要がある。

$ make ergodash_mini_ble/<master or slave>:<keymap>:nrfutil

というコマンドを打つ。<keymap>にはキーマップのディレクトリ名を入れる。今回だとryonakaeというディレクトリなので、

$ make ergodash_mini_ble/master:ryonakae:nrfutil
$ make ergodash_mini_ble/slave:ryonakae:nrfutil

というコマンドを実行。
ファームウェアのビルドが終わるとシェルが待機状態になり、BLE Micro Proをリセットする必要がある。

Helix 組み立て(2) – 日々のメモ

を参考に、あらかじめBLE MicroをmicroUSBケーブルでMacと繋いだ状態で、ピンセットでGNDとRSTの両方を触り、ショートさせる。そして無事に書き込みが開始→完了すれば成功。

PCとErgoDash miniのペアリング

まず、ErgoDash miniの左手側と右手側の電源を入れる。しばらく待つと、左右がペアリングされる(ペアリングされたかどうかは確認できないから、勘)。
その後、キーマップで設定したAD_WO_Lキーを押すと、PCとのペアリングが開始される。
あとは普通のBluetoothキーボードと同じようにペアリングする。

ErgoDash mini BLE!!!!!

BLE Micro Proのパラメータ設定

個人的には、BLE Micro Proは初期設定だと結構遅延が大きいと感じた。
ここを見ると、設定できるパラメータが書いてある。パラメータは、今回の場合だとqmk_firmware/keyboards/ergodash_mini_ble/config.hに追記する。

  • BLE_NUS_MAX_INTERVALは左右間の通信間隔
  • BLE_HID_MAX_INTERVALはPCとキーボードの通信間隔
  • BLE_HID_SLAVE_LATENCYはPCとキーボードの通信間隔

となっている。

BLE_NUS_MAX_INTERVALBLE_HID_MAX_INTERVALを下げると単純にレスポンスは速くなるけど、チャタリングというか、「っっっっっt」みたいにキーが連続入力されてしまうケースが増える印象があった。BLE_HID_MAX_INTERVALの項に

HID‗INTERVALに反比例させると良い?

と書いてあるように、BLE_HID_MAX_INTERVALを下げたら、なんとなくBLE_HID_SLAVE_LATENCYを上げると、チャタリングがなくなって快適になった。
しかしBLE_HID_SLAVE_LATENCYを上げると少しレスポンスが低下するので、それならそもそもBLE_HID_MAX_INTERVALをそこまで下げないようにした方がいいのでは……という感じもするし、悩ましい。

あと説明にも書いてあるけど、各パラメータを下げれば下げるほど、電池の持ちは悪くなるらしい。求めるレスポンスや電池の持ちは人それぞれだろうし、うまいこと調整してください。


PCとの接続、キーボードの左右の接続が完全にケーブルレスになり、率直に言って最高。分割キーボードを持っている人は是非導入してみて欲しい。