keyball61をBMPで無線化しつつ自動マウスレイヤーを使いたかったお話

(追記)
当記事のBMPのバージョンなども大分古いものになっていますので記事通りに動かないこともありますので注意してください。
こちらの方など詳しく1.2系のBMPの設定を書いてくださっていらっしゃるので、参考になると思います！！
https://zenn.dev/ukoasis/articles/34d3050a23441e

現在は当方もkeyball39を使用していまして、以下ポストにbmp1.3対応のこの記事の挙動のようなファームを置いてます。必要に応じてダウンロードていただけると。
https://x.com/tomcat09131/status/1883485681256935851

## 初めに

初めまして。普段はWebエンジニアのお仕事している身分です。
WebエンジニアやっていてQiita投稿したことないので、まさかの自作キーボード関係が初記事になりました。
keyballという素晴らしいキーボードを使って半年経ったのですが無線化でもっと快適にしたいと思い動きました。有志の方々が備忘録を残してくださっているおかげでだいぶ敷居が下がってBMPの導入がしやすくなっていますが、やはりいざチャレンジすると色々と壁にぶち当たってしまったので他の方の参考になればと思い、自分も記事を残すことにしました

## 参考リンク
https://qiita.com/magical-yaya/items/f2aa4c4fd6265b3b0244

BMPファームウェアの参考
https://github.com/yu-zyu/ble-micro-pro-keyball61/tree/main

自動マウスレイヤーの参考
https://github.com/kamiichi99/keyball/blob/main/qmk_firmware/keyboards/keyball/readme.md

## BMP + 自動マウスレイヤーのファーム
https://github.com/koheishinpuku/keyball/tree/main/qmk_firmware/keyboards/keyball/keyball61/keymaps/c_bmp

こちらをBMPに焼いた後、remapなどで、レイヤー４にBTN_１とBTN_2を設置してください。
トラックボール操作中はレイヤー４が有効になっています。
![スクリーンショット 2024-02-20 14.56.59.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/645228/07dc1703-600c-bc60-5ac9-1ba9ba7f388d.png)


uf2ファイルだけ欲しいかたはこちら
https://github.com/koheishinpuku/keyball/blob/main/keyball_keyball61_c_bmp.uf2

## ハードウェア周り

今回のハードウェア周りは以下になります。
- keyball61
- BLE Micro Pro x 2
- コンスルーピン x 4 (右と左で2つ使うので)
- モバイルバッテリー2つ(https://www.maxell.jp/consumer/mpc-cb5000p.html)
　　- 低電流対応のものを買わないと動かない可能性があります
　　- この製品は奇跡的にkeyball61の横幅とジャストサイズになります

大体みなさんはボタン電池や単４電池ボックスを作ったりしてコンパクトな構成をしていますが、電源実装やトラックボールユニットへの電圧供給など色々面倒だったので、モバイルバッテリーを使って代用しています。
他にもkeyball自体がもともと軽量なのもあって重量増加による安定感を出したかったため、モバイルバッテリーが最適かなというのもあります。

### 見た目
意外と収まりが良いです。
![スクリーンショット 2024-02-19 22.55.33.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/645228/02967395-4c13-99fe-d146-e6a5136bcd05.png)

厚みは1.5倍くらい増える感じです。
![スクリーンショット 2024-02-19 22.55.58.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/645228/2617fc71-2cb1-7af8-f95c-d8fd96421f6c.png)


## 詰まったところ
### その１ BMP自体のファームウェア更新
公式サイトの手順でいくとこの部分になります。
https://sekigon-gonnoc.github.io/BLE-Micro-Pro/#/getting_started?id=ble-micro-pro-web-configurator%e3%82%92%e4%bd%bf%e3%81%86

まずそもそもkeyballはBLE Micro Pro Web Configuratorのキーボードの種類はないのでここでは、ブートローダーとアプリケーションの更新のみで使用します。
気をつけて欲しいところがありまして、ドキュメントにも記載があるのですが
`2つのファームウェアのバージョンは<major>.<minor>.<revision>の3つの数字の組み合わせで表されていて、ブートローダとアプリケーションのメジャーバージョンとマイナーバージョンは一致させる必要があります。`
この部分です。
適当に選ばないで先頭二つの数字が一致していればOKです。
```
こういう組み合わせはOK
ble_micro_pro_bootloader_1_1_0
ble_micro_pro_vial_1_1_2

これはダメ
ble_micro_pro_bootloader_1_０_0
ble_micro_pro_vial_1_1_2
```

### その２ keyballのファームウェア更新
keyballでBMPをセットアップするには以下の二つの作業が必要です
- BMPにQMKfirmwareでビルドしたファームを焼く
- `KEYMAP.JSN　`と`　CONFIG.JSN`をコピー

こちらに関してもBMPのドキュメントを見れば手順などは載っているのですが、それぞれ作業方法が微妙に違うので間違えないようにしましょう。

```
BMPにQMKfirmwareでビルドしたファームを焼く
-> リセットボタンを押しながらPCと接続すると、BLE Micro Proと認識されるので、この状態でuf2ファイルをコピーしましょう

`KEYMAP.JSN　`と`　CONFIG.JSN`をコピー
-> 普通にPCと接続されたら外部機器としてマウントされるのでただただドラッグ&ドロップをするだけで大丈夫です
```

地味にこれを忘れていて全然ファームウェアが焼けなくてBMPが調子悪いのかと思っていました・・・。

### その３ console.pyでエラー出ており、QMKfirmwareで全然ビルドできない！！
これ結構困りました。エラーばっかり吐いてビルドできないし、なんでやねん状態でした。
まあ環境によってはいろんなエラーが出るかもなのですが、自分の場合以下のところが原因で全然できませんでした。
https://github.com/sekigon-gonnoc/qmk_firmware/blob/1edb40cc60e7a1e2b152278008830b8e1dc30eea/lib/python/qmk/cli/console.py#L262
Xを見た感じでも他に同じ様子の方がいたのですが、２５６〜２６１行をコメントアウトして対応していたので自分も真似をしました。
特にコメントアウトしても問題なく使用できているので、多分大丈夫かなと思っています。

### その4 keyballが無線で動いたけど、自動マウスレイヤーが欲しい
もともと有線で使っていた時はkamidaiさんという偉大なお方が配布してくださっていた自動マウスレイヤーのファームを少しいじって使わせていただいていたのですが、これと同じ機能が使いたいけど、まだ無線化でkeymapを公開しているものがありませんでした。
なのでkamidaiさんのものとBMP先駆者の方々のファームウェアを合体させまして、実装しました。
GitHubで公開しておきますので少しでも参考になればと思います。
QMKfirmware訳わかんないよ！って方もいるかなと思うので、ビルドしたファイルもGitHub上に置いておこうかと思うのでぜひ使っていってもらえると。

## まとめと感想
ノリと勢いで取り掛かって意外と時間がかかったのですが、やってよかったと思いました。
TRRSケーブルとPCを繋ぐケーブルがなくなったのも大きいですが、やはりセパレートタイプのキーボードは右手左手が独立していることが理想系ではあると思うのでかなり配置の面での使い勝手が良いです。

チャレンジできる方はぜひ無線化をおすすめいたします！