BLE Micro ProでErgoDash miniをワイヤレス化する
先日、左右分割キーボードの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と電池基板を繋げるためのコード。
スプリングピンヘッダ
キーボードの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のものは無かったので、他の設定ファイルを参考にしたりコピペしたりして、自分で作った。
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をリセットする必要がある。
を参考に、あらかじめ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_INTERVAL
とBLE_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
をそこまで下げないようにした方がいいのでは……という感じもするし、悩ましい。
あと説明にも書いてあるけど、各パラメータを下げれば下げるほど、電池の持ちは悪くなるらしい。求めるレスポンスや電池の持ちは人それぞれだろうし、うまいこと調整してください。
これがやりたかったんだよな。ワイヤレス最高 pic.twitter.com/ZeSHFxSHB3
— Ryo Nakae (@ryo_dg) 2019年2月28日
PCとの接続、キーボードの左右の接続が完全にケーブルレスになり、率直に言って最高。分割キーボードを持っている人は是非導入してみて欲しい。