Skip to content

Instantly share code, notes, and snippets.

@b2ox
Created February 9, 2022 11:41
Show Gist options
  • Save b2ox/bb78d468c0b39bc2c7716b2009907a48 to your computer and use it in GitHub Desktop.
Save b2ox/bb78d468c0b39bc2c7716b2009907a48 to your computer and use it in GitHub Desktop.
HHKB Lite2 + Raspberry Pi Pico + KMK Firmware
import board
from kmk.keys import KC
from kmk.kmk_keyboard import KMKKeyboard
from kmk.modules.layers import Layers
from kmk.matrix import DiodeOrientation
from kmk.hid import HIDModes
import kmk.extensions.keymap_extras.keymap_jp
hhkb = KMKKeyboard()
hhkb.modules.append(Layers())
# 17線FFCだけど1つ未使用なので16列
# キーボード表面から見て左から0,1,2,...,F
hhkb.col_pins = (board.GP0, board.GP1, board.GP2, board.GP3, board.GP4, board.GP5, board.GP6, board.GP7, board.GP8, board.GP9, board.GP10, board.GP11, board.GP12, board.GP13, board.GP14, board.GP15)
# 10線FFC全部なので10行
# Picoだと23~25はピンが出てないので(USBとかで使ってる?)ちょっと変則的
# キーボード表面から見て左から0,1,2,...,9
hhkb.row_pins = (board.GP16, board.GP17, board.GP18, board.GP19, board.GP20, board.GP21, board.GP22, board.GP26, board.GP27, board.GP28)
# COLUMNSだとControl+Alt+Fn+BSなどの同時押しがうまく判定できない模様
hhkb.diode_orientation = DiodeOrientation.ROWS
hhkb.debug_enabled = False
# HHKB Lite2 JP 物理配列
# +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
# |45|85|86|88|89|99|9A|8A|8B|8C|8D|9D|9B|71|97|
# +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
# |65 |75|76|78|79|69|6A|7A|7B|7C|7D|6D|6B| 31 |
# +----+--+--+--+--+--+--+--+--+--+--+--+--+ +
# | 94 |55|56|58|59|49|4A|5A|5B|5C|5D|4D|3D| |
# +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
# | 63 |35|36|38|39|29|2A|3A|3B|3C|2D|2B| 13 |
# +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
# |00|42|95|25| 21 |4C|2C|22|00|
# +--+--+--+--+--+--+--+--+--+--+--+ +--+
# |0F|
# +--+--+--+
# |8E|8F|7F|
# +--+--+--+
# Fnキー[00]は回路的に左右の区別なし
hhkb.keymap = [
[ # 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E, F
# 0
KC.MO(1), None, None, None, None, None, None, None, None, None, None, None, None, None, None, KC.UP,
# 1
None, None, None, KC.RSFT, None, None, None, None, None, None, None, None, None, None, None, None,
# 2
None, KC.SPC, KC.RALT, None, None, KC.LGUI, None, None, None, KC.B, KC.N, KC.BSLS, KC.KANA, KC.SLSH, None, None,
# 3
None, KC.ENT, None, None, None, KC.Z, KC.X, None, KC.C, KC.V, KC.M, KC.COMM, KC.DOT, KC.RBRC, None, None,
# 4
None, None, KC.LALT, None, None, KC.ESC, None, None, None, KC.G, KC.H, None, KC.HENK, KC.COLN, None, None,
# 5
None, None, None, None, None, KC.A, KC.S, None, KC.D, KC.F, KC.J, KC.K, KC.L, KC.SCLN, None, None,
# 6
None, None, None, KC.LSFT, None, KC.TAB, None, None, None, KC.T, KC.Y, KC.LBRC, None, KC.AT, None, None,
# 7
None, KC.JYEN, None, None, None, KC.Q, KC.W, None, KC.E, KC.R, KC.U, KC.I, KC.O, KC.P, None, KC.RGHT,
# 8
None, None, None, None, None, KC.N1, KC.N2, None, KC.N3, KC.N4, KC.N7, KC.N8, KC.N9, KC.N0, KC.LEFT, KC.DOWN,
# 9
None, None, None, None, KC.LCTL, KC.ZKHK, None, KC.BSPC, None, KC.N5, KC.N6, KC.CIRC, None, KC.MINS, None, None,
],
# Fnキーを押しているときの配列
# とりあえず最上段とカーソルだけ設定
[ # 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E, F
# 0
None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, KC.PGUP,
# 1
None, None, None, KC.TRNS, None, None, None, None, None, None, None, None, None, None, None, None,
# 2
None, KC.TRNS, KC.TRNS, None, None, KC.TRNS, None, None, None, KC.TRNS, KC.TRNS, KC.TRNS, KC.TRNS, KC.TRNS, None, None,
# 3
None, KC.TRNS, None, None, None, KC.TRNS, KC.TRNS, None, KC.TRNS, KC.TRNS, KC.TRNS, KC.TRNS, KC.TRNS, KC.TRNS, None, None,
# 4
None, None, KC.TRNS, None, None, KC.TRNS, None, None, None, KC.TRNS, KC.TRNS, None, KC.TRNS, KC.TRNS, None, None,
# 5
None, None, None, None, None, KC.TRNS, KC.TRNS, None, KC.TRNS, KC.TRNS, KC.TRNS, KC.TRNS, KC.TRNS, KC.TRNS, None, None,
# 6
None, None, None, KC.TRNS, None, KC.CAPS, None, None, None, KC.TRNS, KC.TRNS, KC.TRNS, None, KC.TRNS, None, None,
# 7
None, KC.INS, None, None, None, KC.TRNS, KC.TRNS, None, KC.TRNS, KC.TRNS, KC.TRNS, KC.TRNS, KC.TRNS, KC.TRNS, None, KC.END,
# 8
None, None, None, None, None, KC.F1, KC.F2, None, KC.F3, KC.F4, KC.F7, KC.F8, KC.F9, KC.F10, KC.HOME, KC.PGDN,
# 9
None, None, None, None, KC.TRNS, KC.TRNS, None, KC.DEL, None, KC.F5, KC.F6, KC.F12, None, KC.F11, None, None,
]
]
if __name__ == '__main__':
hhkb.go(hid_type=HIDModes.USB) #Wired USB enable
@b2ox
Copy link
Author

b2ox commented Feb 9, 2022

HHKB Lite2日本語配列の基板の代わりにRaspberry Pi PicoをつないでKMK Firmwareで動くようにする改造をやってみた。

@b2ox
Copy link
Author

b2ox commented Feb 9, 2022

PS/2コネクタ版とUSBコネクタ版でマトリクスの線数が違う模様。上記のはPS/2コネクタ版です。
USBコネクタ版だと14列8行のようです。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment