rp2040で作る分割キーボード
- 46キー
- 分割
- カラムスタッガード
- ロータリーエンコーダ
- 狭ピッチ(16.5mm)
- 小型(片手13cmx9cm)
- rp2040
- 3Dプリントケース
- 3Dプリント親指キーキャップ
Raspberry Pi Pico が大きく自作キーボードで使いにくいため、同等のボードを作成した。
とりあえず名前は安直にRPPslimとした。
@74thさんの https://74th.booth.pm/items/3929664 が大変参考になった。
- 30個のGPIO (Raspberry Pi Picoは23個、ProMicroは18個)
- USB-C
- キースイッチより狭い13.3x50mm (Raspberry Pi Picoは21x51mm)
- GPIOが余分な場合、カットして13.3x30mmまで小さくして使用できる。
- 上の写真の左は33mmでカットしている。この状態で17個GPIOを使用できる。
- ただし、GNDの数が少なく、両面実装で分厚く(5mm)、おそらく信頼性が低い。
普通rp2040を使用する自作キーボードは、キーボード本体にrp2040をそのまま実装する場合が多い。
このsssではrp2040を別基板とし、キーボードに対して垂直に配置することでキーボードのサイズを小さくしている。
また、別基板とすることで、別のキーボードを作る際にも使いまわせる、rp2040の部分に不具合があっても簡単に置き換えられる、ようにした。
アリエクで売っているEVQWGD001という水平のロータリーエンコーダを使用。
boothに転がしている親指キーキャップの高さを少し高くしたものを使用。
Talpさんで売っている0.8Uのキーキャップ。
大体いつもこれを使っている。
handwire予定だったが基板も作ることにした。choc対応をやめたら基板がすっきりして作りやすかった。
tinygoとtinygo-keyboardを使用している。
Linuxはディストリビューションごとに方法があるので、https://tinygo.org/getting-started/install/linux/を参照。
Macはhomebrewで入る模様。未確認。https://tinygo.org/getting-started/install/macos/
windowsの場合、https://tinygo.org/getting-started/install/windows/にある通り、
scoop経由でコンパイラをインストールするのが良い。
scoopはpowershellで下記のようにインストールできる。
Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser
Invoke-RestMethod -Uri https://get.scoop.sh | Invoke-Expression後は下記のコマンドで、
scoop install go
scoop install tinygo
scoop install makeでコンパイラとmakeをインストールし、
cd src
makeでコンパイルできる。
makefileに書いているため、
make flash
でビルドしつつ書き込むことができる。
windowsのwslでは書き込めないので注意。
powershellやmsysからも書き込める。
BOOTボタンを押しながら抜き差しする必要はない。
goのソースコードに定義するとgofmtでフォーマットされて整列した状態を保てないため、
hjson形式で記述し、それをビルド前に解釈してキーマップを返す関数を自動生成するようにしている。
<./src/script/prebuild/prebuild.go>にビルド前に実行されるコードがある。
- キーマップ内のキーコードはhttps://github.com/sago35/tinygo-keyboard/tree/main/keycodesにあるものを使用する。
langに定義した言語を表す文字列がそのままpackage名として使用される。まあ現状jpしかないけれども。- 短縮表現を
defineに定義できるようにした。 layoutにはレイヤーごとにキーコードを記載する。- これは単純に、
[][]stringとして読み込まれ、,と\n区切りの単純な[][][]stringに解釈される。
- これは単純に、
# キーマップで使用する言語
lang: jp
# キーマップで使用するキーコードの短縮形定義
define: {
LSFT: KeyLeftShift
LCTL: KeyLeftCtrl
LALT: KeyLeftAlt
}
# キーマップ
# レイヤーごとに記述する。
layout: [
[ # layer 0
KeyEsc, Key1, Key2, Key3, Key4, Key5, Key6, Key7, Key8, Key9, Key0, KeyMinus, KeyHat, KeyBackslash,
KeyTab, KeyQ, KeyW, KeyE, KeyR, KeyT, KeyY, KeyU, KeyI, KeyO, KeyP, KeyAt, KeyLeftBrace, KeyBackspace,
LCTL, KeyA, KeyS, KeyD, KeyF, KeyG, KeyH, KeyJ, KeyK, KeyL, KeySemicolon,KeyColon, KeyRightBrace, KeyEnter,
LSFT, KeyZ, KeyX, KeyC, KeyV, KeyB, KeyN, KeyM, KeyComma, KeyPeriod, KeySlash, KeyBackslash2,KeyUp, KeyRightShift,
KeyMod1, KeyHankaku, KeyWindows, LALT, KeyMuhenkan, KeySpace, KeySpace, KeyHenkan, KeyHiragana, KeyLeftAlt, KeyMod1, KeyLeft, KeyDown, KeyRight,
]




