天高工房

キーキャップに印字して遊んだり電子工作して遊んだりしたことを書くかもしれません。

BLE micro proで分割キーボードを定義する

この記事は古いバージョンの内容の記事です。

github.com

今回はotaku_split_BLE/rev1を定義します。

動作確認のためには、最低限BLE micro pro2台とPC、BLEで接続可能なホストデバイス、そしてmicroUSBケーブルを2本用意しておくとよいでしょう。

ひな形をコピー

ひな形なんて存在しないので、まずキーボードフォルダを作ります。今回はotaku_split_BLE/rev1にします。

作成したフォルダの下にkeyboards/ergo42_BLE 以下をまるっとコピーします。

rules.mk

DEFAULT_FOLDERを現在のキーボードフォルダ名に変更してください。

今回はDEFAULT_FOLDER = otaku_split_BLE/rev1です。

.c.hのrename

ergo42_BLE.h ergo42_BLE.cをフォルダ名にリネームします。QMKでは今いるフォルダ名なので、今回は rev1.c rev1.hになります。

rev1.c内の読み込みファイルの変更

rev1.c内のinclude文を変更します。

#include "rev1.h"

rev1.hの移植

qmk/qmk_firmwareで利用しているrev1.hをコピーします。

config.hの書き換え

必要な部分を書き換えます。最低限の変更項目は以下の通りです。

#define MANUFACTURER
#define PRODUCT
#define DESCRIPTION

#define MATRIX_ROWS
#define MATRIX_COLS

master/config.hの書き換え

マスターデバイスで使う定義です。 ピン定義とどちらの手かを定義します。

具体的には以下です。

#define THIS_DEVICE_ROWS
#define THIS_DEVICE_COLS
#define MATRIX_ROW_PINS
#define MATRIX_COL_PINS

ピン番号は PINX(X=正の数)です。追加の2ピンには0と25が割り振ってあるため、1から24の数字で割り振れるのでそんなにつらくないです。

stonehenge30_BLE/rev1内にあるpin_assign.hをコピーして(いらない部分を削除して)includeすると、promicroと同じピン名で定義できるはず...だったんですけどどうも私の環境ではうまくいきませんでした。

また、msys2上のvimでは Shift+insertで貼り付けができます。

slave/config.hの書き換え

スレーブデバイスで使う定義です。 master/config.hと同様です。もし左右で異なるピンを割り振っていた場合はMATRIX_ROW_PINS_RIGHTなどの値に適宜置き換えてください。

keymap の書き換え

LAYOUTマクロは移植済みなので、キーマップのコア自体はそのままの移植で大丈夫です。

そのあとに、BLEのデバイス検索・接続などの機能の入り切りのためのカスタムキーコードを定義して適当なキーに割り当てる必要があります。ergo42_BLEからカスタムキーコードと関数呼び出し周りを上手に移植してください。

一通りすべての機能が「マスターデバイス上で」使えるようにしておいてください。大体どれも使うことになります。また、スレーブにもまたがっていると、スレーブがうまくつながらなくなったときに死にます。

ビルド、書き込み

マスターとスレーブで書き込みコマンド・書き込みファームウェアが異なります。

"マスター用
make otaku_split_BLE/rev1/master:default:nrfutil
"スレーブ用
make otaku_split_BLE/rev1/slave:default:nrfutil

それぞれビルドが終わったら書き込むデバイスの検索をはじめますので、検索が始まったら該当するBLE micro proのにリセットを掛けながらUSBケーブルで接続してください。ピン名としてはRSTではなくBOOTだったかもしれません。書き込みが完了したら抜いてもらって構いません。

動作確認

まず、マスターにUSBケーブルを差し込んで USB_ENを実行してください。これはマスターとホストデバイスをUSB接続可能にするキーコードです。事前にテスターなどでデバッグをしているとは思いますが、一通りのキーが入力できることを確認してください。

次に、AD_WO_L を押して検出可能モードにしてください。タイムアウト時間がいくらかは知りませんが、しばらく適当なデバイスで接続可能なデバイス一覧に表示されるようになります。

適当なデバイスで接続をして、BLE経由で入力ができることを確認してください。

忘れてましたが、スレーブデバイスにもUSBケーブルを接続して電源を供給し動作確認をしてください。

最後に、電池で動作確認してみてください。

最後に

うまく定義できたらせきごんさんのリポジトリにプルリクエストを投げてついったーで宣伝しましょう。

私はあとでなげます。

書き換えなければいけない場所が分かっていれば特につらくないと思います。

思ったより書いてきそうなので積極的に使っていきたいなーと考えています。

エンドユーザー向けには厳しいので、QMK configuratorをうまいこと使ってキーマップ書き換えを楽にする話をかかないとなーと思っています。