この記事は 【RubyKaigi 2023連動イベント】みんなでRubyの知見を共有しよう - Qiita の参加記事です。
はじめに
先日のRubyKaigi 2023でノベルティグッズとして、マイクロパッドキットが配布されました!
最近 ここからはじめる自作キーボード をやり、またキーボードつくりたいなと思っており、ちょうどRubyKaigiでいただいたのでつくってみました。
ビルドガイド通りに進める
いただいたPCBにビルドガイドへのリンクが記載されていました。
詳細な組み立て手順はビルドガイドにあるので省略します。
なお、KeebKaigi 2023でノベルティキーボード製作者の魔王さんがノベルティキーボードについてお話されていましたので、先に見ておくと組み立てが楽しくなる!かもしれません。
(「ミスしないようにビルドガイドをしっかり読みましょう」って話はここだったのかなと考察できて楽しかった)
で、組み立ててできたものがこちらです!
カラフルに光ってかっこいい!
また、各キーはbundle exec
やrails s
などRubyist向けのマクロになっていました!(詳細はkeymap.rb
を参照)
(Twitterで魔王さんからコメントいただきました!嬉しい!)
キーマップをカスタマイズしてみる
せっかくなので、キーマップをカスタムして、ruby
と入力できるようにしてみます。
ビルドガイド通りに進めると、このノベルティキーボードのファームウェアは、Rubyでキーマップを書ける「PRK Firmware」が使われています!
(RubyKaigi 2023の@hasumikin
さんのセッションでも紹介されていました)
なので、すでにあるkeymap.rb
(ビルドガイドでダウンロードしたもの)をもとにカスタムしてみます。
まず、keymap.rb
を読んでみます。
なお、以下のリポジトリでkeymap.rb
は公開されていました。
require "consumer_key"
kbd = Keyboard.new
kbd.init_direct_pins([
3, 4, 6, 29,
2, 1, 7, 0
])
kbd.add_layer :default, %i[
COPY RAILS CONSOLE PASTE
BKSP_LEFT BUNDLE RAKE DEL_RIGHT
]
# (snip)
init_direct_pins
とadd_layer
の部分に注目します。
init_direct_pins
はPRK FirmwareのWikiによると、
Direct-scan
Direct-scan circuit has no diode and one-to-one correspondence between pins and switches.
とのことです。
以下のリポジトリでPCBのデータが公開されていたので、回路図を見てみましょう。
また、Seeed Studio XIAO RP2040の各ピンは以下のとおりです。
(Overview | Seeed Studio Wiki より引用)
これらから、各ピンとキースイッチは1対1でつながっており、実際のキーとピンの対応は以下の図のようになることがわかります。
次に、add_layer
はその名の通り、レイヤーを設定できる様です。
修飾キーが押されていない状態でのレイヤーにはdefault
が使われるため、ここにキーコードを設定すると良さそうだということがわかります。
ということで、「ruby
とpicoruby
が入力できるキーマップ」を考えてみました!
(複数のレイヤーをやりたいと思ったんですが、人生初のLEDのはんだ付けで力尽きそうなのでお許しください)
そして、書いたkeymap.rb
はこちらです!
(RGBの設定も少し触ってみました)
いざ、入力...!
できました!ばんざーい
さいごに
人生初のLEDのはんだ付けで力尽きそうになりましたが、無事LEDを壊すことなく完成できてよかったです。
また、PRK FirmwareをRubyKaigiで知って使ってみたのですが、すっとRubyで書けるのがとてもよかったです。
RubyKaigi 2023 ノベルティキーボード最高に楽しめました!ありがとうございました!
追記
自分用のキーマップをRubyist仕様を残しつつ、つくってみたので載せておきます。