見出し画像

XD75をBLE Micro Proで無線化する

いままで自作していた優先のキーボードを無線化するというものです。
こちらのBLE対応ファームウエアからXD75を無線化します。

XD75は格子配列の75キーボードですが、わが家では、真ん中の縦3列を外して実験用PCBになっています。

一方で、keyboradsの中にble_micro_testという一体型キーボード用のプログラムがあり、これをなんとかかんとかして、XD75に適合させようという記事です。


■物理側の準備
XD75裏側の不要な部品を外す(破壊)
縦横の配線と各キーのダイオードは残しておきます。

基盤はこれです

これをこう繋ぐ感じ。

画像1

緑はROWSの配線。青色と紫色はCOLS側の配線になります。

画像2

この配線をarduinoの対応するピンへつなぎます。

画像3

電源側は純正のコイン電池ホルダーをセットして電源とGNDピンへ。

これで物理側の準備は完了
ブレッドボードの意味あるのかと感じられているかと思いますが、ブレッドボードの接触が悪いため、結局はんだづけしましたというあれです。

試作だから、よいのです。


■プログラム側の準備
QMKfirmwareの中身を対応させていきます。
例によって簡単なことだとは思うのですが、右往左往して数時間掛かってしまいました。
というわけで、プログラム素人が引っかかったところを纏めていきます。
ベストな方法かは分かりませんが、とにかく動いています。

1、keymap.cにキーマップを書き込む
まずは、冒頭にレイヤーの記載。
わたしは、_QW、_FN、_TEの3つのレイヤーを使っていたので、こんな風に。いずれは、bluetoothコントロール用にもう一枚追加します。

enum layer_number {
_QW = 0,
_FN,
_TE,
};

つぎに日本語キーにしたいので、これを記載。

#define KEYMAP_JP_H
#define JP_ZHTG KC_GRV // hankaku/zenkaku|kanzi
#define JP_YEN KC_INT3 // yen, |
#define JP_CIRC KC_EQL // ^, ~
#define JP_AT KC_LBRC // @, `
#define JP_LBRC KC_RBRC // [, {
#define JP_COLN KC_QUOT // :, *
#define JP_RBRC KC_NUHS // ], }
#define JP_BSLS KC_INT1 // \, _
#define JP_MHEN KC_INT5 // muhenkan
#define JP_HENK KC_INT4 // henkan
#define JP_KANA KC_INT2 // katakana/hiragana|ro-mazi
//Aliases for shifted symbols
#define JP_DQT LSFT(KC_2) // "
#define JP_AMPR LSFT(KC_6) // &
#define JP_QUOT LSFT(KC_7) // '
#define JP_LPRN LSFT(KC_8) // (
#define JP_RPRN LSFT(KC_9) // )
#define JP_EQL LSFT(KC_MINS) // =
#define JP_TILD LSFT(JP_CIRC) // ~
#define JP_PIPE LSFT(JP_YEN) // |
#define JP_GRV LSFT(JP_AT) // `
#define JP_LCBR LSFT(JP_LBRC) // {
#define JP_PLUS LSFT(KC_SCLN) // +
#define JP_ASTR LSFT(JP_COLN) // *
#define JP_RCBR LSFT(JP_RBRC) // }
#define JP_UNDS LSFT(JP_BSLS) // _
// These symbols are correspond to US101-layout.
#define JP_MINS KC_MINS // -
#define JP_SCLN KC_SCLN // ;
#define JP_COMM KC_COMM // ,
#define JP_DOT KC_DOT // .
#define JP_SLSH KC_SLSH // /
// shifted
#define JP_EXLM KC_EXLM // !
#define JP_HASH KC_HASH // #
#define JP_DLR KC_DLR // $
#define JP_PERC KC_PERC // %
#define JP_LT KC_LT // <
#define JP_GT KC_GT // >
#define JP_QUES KC_QUES // ?

キーマップを書き込み。お好きなように。レイヤー3枚分を記載。

