February 27, 2019

自作キーボードBlocKeyのキットを作ってBLE化したときのメモ(うまくいかなかったところ含め)

BlocKeyという自作キーボードのキットを作り、それをBLE Micro ProでBLE化したときの作業手順です。結論から言うとケースが締められなかったりLEDが光らなかったりしたのですが、キー入力ができるところまではできました。多分もっといいやり方あると思うので参考程度に。なお、BLE Micro Proまわりのことをメインに書くので、Pro Microを用いた場合の組み立て方は下記に示したBlocKey作成者の方の手順書や他の方のビルドログを参考にしてください。

なお、今回使ったBLE Micro Proは、遊舎工房の実店舗にてCR1632基板キット(以下、電池基板キット)と一緒に購入しました。

普通にProMicroをつける直前まで進める

作成者の方の組み立て手順や他の方のビルドログを参考に、ProMicroを実装する直前まで進めます。ピンヘッダは長い方をProMicroを実装する方にしました(理由は後述)

ここまで終わった段階で、裏面が以下の写真のようになりました。

image.png (2.5 MB)

ProMicroをピンヘッダの先にはんだ付けして動作確認

ProMicroの代わりにBLE Micro Proを使うのですが、ここまでの工程で問題がないかを確認したかったので、一度ProMicroで動作確認しました。とはいえ、BlocKeyはコンスルー対応ではないので付け直しは大変そうだったので、次のようにしてみました。

写真のようにピンヘッダの先の方にProMicroをはんだ付けします。完全固定するわけじゃないのでごく少量で問題ないはず。はんだしてる最中の写真取り忘れたのですが確かマスキングテープで固定していました。

image.png (1.8 MB)

これをするために長いほうを残していました。どのみちピンヘッダはBLE Micro Proはんだ付け後にギリギリまで切り落とすので、この時点で多少短くなっていても大丈夫でした。

はんだ付けしたら、公式の手順通りにファームウェアを書いて、全キー入力できているのを確認します。後から気づいたんですが、このときにLEDストリップもはんだ付けしておいて一緒に動作確認したほうがよかったです。。BLE Micro Proで光らせられなかったのですが、問題がBLE Micro ProなのかLEDストリップなのかの切り分けができませんでした。。

それはさておき、全キー入力できてるのを確認したらギリギリでピンヘッダを切り、Pro Microを外します。できるならはんだを除去して外したほうが綺麗です。あとニッパの切れ味にもよると思いますが、切るときにピンヘッダがどうしても曲がるので、BLE Micro Proをつけるのが若干やりにくくなります。私はPro Microがもったいなかったので、ピンヘッダを切って外した後にはんだ吸い取り器(HAKKOのSPPON)でPro Microからピンヘッダを除去しました。

ファームウェア作成と書き込みチェック

BLE Micro Pro対応のBlocKeyのファームウェアはこの時点ではなかったので、色々参考にしたり自キーのDiscordで助けていただきながら実装しました。qmkについてはほぼ何もわかってないのですが、色んなキーボードのディレクトリを覗いてみて雰囲気をつかんだり、設定している項目の意味がわからなかった時はREADMEやドキュメント見たりgit grepなどで調べたりして実装しました。そんな感じだったので、ほぼおんぶにだっこでしたありがとうございました。。 まず https://github.com/sekigon-gonnoc/BLE-Micro-Pro を参考にしてビルド環境をセットアップします。 git pull sekigon nrf52 は実行すると手元の状況によってはコンフリクトするっぽいので git fetch sekigon の方がいいかもです。 その後は、keyboards/ble_micro_test/keyboards/blockey_ble/ としてコピーした後、BlocKey固有のファイルをkeyboards/blockey/ からコピーし、必要なところを書き換えました。具体的な箇所は後述します。また、以下ファイル名だけの名前はすべて keyboards/blockey_ble/ ディレクトリにあるものとします。

