elephant42 をBMP で無線化してみました

cocot46シリーズBLE Micro Proを使った bluetoothキーボード化をしたときの便利さを知ってしまい、手持ちの自作キーボードでできればいいなということで、他で無線化した実績のなかった分割型アクリル積層の自作メカニカルキーボード、elephant42を無線化してみました。

※自作キーボードのファームウェアをデバックできるぐらいの知識が必要です。

自作キーボードのBLE Micro Proを使った無線化についてはBLE Micro Proの公式サイトサリチル酸さんのGL516デザインガイド Chapter 09などを参照しただければ要領がつかめると思います。

用意したもの

Corne CherryClaw 44を無線化する時と同じようなもので工作しました。

  • 通常の動作する、elephant42
  • BLE Micro Pro 2個
  • CR1632コイン電池2並列基板キット
  • コンスルー12pin 2.5mm 2本
  • スズの工作用電気コード
  • CR1632ボタン電池 4個
  • 丸型スペーサー(M2/10mm) 4本
    (13mm前後ぐらいのものが良さそう)
  • その他ハンダゴテやピンセット、フラックスなど

今回は遊舎工房Daily Craft Keyboardヨドバシカメラで材料を揃えました。

BLE Micro Proと電源のボードを繋ぐ際にピンヘッダーは使わず、スズのメッキされたコードで短くはんだ付けできるようにしました。

そうすることで、外す必要が出た場合も間を切断して、ハンダを取り除けば対応しやすいと考えています。

また、今回はLEDやOLEDの対応は行わず、純粋にキーボードとして使う前提のセットアップにしています。

大まかな無線化の流れ

今回は0から設定などを設計したのではなく、既存のファームウェアと他の実績があるキーボードの設定を用いて、キーの設定周りを調整して対応しました。

  1. CR1632コイン電池2並列基板キットに部品をはんだ付けする
  2. BLE Pro MicroにCR1632コイン電池2並列基板キットをはんだ付けする
  3. elephant42のOLEDやPro microを取り、2.を取り付ける
  4. BLE Pro Micro にChromeが使えるパソコンで有線接続をして、
    BLE Pro Micro用のWeb Configuratorを使い、ナビゲーションに従ってセットアップを行う
  5. セットアップの後、電池をセット、パソコンからマスストレージにアクセスして、CONFIG.JSNとKEYMAP.JSNをelephant42に合わせて編集する&有線で動作確認
  6. パソコンにBlueTooth接続して動作確認、その後、スペーサーを使ってトッププレートをつけ、完成。

のようなフローで実装しました。

なるべく高くならないように、しつつ、絶縁のためにBLE Pro MicroとCR1632コイン電池2並列基板の間の接触しそうな面にマステを貼っています。

10mmのスペーサーの場合は少しトッププレートが当たるのでもう少し長いものの方が良さそうでした。

設定について

基本的に、BLE Pro Microは電源さえあれば動いてくれるので特に困ることはないのですが、キーの設定に最初戸惑いました。

今まで誰も無線化していないため、いろいろ試してみたところ、elephant42を設計する際に感銘を受けた?とある分割キーボードが無線化対応しており、そのキーボードのCONFIG.JSNをベースにlayoutを左右、キーが少ないところを削除したところ、難なく動作しました。

elephant42向けにconfig.jsnで変更した箇所

"matrix":{"rows":8,"cols":6,"device_rows":4,"device_cols":6,"debounce":1,"is_left_hand":1,"diode_direction":0,"row_pins":[7,8,9,10],"col_pins":[20,19,18,17,16,15],
"layout":[1,2,3,4,5,6,30,29,28,27,26,25,7,8,9,10,11,12,36,35,34,33,32,31,14,15,16,17,18,42,41,40,39,38,21,22,23,24,48,47,46,45]},

keymap.jsnのlayout(暫定的に使っているもの)

キーマップの設定はcocot46から持ってきて不要なキー分を削除して設定しました。

"layers":
[["KC_TAB","KC_Q","KC_W","KC_E","KC_R","KC_T","KC_Y","KC_U","KC_I","KC_O","KC_P","KC_BSPC",
"KC_LSFT","KC_A","KC_S","KC_D","KC_F","KC_G","KC_H","KC_J","KC_K","KC_L","KC_SCLN","KC_QUOT",
"KC_Z","KC_X","KC_C","KC_V","KC_B","KC_N","KC_M","KC_COMM","KC_DOT","KC_SLSH",
"KC_LCTL","KC_LGUI","LT(1,KC_SPC)","LT(1,KC_SPC)","LT(2,KC_SPC)","LT(2,KC_SPC)","KC_RALT","KC_ENT"],

["KC_TILD","KC_EXLM","KC_AT","KC_HASH","KC_DLR","KC_PERC","KC_CIRC","KC_AMPR","KC_ASTR","KC_LPRN","KC_RPRN","KC_BSPC",
"KC_LSFT","KC_UNDS","KC_PLUS","KC_LCBR","KC_RCBR","KC_PIPE","KC_LEFT","KC_DOWN","KC_UP","KC_RGHT","KC_GRV","KC_UNDS",
"KC_GRV","KC_TILD","KC_NUBS","KC_PIPE","KC_NO","KC_HOME","KC_END","KC_PGUP","KC_PGDN","KC_TRNS",
"KC_LCTL","KC_LGUI","KC_TRNS","KC_SPC","KC_ENT","ANY(22531)","KC_RALT","KC_ENT"],

["KC_ESC","KC_1","KC_2","KC_3","KC_4","KC_5","KC_6","KC_7","KC_8","KC_9","KC_0","KC_BSPC",
"KC_LSFT","KC_MINS","KC_EQL","KC_LBRC","KC_RBRC","KC_BSLS","KC_F1","KC_F2","KC_F3","KC_F4","KC_F5","KC_F6",
"KC_ESC","KC_LGUI","KC_RALT","KC_CAPS","KC_GRV","KC_F7","KC_F8","KC_F9","KC_F10","KC_F11",
"KC_LCTL","KC_LGUI","ANY(22531)","KC_SPC","KC_ENT","KC_TRNS","KC_BSPC","KC_ENT"],

["BLE_EN","AD_WO_L","ADV_ID0","ADV_ID1","ADV_ID2","ADV_ID3","RGB_TOG","KC_NO","KC_NO","KC_NO","KC_NO","KC_NO",
"BLE_DIS","DELBNDS","DEL_ID0","DEL_ID1","DEL_ID2","DEL_ID3","RGB_MOD","RGB_HUI","RGB_SAI","RGB_VAI","KC_NO","KC_NO",
"SEL_BLE","SEL_USB","KC_NO","KC_NO","BATT_LV","RGB_RMOD","RGB_HUD","RGB_SAD","RGB_VAD","KC_NO",
"KC_NO","KC_NO","KC_TRNS","KC_NO","KC_NO","KC_TRNS","KC_NO","KC_NO"]]}

上記2ファイルの変更箇所がちゃんと設定反映されれば動いてくれると思います。
ちゃんと動いた状態で設定のファイルを全てバックアップをとり、不具合があった時に上書きすることですぐ戻せるので便利です。

今のところスリープ?のような状態に一度なるとデフォルトの設定に戻ってしまうのでどこかで手直しして改善した時には更新します。

今回は仕事が終わってから着手してミスタイプが原因で3、4時間かかってしまったのですが、要領がわかってきたので、今後も少しずつ無線対応の自作キーボードを増やしていきたいと思います。