const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
[_QW] = LAYOUT( \
KC_ESC , KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS , \
KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC , \
KC_LCTL, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT , \
KC_LSFT, LT(_FN,KC_Z), LGUI_T(KC_X), KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_UP , \
_______, _______, _______, KC_LALT, KC_INT5, KC_SPC, KC_BSPC, KC_ENT,LT(_TE,KC_INT4),KC_LEFT,KC_DOWN, KC_RGHT \
),
[_FN] = LAYOUT( \
KC_ESC , KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11 , \
KC_TAB , KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_RBRC , \
KC_LCTL, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_NUHS , \
KC_LSFT, MO(_FN), _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_INT1 , \
_______, _______, _______, KC_LALT, KC_INT5, KC_SPC, KC_DEL, KC_PENT,LT(_TE,KC_INT4),KC_LEFT,KC_UP, KC_PENT \
),
[_TE] = LAYOUT( \
RESET , _______, KC_F2, _______, _______, _______, _______, KC_F10, KC_SLSH, JP_ASTR, KC_EQL, KC_INT3 , \
KC_TAB, _______, _______, _______, _______, _______, _______, _______,KC_7 , KC_8 , KC_9 , KC_MINS , \
KC_LCTL, KC_VOLU, _______, _______, _______, _______, _______, _______,KC_4 , KC_5 , KC_6 , JP_PLUS , \
KC_LSFT, KC_VOLD, KC_MUTE, _______, _______, _______, _______, _______,KC_1 , KC_2 , KC_3 , KC_BSPC , \
_______, _______, _______, KC_LALT, KC_INT5, KC_SPC, KC_DEL , KC_PENT,LT(_TE,KC_INT4),KC_0,KC_DOT,KC_PENT \
),
};

このままmakeしてもエラーが出ます。
縦5行、横12列のレイアウトを書き込んでいないためです。


2、ble_micro_test.hにキーレイアウトを書き込む
これを記載します。
LとかRと数字の組み合わせですが、上下が対応するならなんでも良さそう。
60キーあるので、60種類の動物の名前などでもいけるかも。

#define LAYOUT( \
L00, L01, L02, L03, L04, L05, R00, R01, R02, R03, R04, R05, \
L10, L11, L12, L13, L14, L15, R10, R11, R12, R13, R14, R15, \
L20, L21, L22, L23, L24, L25, R20, R21, R22, R23, R24, R25, \
L30, L31, L32, L33, L34, L35, R30, R31, R32, R33, R34, R35, \
L40, L41, L42, L43, L44, L45, R40, R41, R42, R43, R44, R45 \
) \
{ \
{ L00, L01, L02, L03, L04, L05, R00, R01, R02, R03, R04, R05 }, \
{ L10, L11, L12, L13, L14, L15, R10, R11, R12, R13, R14, R15 }, \
{ L20, L21, L22, L23, L24, L25, R20, R21, R22, R23, R24, R25 }, \
{ L30, L31, L32, L33, L34, L35, R30, R31, R32, R33, R34, R35 }, \
{ L40, L41, L42, L43, L44, L45, R40, R41, R42, R43, R44, R45 } \
}

これでmakeしてもエラー。
config.hに編集が必要です。

3、二つのconfig.hにROWSとCOLSの数を書き込む
どちらも同じ数になるように記載します。

#define THIS_DEVICE_ROWS 5
#define THIS_DEVICE_COLS 12

さらに、片方のconfig.hに、それぞれの行や列に対応するPINを割り当てます
ROWSはキーボードの上側、つまり数字キーの行からとなります。5行あるので5行。
COLSは左側から。12列あるので12カ所のピンを指定。

#define MATRIX_ROW_PINS { PIN1, PIN2, PIN5, PIN6, PIN7 } 
#define MATRIX_COL_PINS { PIN8, PIN9, PIN10, PIN11, PIN12, PIN13, PIN14, PIN15, PIN16, PIN17, PIN18, PIN19 }

ピンの番号はこちらを見て、しっかり確認しましょう。


4、これから追加すること
bluetoothに関するレイヤーを作成してキーを割り当てる。
端末の切り替えなどができるようにしなければなりません。
端末1台のみで使うなら不要かも。

ともかく、机の上がひろい!
スタバでドヤ顔で使ってみたいですね。

画像4


■必要な材料

Gateron mechanical keyboard switch

xd75re xd75am xd75 Custom Mechanical Keyboard 75 keys Underglow RGB PCB

ちぎっては投げ、ちぎっては投げ、試行錯誤を繰り返して、楽しかったり上手く行ったところを書いていたりします。 貴重なサポートを頂けますと、なおさら色んなことを試して書きます!