次に、ピン配置がPro MicroとBLE Micro Proで異なるのを吸収するために、 keyboards/treadstone48_ble/ から pin_assign.h をコピーします。ただしマトリックスの設定にしか対応していないらしいので、例えばLEDのピン設定などは PINn といった書き方に変更する必要があります。 また、キーマップの定義( keymaps/default/keymap.c )については、 keyboards/ble_micro_test/ ではなくkeyboards/blockey/ をベースに書き換えました。 keyboards/ble_micro_test/keymaps/default/keymap.c からは custom_keycodesprocess_record_user() をコピーしてきます。また、キーマップにBluetooth関係の操作をするためのキーを設定します。

その他、具体的に書き換えた箇所は次のようになります(なるべく抜き出したつもりですが漏れはあるかもです。。)

  • RGB_DI_PIN の値を PIN16 にする
  • pin_assign.hTHIS_DEVICE_ROWS MATRIX_ROW_PINS THIS_DEVICE_COLS MATRIX_COL_PINS の設定を追加、config.hMATRIX_ROW_PINS MATRIX_COL_PINS の設定があるなら削除
  • rules.mkSRC += ws2812.cを追加し、DEFAULT_FOLDER = blockey_ble/rev1 (ファームウェアのバージョンごとのコードを置くディレクトリ名)の設定を追加
  • config.h にある VENDOR_ID などのキーボードの情報を示す設定を変更(ble_micro_testのままでも動くのですが一応)

最終的なコードは https://github.com/sekhttps://github.com/yoshihara/qmk_firmware/tree/blockey_ble/keyboards/blockey_ble のようになりました。ポイントとしては、qmkのディレクトリ名・ファイル名に決まり(特定の場所にある特定の名前のファイルは自動で読み込まれるようになっている)があるのでそれを守ることと、キーボード固有の設定や DEFAULT_FOLDER の指定を忘れないことあたりだと思います。 また、上記コードは自分用にキーマップ書き換えたりしています。そのあたりは好みで大丈夫だと思いますが、Bluetooth操作関連のキーをキーマップに入れ忘れるとペアリングができなくなったりするので、そこだけは注意したほうがよいです。 ファームウェアが正しくビルドできることは、 make blockey_ble を実行してエラーが出ないことで確認できます。

ただし、BLE Micro Pro作成者のリポジトリにすでに別の方が作ったBlocKey用ファームウェアがあるので、もしこれからやる方はそちらを使うのが早いと思います。

エラーなくビルドできたら、make blockey_ble:nrfutil を実行してファームウェアを書き込みます。少し待って Detecting USB port, put your controller into dfu-mode now... という表示が出たら、BLE Micro Proの BOOT とすぐ隣の GNDをショートさせながらPCに接続します。ProMicroだとPCに接続してから( RSTGND を)ショートさせればよいですが、BLE Micro Proはショートさせずに接続するとブートローダが起動せず、PCに認識されるが書き込みはできない状態になるという違いがあります(最初気づいてなくてハマっていました) ここで書き込みが正常に終了したら次に進みます。

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

https://github.com/sekigon-gonnoc/BLE-Micro-Pro/tree/master/CoinCellHolder を参考にしつつ電池基板キットのはんだ付けをします。なお電池は2つ必要です。その後、PCBに触れてショートするのを防ぐため、裏にカプトンテープを貼りました。

image.png (2.9 MB)

その後、電池基板キットとBLE Micro Proを電線で繋ぎます。この時、(最終的には)BLE Micro Pro側の電線はBLE Micro Proの側面側から、部品がはんだされている面にはんだ付けしました。PCB側から電線が横に出てくる感じです。反対側にはんだ付けするとケースと干渉します。(まあそれどころじゃなくなったのですが。。)

以下の写真はつないだ直後の写真です。BLE Micro Pro側の電線のはんだはこの後やり直すことになります。。(詳細はケース組み立てのところで後述)

image.png (2.0 MB)

その後、BLE Micro ProとPCBにはんだ付けしておいたピンヘッダをはんだ付けします。BLE Micro Proを差したら先にピンヘッダを切り、はんだがほぼ盛り上がらないようにはんだ付けします。

