Claw44であそぼ。⑥(LED編)
はじめに
一日で一番手に触れているものはキーボードという思い込みから、不便さを克服することにより得られる快楽を毎日満喫するために小さなキーボードの導入を思い立ち、2022年12月にClaw44の購入を決意。プログラミングと自作キーボードの知識ゼロから始めた自作キーボード素人によるClaw44カスタマイズの奮闘記を綴っていきたいと思います。
LEDとは
LEDとは「Light Emitting Diode」の略称で、いわゆる七色(正確には約1,677万色)に光る半導体のことである。以前紹介したOLEDは「Organic Light Emitting Diode」で、こちらはディスプレイのイメージ。いずれも自作キーボードにおいて、オリジナリティ度を上げて視覚的に楽しむことができるエンターテイメント的要素のスパイス的デバイスであり、LEDは修行僧のテンション爆上げ七色発光体といえる。また、OLEDは一色だけの夜光虫仕様であるの対して、LEDは七色に輝くまさしくレインボー仕様で、真っ暗な部屋の中で発光させるとまるでネズミ王国の電装行進さながらといったところで、修行僧の疲れを癒してくれる夢のデバイスといえよう。この七色発光体の自作キーボードにおける楽しみ方は、per key RGBとしてひとつひとのキーを輝かせる方法と、もうひとつはunderglowとしてキーボードを底面から輝かせる方法の2種類がある。猫山王のClaw44では、七色発行体を上面のサイドにマスキングテープでペタっと貼り付けてsideglowとして活用しており、今回はsideglowとしての活用方法の奮闘記をお届けします。
LEDの楽しみ方
1.LEDテープを購入してキーボードにはんだ付けしよう
LEDテープは自作キーボード会の萬屋的存在の遊舎工房、Amazon、AliExpressで販売されている。なお、Claw44 v3の初期のPCB裏面にLEDテープが搭載できるように端子が準備されていたが、最新のClaw44 v3のPCBではこの端子が省略されている模様。そのため、配線コードを使ってLEDテープとPro Microを繋ぐ必要があるので、LED修行中の失敗によって大切なClaw44が文鎮化するリスクが高いといえます。また、七色発行体と戯れている最中に火災・感電等による事故があった場合でも一切の補償・対応は致しかねます。そのため、七色発行体を使用するためのカスタマイズおよびその使用は自己責任ということをご理解の上でこれ以降の修行をお願いします。
この七色発光体のテープを見ると、+5v、Din、GNDの3つの接続箇所があるのがお分かりいただけると思います。七色発光体をネズミ王国の電装行進のごとく綺羅びやかに輝かせるためには、これら3つの接続箇所を対応するPro MicroのPinに適切に繋げる必要がある。恐怖体験は記憶からかき消されるもので、猫山王も当時の記憶をはっきりと思い出せないが、特にDinの接続先はキーボードによって異なるので初心者である猫山王もClaw44でDinの接続先を解明するのにかなり苦労した記憶がある。Claw44のPCBの配線パターンを凝視し、Pro Micro のPin配列図と長時間にらめっこして、先人達の導きの書を参考にしたもののなかなか解明できなかったが、持ち前の根性と日頃の不便さを克服するための修行で培った不屈の精神力で突然ひらめいたのを覚えている。で、どのPinに接続するかと言うとTX0/D3 Pinが答え。つまり七色発光体とPro Microの接続パターンは下記といえる。なお、Pro MicroのそれぞれのPinがどの位置かはGoogle先生に聞けば、Pin配列の画像を教えてくれるのでそちらで確認をお願いします。
+5v → VCC
Din → TX0/D3
GND → GND
七色発行体を制御する信号の流れはD-in → D-out → D-inの無限ループとなっているので、LEDテープの▲表示板の向きには注意が必要である。参考書籍として猫山王のClaw44のはんだ付けの画像を添付しておきます。
ちなみに、画像の七色発光体テープは自作キーボード界の萬屋の遊舎工房にて購入したもので、Claw44には左右1つづつの合計2つ必要である。Amazonなどで10m超のスーパーロングタイプを購入すれば、七色発光体テープのグリグル巻き仕様のネズミ王国の電装行進の再現も可能ではないかと想像している。やはり電圧不足になっちゃいますかね。
2.LEDに命を吹き込もう
七色発行体とPro Microをはんだ付けで繋いだだけでは、単なるお飾りでネズミ王国の電装行進として全く機能しない。いつものごとく七色発行体に命を吹き込む必要があり、そのために変更が必要なファイルは、keymapsフォルダ下のrules.mkファイル、config.hファイルの2つになる。それぞれのファイルを書き換える方法については、猫山王の設定を参考にひとつひとつ解説していきたいと思います。
3.rules.mkファイルの内容を書き換えよう
keymapsフォルダ下のrules.mkファイルに七色発行体を有効とする召喚呪文を追加します。これで七色発行体がアンダーグローとして機能します。
RGBLIGHT_ENABLE = yes
4.config.hファイルの内容を書き換えよう
keymapsフォルダ下のconfig.hに七色発行体の詳細定義と発光パターンの定義を記載します。つまり、どのような七色発行体がキーボードに搭載されているか、その七色発行体に送信するネズミ王国の電装行進の輝きパターンの呪文になります。いわばネズミ王国の電装行進のプログラムを決める重要な呪文といえるでしょう。以下に猫山王の光の魔術師の呪文と解読できるように簡単な日本語訳も記載しておきます。
/* WS2812B RGB LED */
#ifdef RGBLIGHT_ENABLE
#define RGBLIGHT_LAYERS // レイヤーとの連動機能の有効化
#define RGBLIGHT_MAX_LAYERS 6 // 連動するレイヤー数(最大8)
#define WS2812_DI_PIN D3 // D-inをつなぐTX0のPin名称
#define RGBLED_NUM 12 // 左右合計のNumber of LEDs
#define RGBLIGHT_SPLIT // 分割キーボードであることのお知らせ
#define RGBLED_SPLIT { 6, 6 } // 左右のNumber of LEDs
#define RGBLIGHT_LIMIT_VAL 160 // LEDの最大の明るさ 0-255, 255はまぶしので160としている
/* The LEDs on the slave half go in reverse order 個々のLED番号のお知らせ*/
#define RGBLIGHT_LED_MAP { 0, 1, 2, 3, 4, 5,
11, 10, 9, 8, 7, 6 }
/* 有効化する電装行進プログラム、容量削減のためRAINBOW_MOODとKNIGHTのみ有効化 */
//#define RGBLIGHT_EFFECT_BREATHING
#define RGBLIGHT_EFFECT_RAINBOW_MOOD
//#define RGBLIGHT_EFFECT_RAINBOW_SWIRL
//#define RGBLIGHT_EFFECT_SNAKE
#define RGBLIGHT_EFFECT_KNIGHT
//#define RGBLIGHT_EFFECT_CHRISTMAS
//#define RGBLIGHT_EFFECT_STATIC_GRADIENT
//#define RGBLIGHT_EFFECT_RGB_TEST
//#define RGBLIGHT_EFFECT_ALTERNATING
//#define RGBLIGHT_EFFECT_TWINKLE
#endif
意気揚々と光の魔術師を夢見てせっかく七色発行体を搭載したとしても、Pro Microの場合だとネズミ王国の電装行進のプログラムの全てを#defineで召喚してコンパイルできない問題に必ず遭遇します。これは一般的なPro MicroであるATmega32U4の容量制限はわずか28KBと恐ろしく少ないことが原因で、RBG Lightingのパターンひとつとっても500Bもしくはそれ以上必要とするものもあり、ルンルン気分であれもこれもと加えてしまうとまさかの容量オーバーによるコンパイルエラーになります。何をトッピングできるかは試行錯誤であり、この不便さを克服することにより得られる快楽を求める修行僧としてはこの試行錯誤がLED修行の醍醐味といえるでしょう。タップダンス、マウスキーの通勤快速仕様の呪文を有効にし、OLEDまでも召喚したあげく、レイヤー数6のMAXレイヤー中毒仕様であれば、猫山王のLED修行によるとネズミ王国の電装行進のプログラムは基本的にはひとつのプログラムしかコンパイルが通らないが、RAINBOW_MOODとKNIGHTのゴールデンコンビであれば、ATmega32U4の容量制限ギリギリでコンパイルできることが分かっている。
5.keymap.cファイルの内容を書き換えよう
ネズミ王国の電装行進仕様であれば、rules.mkファイル、config.hファイルを書き換えて、あとはコンパイルしてRemapでRGB系のキーアサインをすれば七色発行体を輝かすことができます。ただ、七色発行体をunderglowとして導入する最大の理由はレイヤーごとに発光する色を変えるという、まさに夢の光の魔術師仕様を実現することではないでしょうか。自作キーボードの初心者である猫山王もこの夢の光の魔術師仕様に憧れて当時は修行に明け暮れていました。この夢の魔術師仕様を実現するために書き換える必要のあるファイルがkeymap.cになります。レイヤーごとに七色発行体の色を変えることができる呪文はOLEDとは異なりそれほど複雑ではない。それではいつものように以下に猫山王の6レイヤーのMAXレイヤー中毒症候群の夢の光の魔術師の呪文と解読できるように簡単な日本語訳も記載しておきます。記載箇所はキーマップの下で良いでしょう。
/* RGBの設定 */
#ifdef RGBLIGHT_ENABLE
//以下、レイヤーごとの色を定義している。ただし、レイヤー10と12はレイヤー固有の色を定義せずネズミ王国の電装行進や好きな色で七色発行体を光らせる
//const rgblight_segment_t PROGMEM rgb_layer_10[] = RGBLIGHT_LAYER_SEGMENTS(
// {0, 12, HSV_RED} // 開始LEDインデックス, 連続する個数, 輝かせる色(ここではプリセットを使用)
//);
const rgblight_segment_t PROGMEM rgb_layer_11[] = RGBLIGHT_LAYER_SEGMENTS(
{0, 12, HSV_MAGENTA}
);
//const rgblight_segment_t PROGMEM rgb_layer_12[] = RGBLIGHT_LAYER_SEGMENTS(
// {0, 12, HSV_GOLD}
//);
const rgblight_segment_t PROGMEM rgb_layer_13[] = RGBLIGHT_LAYER_SEGMENTS(
{0, 12, HSV_CYAN}
);
const rgblight_segment_t PROGMEM rgb_layer_14[] = RGBLIGHT_LAYER_SEGMENTS(
{0, 12, HSV_BLUE}
);
const rgblight_segment_t PROGMEM rgb_layer_15[] = RGBLIGHT_LAYER_SEGMENTS(
{0, 12, HSV_GREEN}
);
//以下、レイヤーごとに色を変える呪文、ただしレイヤー10と12にはレイヤーについてはネズミ王国の電装行進や好きな色とするため、適用しない記載としている
const rgblight_segment_t* const PROGMEM rgb_layers[] = RGBLIGHT_LAYERS_LIST(
// rgb_layer_10,
rgb_layer_11,
// rgb_layer_12,
rgb_layer_13,
rgb_layer_14,
rgb_layer_15 // 最後の行は ,(コンマ)不要
);
void keyboard_post_init_user(void) {
rgblight_layers = rgb_layers;
}
layer_state_t layer_state_set_user(layer_state_t state) {
// rgblight_set_layer_state(0, layer_state_cmp(state, _10));
rgblight_set_layer_state(0, layer_state_cmp(state, _11));
// rgblight_set_layer_state(1, layer_state_cmp(state, _12));
rgblight_set_layer_state(1, layer_state_cmp(state, _13));
rgblight_set_layer_state(2, layer_state_cmp(state, _14));
rgblight_set_layer_state(3, layer_state_cmp(state, _15));
return state;
}
#endif
レイヤーごとに色を変える呪文は様々な種類がありますが、猫山王の仕様はメインレイヤーであるレイヤー10とレイヤー12でRGB Lighting Effectを利用することができ、かつ好きな単色でも輝かすことができる呪文となっている。例えば、レイヤー10ではRainbowに輝き、レイヤー11に移動するとMagentaに輝き、そのままレイヤー13に移動するとCyanに輝き、レイヤー10に戻るとRainbowに逆戻りというレイヤー迷子にならないような初心者憧れの光の魔術師仕様です。ここでの留意点は、レイヤー毎に七色発光体を単色で輝かすことはできるが、レイヤー毎にネズミ王国の電装行進のプログラムを変えて輝かす事はできないようです。この方法をご存知であれば是非教えてください。そのため、猫山王のClaw44ではレイヤー10とレイヤー12は輝きのパターンは自由に変更できますが、同じ輝きパターンになります。レイヤー毎の輝かせる色については、0~255で指定することもできますが、結局単色でしか指定できないので以下のcolor.hファイルを参考にHSV_AZUREやHSV_PURPLEなどで指定することもできます。猫山王の呪文とも見比べていただくとイメージがつくと思います。また、QMK FirmwareのRGBに関するページのリンク先も参考にいかがでしょうか。
#define HSV_AZURE 132, 102, 255
#define HSV_BLACK 0, 0, 0
#define HSV_BLUE 170, 255, 255
#define HSV_CHARTREUSE 64, 255, 255
#define HSV_CORAL 11, 176, 255
#define HSV_CYAN 128, 255, 255
#define HSV_GOLD 36, 255, 255
#define HSV_GOLDENROD 30, 218, 218
#define HSV_GREEN 85, 255, 255
#define HSV_MAGENTA 213, 255, 255
#define HSV_ORANGE 21, 255, 255
#define HSV_PINK 234, 128, 255
#define HSV_PURPLE 191, 255, 255
#define HSV_RED 0, 255, 255
#define HSV_SPRINGGREEN 106, 255, 255
#define HSV_TEAL 128, 255, 128
#define HSV_TURQUOISE 123, 90, 112
#define HSV_WHITE 0, 0, 255
#define HSV_YELLOW 43, 255, 255
#define HSV_OFF HSV_BLACK
6.さあ、コンパイルしよう
ここまでくれば最後はQMK MSYSでのコンパイルです。呪文のコンパイルの成功は、暗黒世界の中で不便さを克服することにより得られる快楽を求める修行僧として極楽浄土に達したことを意味します。ただし、ネズミ王国の電装行進のプログラムの呪文を複数同時に唱えると、容量オーバーによるコンパイルエラーという何とも残念な結果になります。容量不足との試行錯誤の戦いは、呪文を減らして増やしてのコンパイルの嵐となりがちで意識を無にして挑む必要のある修行といえるでしょう。
実際にLEDを利用してみて
七色発行体は、OLED同様に無骨な自作キーボードに視覚的なエンターテイメント要素を加えることができるある種白魔法ともいえる呪文です。また、初心者の憧れであるレイヤーごとに色を変えることができる夢の光の魔術師の仕様の完成形を自由に操ることができるようになれば、不便さを克服することにより得られる快楽を味わうことができるでしょう。ただ、七色発行体は思いの外眩しく、猫山王のClaw44は七色発行体をマスキングテープで覆うという何とも情けない光の魔術師の仕様となっています。とはいえ、七色発行体がネズミ王国の電装行進で輝いているのを見ているだけでテンション爆上がりなので、猫山王のClaw44は何らかのネズミ王国の電装行進プログラムで一日中輝いています。ネズミ王国の電装行進プログラムを多用すると先にも述べたように容量オーバーによるノーコンパイルで八方塞がり即終了になります。自作キーボードの初心者にとっては憧れの七色発行体ではありますが、その活用には使用者のトライアル&エラーによるノーコンパイルのアリ地獄からの脱出という不便さの克服による快楽を満喫できる修業の場が準備されています。今回はレイヤーごとに七色発行体の色を変更させるという呪文についても触れてみました。夢の光の魔術師仕様の実現のための一助となれば幸いです。
自作キーボードは敷居が高いと思われている方にとって、一日で一番手に触れているものはキーボードということで、不便さを克服することにより得られる快楽の世界への入門のための勇気づけとなれば幸いです。
次回
さて次回はRP2040導入の奮闘記をお届けします。ATmega32U4をRP2040に乗せ換えることで容量問題が一気に解決します。今までのATmega32U4の僅少28KBの世界が16MBの世界へと単純に500倍以上の爆裂大容量となります。例えて言うなら太陽系から銀河系へのステップアップにより自作キーボードの世界では無限大の容量を得ることができます。ATmega32U4使用時には、機能と容量の比較衡量と呪文の優先順位から諦めていた呪文や断腸の思いでその使用を諦めていたネズミ王国の電装行進プログラムであっても、RP2040であればその全てを唱えることができるようになります。RP2040は容量問題を全て解決し、無限の宇宙への旅立ちによって不便さを克服することにより得られる快楽のための究極のデバイスであるといえるでしょう。この究極のデバイスを操るためには、RP2040仕様に呪文を書き換える必要があり、そこにはさらなる苦悩が待ち受けています。不便さを克服することにより得られる快楽を求める修業はまだまだ続きます。