Rapsberry Pi Picoを使った自作テンキー(Shotgun チェリーパイ)を左手デバイスにするRapsberry Pi Pico
Raspberry Pi Picoを使って、自作のテンキーを作りました。
自作テンキーをカスタマイズすることで、キー数以上のキーの割当が可能です。これにより多彩な操作を簡単に実行できるようになります。
Shotgun チェリーパイとは
Shotgun チェリーパイとははやしたろうさんが設計された自作テンキーです。
Raspberry Pi Pico上にprk firmwareという自作キーボード向けのファームウェアを使用したキーボードです。
ロータリーエンコーダーもつけることが可能で、キー配列は自分でデザインできます。
Raspberry Piは品薄でほとんど手に入りませんが、Picoは入手可能です。
購入先は、自作キーボードで有名な遊舎工房で購入しました。
自作キーボードのメリット
最大のメリットは、カスタマイズできることです。
キー配列のカスタマイズ
通常のキー(u1)、Enterキーに使用する2つ分のキー(u2)、ロータリーエンコーダを搭載して、自由に設定することができます。
ロータリーエンコーダは5つまで設定できます。
キースイッチのカスタマイズ
メカニカルキーボードの醍醐味は、キースイッチの種類を選べることです。
自分の好きな軸を選ぶことができます。軸によって、打ち心地は全然違います。
キーキャップのカスタマイズ
キーキャップによって、見た目が全く変わります。
自作キーボードのデメリット
費用が高くなることです。
自作キーボードはメカニカルキーボードになるので、通常のキーボードよりも高いです。
メカニカルキーボードでも自作のほうが高くなる可能性が高いです。
ただし、デメリットとしては、それくらいしかありません。
作り方
自分に追加で購入する部品は以下のとおりです。
- Raspberry Pi Pico
- キースイッチ(CherryMX互換)
自分で作るキーのデザインによって数が変わります。 - キーキャップ(CherryMX互換)
- Micro-USBケーブル
オプションで以下も可能です
- ロータリーエンコーダ
- コンスルー20ピン
- スタビライザー
U2のキーをつけるときにおすすめです。 - LED(SK6812MINI-E)
キーボードを光らせることができます。
ファームウェア書き込み
Raspberry Pi PicoのBOOTSELボタンを押しながら、USBをパソコンに接続します。
RPI-RP2というUSBメモリとして認識されます。
PRKファームウェアをダンロードして、Raspberry Pi Picoに書き込むと「RPI-RP2」から「PRK Firmware」というドライブに変わります。
「PRK Firmware」には以下の2つのファイルが入っています。
-
keymap.rb
キー配列の定義が書かれたファイルで、Rubyで書かれています。
ロータリーエンコーダの設定をかけるときは、このファイルを変更する必要があります。
Remapを使用しない場合は、このファイルですべてのキー配列を指定することができます。 -
prk-conf.txt
Remapというキー配列を変更するWebアプリを使用することができるようになります。
組み立て
組立方法は、設計者のはやしたろうさんのページが一番わかり易いです。
LED、ダイオード、リセットスイッチ、ソケットをはんだ付けします。
LEDやダイオードの向きに気をつけてはんだ付けしてください。
初めての自作キーボードの作成だったので、3時間くらいかかりました。
キースイッチをつけて、キーキャップをつけると完成です。
キー配列のカスタマイズ
今回は、以下のように2レイヤーを実装しました。
Remapを使えば、コードの変更なしにキー配列を変更することができます。
デフォルトレイヤーとLED操作用は、もともと書かれていた配列です。
今回はネットサーフィン用の配列を用意しました。
デフォルトレイヤー
ネットサーフィン用
LED操作用
ネットサーフィン用の配列は、左タブ、右タブの移動など、ネットサーフィンで使うものを割り当てました。
キーの割当
キーの割当はRemapから設定します。
keymap.rbを編集することで可能ですが、Remapの場合、直感的に設定できるのでより簡単です。
Remapに接続
「START REMPA FOR YOUR KEYBOARD」を選択します。
「+KEYBOARD」を設定します。
キーボードを接続していると、認識してくれます。
「接続」を選択します。
キー割り当て
割り当てたいキーを自由に設定することができます。
CtrlやShiftなどの修飾キーを組み合わせて設定することも可能です。
下の方に表示されている文字をドラッグするして、キーに設定することも可能です。
レイヤーの作り方
Shotgunチェリーパイでは、最初から4つのレイヤーを用意されています。
kdd.add_layerでレイヤーを定義しています。
defaultレイヤーにテンキーが実装されています。
レイヤー1は今回、自分で追加しています。
レイヤー2は定義なしです。
レイヤー3がLEDを操作するレイヤーになっています。
PRKファームウェアでは、Remapでのレイヤーを切替えるキーまでは指定できないので、
keymap.rbに定義する必要があります。
# KEY LAYOUT
kbd.add_layer :default, %i[
KC_EQL KC_KP_SLASH KC_KP_ASTERISK KC_KP_MINUS KC_A KC_B
KC_KP_7 KC_KP_8 KC_KP_9 KC_KP_PLUS KC_C KC_D
KC_KP_4 KC_KP_5 KC_KP_6 VIA_FUNC4 KC_E KC_F
KC_KP_1 KC_KP_2 KC_KP_3 VIA_FUNC1 KC_G KC_H
KC_KP_0 KC_COMMA KC_KP_DOT VIA_FUNC1 KC_I KC_J
]
kbd.add_layer :VIA_LAYER1, %i[
KC_NO KC_NO KC_NO KC_NO KC_NO KC_NO
LGUI_LBRACKET LGUI_T LGUI_RBRACKET KC_NO KC_NO KC_NO
LCTL_LSFT_TAB KC_KP_EQUAL LCTL_TAB KC_NO KC_NO KC_NO
KC_NO LGUI_W KC_NO KC_NO KC_NO KC_NO
KC_KP_PLUS KC_NO KC_NO KC_NO KC_NO KC_NO
]
kbd.add_layer :VIA_LAYER2, %i[
KC_NO KC_NO KC_NO KC_NO KC_NO KC_NO
KC_NO KC_NO KC_NO KC_NO KC_NO KC_NO
KC_NO KC_NO KC_NO KC_NO KC_NO KC_NO
KC_NO KC_NO KC_NO KC_NO KC_NO KC_NO
KC_NO KC_NO KC_NO KC_NO KC_NO KC_NO
]
kbd.add_layer :VIA_LAYER3, %i[
KC_NO RGB_HUI RGB_HUD KC_NO KC_A KC_B
KC_NO RGB_SAI RGB_SAD KC_NO KC_A KC_B
KC_NO RGB_VAI RGB_VAD VIA_FUNC4 KC_A KC_B
KC_NO RGB_SPI RGB_SPD KC_NO KC_A KC_B
KC_NO RGB_MOD RGB_RMOD KC_NO KC_A KC_B
]
# レイヤーの切り替え方法
kbd.define_mode_key :VIA_FUNC1, [ :KC_KP_ENTER, :VIA_LAYER1, 150, 150 ]
kbd.define_mode_key :VIA_FUNC2, [ nil, :VIA_LAYER2, 150, 150 ]
kbd.define_mode_key :VIA_FUNC3, [ nil, :VIA_LAYER3, 150, 150 ]
kbd.define_mode_key :VIA_FUNC4, [ nil, :VIA_LAYER3, 150, 150 ]
レイヤー定義の解説
kbd.define_mode_key :①VIA_FUNC1, [ :②KC_KP_ENTER, :③VIA_LAYER1, 150, 150 ]
各レイヤーの切り替え方法は、kbd.define_mode_keyで定義しています。
①でレイヤーを切り替えるキーを指定します。
②はタップしたときに動作するキーを書きます。
KC_KP_ENTER(テンキーのEnter)となります。
③は対象のキーを入力し続けた場合の挙動です。
つまり、VIA_FUNC1を押している間は、VIA_LAYER1にレイヤーが変わることを意味しています。
ロータリーエンコーダの設定方法
ロータリーエンコーダは最大5つ設定可能です。今回は1つ設定しました。
以下は、ロータリーエンコーダ1の設定方法です。
回転 | 割当キー |
---|---|
時計回り(clockwise) | 方向キーの右(KC_RIGHT) |
反時計回り(counterclockwise) | 方向キーの左(KC_LEFT) |
encoder_1 = RotaryEncoder.new(27, 28) #27,28はPinの場所
encoder_1.clockwise do
kbd.send_key :KC_RIGHT #時計回りのときの入力したいキーを指定する。
end
encoder_1.counterclockwise do
kbd.send_key :KC_LEFT #反時計回りのときの入力したいキーを指定する。
end
kbd.append encoder_1
kdd.send_keyの引数に入力したいキーを設定するだけで、ロータリーエンコーダのキーを設定することができます。
まとめ
Shotgun チェリーパイは、キー配列のカスタマイズも簡単で、自分好みのキーボードに仕上げていくプロセスも楽しいです。
使いながら新たな使い方を自分で考えていくプロセスも楽しいです。
ビルドガイドが丁寧なおかげで、初めての自作キーボード作成でも簡単に作成することができます。
prk firmwareを理解できれば、より自由にカスタマイズできそうです。
Discussion