また、電池基板キットがダイオードやタクトスイッチのはんだ部分に触れてショートするかなと思ったので、電池基板キットの裏面にもカプトンテープを貼っています。

image.png (2.5 MB)

Bluetooth接続確認→LED動作確認できず

ここまで来るとBluetoothキーボードとして認識できるはずなので、接続テストをします。電池基板キットのスイッチを - 側に入れて電源を入れます。その後、適当なBluetooth対応機器で機器を接続可能状態にしてから、BlocKeyの AD_WO_L が割り当てられているキーを押します。すると、上記で示したコードを利用しているなら、機器のほうで BlocKey BLE というデバイスが見つかるはずなので、接続します。その状態で入力できるようになったら成功です。もしできない場合は BLE_EN が割り当てられているキーを押すと動くようになるかもしれません。Pro Microで動作確認しているのでキーなどのはんだが失敗していることはないはずです。 なお、USB接続で確認する場合、接続してから USB_EN を割り当てたキーを押し、USB接続を有効にする必要があります。

ただし、LED操作系のキーを押しても反応がありませんでした。screen コマンドでシリアルポートを見た感じ、処理自体は行われているようなので、ドライバまわりか部品壊してしまったかのどちらかだとは思うんですが、これ以上は調査が私では無理そうだったので諦めました。

ケース組み立て→干渉して一部ネジが締められず

ここまで来たらあとはケース組み立てるだけ……なのですが、電池基板キットをケース内に入れるとケースと干渉することがこのタイミングで発覚し、結局一箇所ネジ止めできない形になりました。電線をUSB差し込み口から外に出して、電池ケースを外に露出させればちゃんと組み立てることができ、かつ電池基板キットのスイッチが操作しやすくなるのですが、やや見た目が不恰好かなと思ったので、ケースに収める形で私は決着させました(どの道不恰好ですが。。)だいたい↓ぐらい浮いています。

image.png (1.0 MB)

おそらくスペーサーをかませればちゃんと干渉せずに組み立てられると思います。。

あと最初BLE Micro Pro側の電線を部品と逆側にはんだ付けしていたため、そちらもケースと干渉したので1回電線をはんだしたギリギリで切って無理矢理PCBとBLE Micro Proの間から部品側にはんだ付けし直しました。。さらに、そんなこんなしてたら電線の長さがだいぶ無理に詰めないと厳しそうだったので継いだりなんだりしました 😇仮組みしたはずなんですがチェックが甘かったようで反省点です。そんなこんなで、最終的なケースの中身はこちらになります。

image.png (2.5 MB)

キーキャップはめ

思い思いにキーキャップをはめます。結構しっかり目にはめないと抜けます。なくても動作に支障はないですが、はめてある方が格段に打ちやすさと見た目がいいです。

image.png (1.6 MB)

うまくいかなかった箇所まとめと思い付く解決方法

  • LEDが光らない→たぶんハードかドライバ回りっぽい。
    • LED点灯は個人的にはついたら嬉しいレベルなのでこのままにするかも
  • ケース締まらない→スペーサーをかますのがてっとり早そう
    • ついでにそのスペースからBLE Micro Proの電源スイッチ出せたりしたら便利そう(スイッチの切り替え自体はピンセットとかで頑張るとして)

おわりに

ファームウェアは書き換え箇所さえわかっていればそんなに苦戦しなさそうな気がしました(今回わかってなかったので割と苦戦しました。。)あと、電線込みでどう部品を収めるかの仮組みはしっかりやりましょう。はんだ付けしてからミスに気づくより、余剰がある部品(電線とか)を多少消費してでも確認する方が楽そうです。 あと光ってほしかったな……。

しかしBlocKey、とてもかわいいキーボードです。無意味に手に取ってしまう。なので、挑戦できたことも込みでおおむね満足はしています。ケースはそのうちスペーサー買ってきて調整するかもしれません。

© yoshihara 2017-2019

Powered by Hugo & Kiss.