![見出し画像](https://assets.st-note.com/production/uploads/images/11914357/rectangle_large_type_2_efb5e7983de7bd4859de8328bb1faa8d.jpeg?width=1200)
XD75をBLE Micro Proで無線化する
いままで自作していた優先のキーボードを無線化するというものです。
こちらのBLE対応ファームウエアからXD75を無線化します。
XD75は格子配列の75キーボードですが、わが家では、真ん中の縦3列を外して実験用PCBになっています。
一方で、keyboradsの中にble_micro_testという一体型キーボード用のプログラムがあり、これをなんとかかんとかして、XD75に適合させようという記事です。
■物理側の準備
XD75裏側の不要な部品を外す(破壊)
縦横の配線と各キーのダイオードは残しておきます。
基盤はこれです
これをこう繋ぐ感じ。
![画像1](https://assets.st-note.com/production/uploads/images/11914364/picture_pc_80737682ac93daef818fb13ffb142adc.jpg?width=1200)
緑はROWSの配線。青色と紫色はCOLS側の配線になります。
![画像2](https://assets.st-note.com/production/uploads/images/11914367/picture_pc_379a3a377871e6c01e44b25e1882c264.jpg?width=1200)
この配線をarduinoの対応するピンへつなぎます。
![画像3](https://assets.st-note.com/production/uploads/images/11914374/picture_pc_5d1bb187e97726fa4f984a853010c75d.jpg?width=1200)
電源側は純正のコイン電池ホルダーをセットして電源とGNDピンへ。
これで物理側の準備は完了
ブレッドボードの意味あるのかと感じられているかと思いますが、ブレッドボードの接触が悪いため、結局はんだづけしましたというあれです。
試作だから、よいのです。
※2024/8/15追記
上記写真ではXD75側のICを剥がしたりしていましたが、その後に作り直したところ、そのままでも問題無く動作しました。
■プログラム側の準備
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枚分を記載。
両親指周りにCTRLやALT、SHIFTだけでなくエンターキーやスペースキーなども集約。便利かつ肩こり解消。
また、右手のところにテンキーレイヤーを入れておくと、コンパクトなキーボードでもテンキーを使えます。これまた便利。
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
[_QW] = LAYOUT( \
KC_1 , KC_2 , KC_3 , KC_4 , KC_5 ,XXXXXXX, KC_6 , KC_7 , KC_8 , KC_9 , KC_0 , KC_MINS , \
KC_Q , KC_W , KC_E , KC_R , KC_T , KC_ESC, KC_Y , KC_U , KC_I , KC_O , KC_P , KC_LBRC , \
KC_A , KC_S , KC_D , KC_F , KC_G , KC_TAB, KC_H , KC_J , KC_K , KC_L , KC_SCLN, KC_QUOT , \
LT(_FN,KC_Z), LGUI_T(KC_X), KC_C , KC_V , KC_B ,KC_LALT, KC_N , KC_M , KC_COMM , KC_DOT, KC_SLSH, KC_UP , \
XXXXXXX , XXXXXXX , KC_INT5 , KC_SPC,KC_LSFT,KC_LCTL, KC_BSPC, KC_ENT,LT(_TE,KC_INT4),KC_LEFT,KC_DOWN , KC_RGHT \
),
[_FN] = LAYOUT( \
KC_F1 , KC_F2 , KC_F3 , KC_F4 , KC_F5 , XXXXXXX, KC_F6 , KC_F7 , KC_F8 , KC_F9 , KC_F10 , KC_F11 , \
XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_ESC , XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, \
XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_TAB, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, \
MO(_FN), XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_LALT, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_INT1, \
XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_LSFT, KC_LCTL, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX \
),
[_TE] = LAYOUT( \
KC_F1 , KC_F2 , KC_F3 , KC_F4 , KC_F5 , XXXXXXX, XXXXXXX, KC_F10 ,KC_SLSH, JP_ASTR, KC_EQL, KC_INT3 , \
KC_VOLU, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_ESC , XXXXXXX, XXXXXXX,KC_7 , KC_8 , KC_9 , KC_MINS , \
KC_VOLD, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_TAB , XXXXXXX, XXXXXXX,KC_4 , KC_5 , KC_6 , JP_PLUS , \
KC_MUTE, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_LALT, XXXXXXX, XXXXXXX,KC_1 , KC_2 , KC_3 , KC_BSPC , \
XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_LSFT, KC_LCTL, KC_DEL , XXXXXXX,LT(_TE,KC_INT4),KC_0,KC_DOT,KC_PENT \
),
};
このままmakeしてもエラーが出ます。
縦5行、横12列のレイアウトを書き込んでいないためです。
※2024/8/15追記
その後に作り直したところ、何故かbluetoothドライバーエラーが出てしまいました。
keymap.cから以下の文章を削除するとエラーなく動作するようになりました。
冒頭部分のこれ⤵
#include "app_ble_func.h"
後半のこれ⤵
bool process_record_user(uint16_t keycode, keyrecord_t *record) {
char str[16];
if (record->event.pressed) {
switch (keycode) {
case DELBNDS:
delete_bonds();
return false;
case AD_WO_L:
restart_advertising_wo_whitelist();
return false;
case USB_EN:
set_usb_enabled(true);
return false;
break;
case USB_DIS:
set_usb_enabled(false);
return false;
break;
case BLE_EN:
set_ble_enabled(true);
return false;
break;
case BLE_DIS:
set_ble_enabled(false);
return false;
break;
case ADV_ID0:
restart_advertising_id(0);
return false;
case ADV_ID1:
restart_advertising_id(1);
return false;
case ADV_ID2:
restart_advertising_id(2);
return false;
case ADV_ID3:
restart_advertising_id(3);
return false;
case ADV_ID4:
restart_advertising_id(4);
return false;
case DEL_ID0:
delete_bond_id(0);
return false;
case DEL_ID1:
delete_bond_id(1);
return false;
case DEL_ID2:
delete_bond_id(2);
return false;
case DEL_ID3:
delete_bond_id(3);
return false;
case BATT_LV:
sprintf(str, "%4dmV", get_vcc());
send_string(str);
return false;
case ENT_DFU:
bootloader_jump();
return false;
}
}
else if (!record->event.pressed) {
switch (keycode) {
case ENT_SLP:
sleep_mode_enter();
return false;
}
}
return true;
}
;bool process_record_user(uint16_t keycode, keyrecord_t *record) {
char str[16];
if (record->event.pressed) {
switch (keycode) {
case DELBNDS:
delete_bonds();
return false;
case AD_WO_L:
restart_advertising_wo_whitelist();
return false;
case USB_EN:
set_usb_enabled(true);
return false;
break;
case USB_DIS:
set_usb_enabled(false);
return false;
break;
case BLE_EN:
set_ble_enabled(true);
return false;
break;
case BLE_DIS:
set_ble_enabled(false);
return false;
break;
case ADV_ID0:
restart_advertising_id(0);
return false;
case ADV_ID1:
restart_advertising_id(1);
return false;
case ADV_ID2:
restart_advertising_id(2);
return false;
case ADV_ID3:
restart_advertising_id(3);
return false;
case ADV_ID4:
restart_advertising_id(4);
return false;
case DEL_ID0:
delete_bond_id(0);
return false;
case DEL_ID1:
delete_bond_id(1);
return false;
case DEL_ID2:
delete_bond_id(2);
return false;
case DEL_ID3:
delete_bond_id(3);
return false;
case BATT_LV:
sprintf(str, "%4dmV", get_vcc());
send_string(str);
return false;
case ENT_DFU:
bootloader_jump();
return false;
}
}
else if (!record->event.pressed) {
switch (keycode) {
case ENT_SLP:
sleep_mode_enter();
return false;
}
}
return true;
}
;
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の数を書き込む
どちらも同じ数になるように記載します。
さらに、片方の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](https://assets.st-note.com/production/uploads/images/11914411/picture_pc_39bb6431bc3ea10291375b2694a64d60.jpg?width=1200)
■必要な材料
Gateron mechanical keyboard switch
xd75re xd75am xd75 Custom Mechanical Keyboard 75 keys Underglow RGB PCB
いいなと思ったら応援しよう!
![huaaNOTE](https://assets.st-note.com/production/uploads/images/119833669/profile_7de6bdfaf50eefc0d2c892c8f739c0f6.jpg?width=600&crop=1:1,smart)