見出し画像

Claw44であそぼ。⑩(Vial/RGB Matrix編)

はじめに

一日で一番手に触れているものはキーボードという思い込みから、不便さを克服することにより得られる快楽を毎日満喫するために小さなキーボードの導入を思い立ち、2022年12月にClaw44の購入を決意。プログラミングと自作キーボードの知識ゼロから始めた自作キーボード素人によるClaw44カスタマイズの奮闘記を綴っていきたいと思います。

Vialのlightingとは

猫山王はVial教団の熱狂的な信者であり、Vial友の会の会員としてVialの普及に尽力していることはご存知のことであろう。Claw44にVialを導入して以来光の魔術師としての修行を続け、Vialでのlightingの楽しみ方の知見がある程度溜まってきたので修行の成果をまとめてみたいと思う。公式ページにもある通りVialではキーボードを発行体として操るための3つのオプションが用意されている。

① RGB Matrix/VialRGB 
→ いわゆるRGB Matrixで、Per key RGBでキーを押した際にグワッと広がったりできるめちゃめちゃかっこいいアレである
② RGB Lighting
→ RGB Matrixほど複雑ではないものの、キーボードを七色発行体として操るアレである
③ Backlight
→ 単色のバックライトを操るアレである。発行体が七色化しRGB LightingやRGB Matrixが比較的簡単に利用できるこのご時世ではあまり活躍が期待できないアレである

単色のバックライトについては、このご時世あまり需要がないであろうという勝手な妄想からくる猫山王の完全な修行不足によりパスすることとする。そのため、今回は① RGB Matrix/VialRGB と② RGB Lightingに絞って解説していく。なお、今回の奮闘記はVialでの呪文の更新を前提としており、LEDの搭載とVial対応の修業は済ませておく必要がある。また、VialRGBはVial友の会における光の魔術師としての絶対王への道しるべでもあるためRP2040化による無限の大容量の獲得の事前修行も必須である。それぞれの修行については、「Claw44であそぼ。⑥(LED編)」「Claw44であそぼ。⑧(Vial編)」「Claw44であそぼ。⑦(RP2040編)」を参照されたし。
また、迷子になったら公式サイトを合言葉に、以下の公式サイトの該当ページを熟読することをお勧めする。

ちなみにRGB Matrixの発光パターンのE-learingも紹介しておく。こちらは各パターンのインデックスもついていて、猫山王もお好みのパターンを探す際に大いに活用させていただいている。


VialでのRGBの楽しみ方

1.rules.mkファイルの内容を書き換えよう
keymaps/vialフォルダ下のrules.mkファイルにキーボードを七色発行体としてVialRGBで操るのか、RGB Lightingで操るのか、それぞれの場合に分けて以下の対応が必要である。

① RGB Matrix/VialRGB 
VIALRGB_ENABLE = yes

② RGB Lighting
何もしなくてOK

2.vial.jsonファイルの内容を書き換えよう
keymaps/vialフォルダ下のvial.jsonファイルに、それぞれの場合に分けて以下の対応が必要である。

① RGB Matrix/VialRGB 
"lighting": "vialrgb"

② RGB Lighting
lighting": "qmk_rgblight"

VialRGB の場合のvial.jsonファイルの更新イメージを記載しておくので、各自の修行にご活用ください。

{
"lighting": "vialrgb",
"matrix": {"rows": 10, "cols": 6},
"layouts": {
"keymap": [
[
{
・・・

3.info.jsonファイルの内容を書き換えよう
キーボードフォルダ下のinfo.jsonファイルに、それぞれの場合に分けて対応が必要である。また、今までrules.mkファイルやconfig.hファイルに記載していた呪文についてもinfo.jsonファイルへも引っ越しさせている。この辺りは、「Claw44であそぼ。⑥(LED編)」「Claw44であそぼ。⑧(Vial編)」「Claw44であそぼ。⑦(RP2040編)」の各修羅の国での修行のrules.mkファイルやconfig.hファイルの呪文の記載例とも見比べていただきたい。

① RGB Matrix/VialRGB 
・"features"に"rgb_matrix": trueを追加。これについては、rules.mkファイルにRGB_MATRIX_ENABLE = yesと記載してもOK。

"features": {
・・・
"rgb_matrix": true,
・・・
},

・ LED ドライバーのWS2812のドライバーとpin番号の追加。WS2812のドライバーはrules.mkに、pin番号はconfig.hに記載してもOK。

"ws2812": {
    "driver": "vendor",
    "pin": "GP0"
},

・RGB Matrixのアニメーション、LEDドライバー、LED Matrixのレイアウト、最大輝度、分割キーボードのLEDの左右の個数の情報の追加。アニメーションについては、RGB Lightingのネズミ王国の電装行進プログラムを遥かにしのぐプログラムが用意されている。事前のRP2040化の修行により無限の大容量を獲得しているので、光の魔術師の絶対王を目指す修行僧としてはとりあえず全部盛り以外の選択肢はないであろう。LED Matrixのレイアウトについては、"flags": 4とすることで単色でのお仕事を基本とするインジケーター(indicatorで使用する場合は"flags": 2)ではなく、光の魔術師のしもべとしてアニメーションに合わせて自由自在に発光させることが可能となる。ただし、修行僧の意図した通りに発光するかは順位付けのナンバリングが重要であり、この順位付けこそがなかなか骨の折れる修行でもある。猫山王のClaw44では、一番上の列のキーを押したときに反応するように、[0, 0]~[0, 5]、[5, 0]~[5, 5]のキーにPer key RGBが搭載されていると仮想するとともに、RGB Matrixのアニメーションを試行錯誤した結果、LEDの位置の縦軸(y軸)としては真ん中より上に搭載されていると仮想配置としている。[0, 0]~[0, 5]がどのキーにアサインされているかは、info.jsonファイル内の"layout"の記載と見比べながら妄想を膨らますと良いであろう。猫山王のClaw44の仕様で研究した結果、左右それぞれ上から順番にPro Microに近い側から0, 1, 2, 3, 4, 5と順位付けがなされている気がした。LEDの順位付けや仮想配置は独創性を発揮できる修行の場でもあるので、修行の際にはドツボにはまって時間があっという間に溶けていくことであろう。なお、"flags": 4でもkeymap.cファイル内の呪文で色を指定することで、後述するレイヤーごとに単色でLEDを発光させることが可能である。

"rgb_matrix": {
"animations": {
"alphas_mods": true,
"gradient_up_down": true,
"gradient_left_right": true,
"breathing": true,
"band_sat": true,
"band_val": true,
"band_pinwheel_sat": true,
"band_pinwheel_val": true,
"band_spiral_sat": true,
"band_spiral_val": true,
"cycle_all": true,
"cycle_left_right": true,
"cycle_up_down": true,
"rainbow_moving_chevron": true,
"cycle_out_in": true,
"cycle_out_in_dual": true,
"cycle_pinwheel": true,
"cycle_spiral": true,
"dual_beacon": true,
"rainbow_beacon": true,
"rainbow_pinwheels": true,
"raindrops": true,
"jellybean_raindrops": true,
"hue_breathing": true,
"hue_pendulum": true,
"hue_wave": true,
"pixel_fractal": true,
"pixel_flow": true,
"pixel_rain": true,
"typing_heatmap": true,
"digital_rain": true,
"solid_reactive_simple": true,
"solid_reactive": true,
"solid_reactive_wide": true,
"solid_reactive_multiwide": true,
"solid_reactive_cross": true,
"solid_reactive_multicross": true,
"solid_reactive_nexus": true,
"solid_reactive_multinexus": true,
"splash": true,
"multisplash": true,
"solid_splash": true,
"solid_multisplash": true
},
"driver": "ws2812",
"layout": [
{"matrix": [0, 5], "x": 85, "y": 14, "flags": 4},
{"matrix": [0, 4], "x": 68, "y": 14, "flags": 4},
{"matrix": [0, 3], "x": 50, "y": 14, "flags": 4},
{"matrix": [0, 2], "x": 33, "y": 14, "flags": 4},
{"matrix": [0, 1], "x": 16, "y": 14, "flags": 4},
{"matrix": [0, 0], "x": 0, "y": 14, "flags": 4},
{"matrix": [5, 5], "x": 139, "y": 14, "flags": 4},
{"matrix": [5, 4], "x": 156, "y": 14, "flags": 4},
{"matrix": [5, 3], "x": 174, "y": 14, "flags": 4},
{"matrix": [5, 2], "x": 191, "y": 14, "flags": 4},
{"matrix": [5, 1], "x": 208, "y": 14, "flags": 4},
{"matrix": [5, 0], "x": 224, "y": 14, "flags": 4} ],
"max_brightness": 160,
"split_count": [6, 6] },

② RGB Lighting
・"features"に"rgblight": trueを追加。rules.mkファイルにRGBLIGHT_ENABLE = yesと記載してもOK。

"features": {
・・・
"rgblight": true,
・・・
},

・ LED ドライバーのWS2812のドライバーとpin番号の追加。WS2812のドライバーはrules.mkに、pin番号はconfig.hに記載してもOK。

"ws2812": {
    "driver": "vendor",
    "pin": "GP0"
},

・LEDの総数、RGBのアニメーション、レイヤーごとに色を変える機能の有効化とレイヤー数、LEDのレイアウト、最大輝度、分割キーボードのLEDの左右の個数の情報の追加。ちなみにRGB Lightingの場合、LEDドライバーのデフォルト設定はWS2812なのであえて"driver": "ws2812",を記載する必要はないが、この辺りは各修行僧の呪文の記載ポリシーなのでご自由にといったところであろうか。また、事前のRP2040化の修行により無限の大容量を獲得しているので、とりあえずネズミ王国の電装行進プログラムの全部盛り以外の選択肢はないであろう。これらの情報はconfig.hでも記載することができ、config.hでの記載方法については、「Claw44であそぼ。⑥(LED編)」「Claw44であそぼ。⑦(RP2040編)」を参照されたし。

"rgblight": {
    "led_count": 12,
    "animations": {
        "breathing": true,
        "rainbow_mood": true,
        "rainbow_swirl": true,
        "snake": true,
        "knight": true,
        "christmas": true,
        "static_gradient": true,
        "rgb_test": true,
        "alternating": true,
        "twinkle": true
    },
    "layers":{
        "enabled": true,
        "max": 21,
    },
    "led_map": [0, 1, 2, 3, 4, 5, 11, 10, 9, 8, 7, 6],
    "max_brightness": 160,
    "split": true,
    "split_count": [6, 6]
},

ここに猫山王のClaw44のinfo.jsonを添付しておくので、Claw44をお使いの修行僧の方は修行の参考にされたし。


4.config.hファイルの内容を書き換えよう
keymaps/vialフォルダ下のconfig.hファイルにLED関連の呪文で、info.jsonに移植しきれなかった呪文をそれぞれの場合に分けて以下の対応が必要である。もうちょっと頑張ればinfo.jsonに移植できるかもしれないが、QMKの公式サイトの情報と猫山王のへっぽこ知識ではconfig.hの居残り組としていくつか残ってしまった。まだ移植可能な呪文をご存知の修行僧の方がいらっしゃれば是非教えてください。

① RGB Matrix/VialRGB 
#ifdef RGB_MATRIX_ENABLE
#define SPLIT_LAYER_STATE_ENABLE
#define RGBLIGHT_LAYERS // レイヤーとの連動機能の有効化
#define RGBLIGHT_MAX_LAYERS 21 // 連動するレイヤー数(最大32)
#define WS2812_PIO_USE_PIO1 // RP2040用に追加
#define RGB_MATRIX_FRAMEBUFFER_EFFECTS
#define RGB_MATRIX_KEYPRESSES
#endif

② RGB Lighting
#ifdef RGBLIGHT_ENABLE
#define SPLIT_LAYER_STATE_ENABLE
#define WS2812_PIO_USE_PIO1 // RP2040用に追加
#endif

5.keymap.cファイルの内容を書き換えよう
キーボードを七色発行体として輝かすだけであれば、あとはコンパイルしてVialでRGB系のキーアサインをすれば事足りる。ただ、七色発行体を導入する醍醐味はレイヤーごとに発光する色を変えるということである。レイヤーごとに七色発行体の色を変えることができる呪文はそれほど複雑ではなく、Vial友の会の光の魔術師の絶対王を目指す修行僧にとっても必須の対応といえよう。そのためにはkeymaps/vialフォルダ下のkeymap.cファイルに呪文を追加する必要がるが、以下に猫山王のレイヤー中毒症候群の呪文を記載しておく。記載箇所はキーマップの下で良いであろう。

① RGB Matrix/VialRGB 
猫山王のこだわりポイントとしては、重度のMAXレイヤー中毒症候群の21レイヤーの変態仕様で、各レイヤーごとのアニメーションの設定(例えば、RGB_MATRIX_SOLID_COLOR、RGB_MATRIX_HUE_BREATHING、RGB_MATRIX_SOLID_REACTIVE)と、色についてもそれぞれのレイヤーで個別に設定している。猫山王のClaw44は、数字キー、記号キー、Fnキーを各レイヤーの一番上の列に配置しているので、これらのレイヤーではアニメーションとしてRGB_MATRIX_SOLID_REACTIVEを設定することで、レイヤー固有の色に加えて、数字キー、記号キー、Fnキーをぽちっと押すと、押した箇所の仮想配列のLEDの色が変わるという何とも奥ゆかしいテンションMAX仕様にしている。なお、レイヤー_00とレイヤー_07では、Vial友の会の光の魔術師の絶対王の修業の場として、お気に入りのアニメーションを好きに選べるようにしている。最後の方の呪文の default: rgb_matrix_reload_from_eeprom(); を記載しておかないと、MOキーを離してデフォルトレイヤーに戻った時にレイヤーの色がデフォルトレイヤーに戻らないという残念仕様になってしまうので留意が必要である。

#ifdef RGB_MATRIX_ENABLE
layer_state_t layer_state_set_user(layer_state_t state){
uint8_t layer = biton32(state);
switch (layer){
// case _00:
// rgb_matrix_mode_noeeprom(RGB_MATRIX_SOLID_COLOR);
// rgb_matrix_sethsv_noeeprom(HSV_RED);
// break;
case _01:
rgb_matrix_mode_noeeprom(RGB_MATRIX_HUE_BREATHING);
rgb_matrix_sethsv_noeeprom(HSV_MAGENTA);
break;
case _02:
rgb_matrix_mode_noeeprom(RGB_MATRIX_HUE_BREATHING);
rgb_matrix_sethsv_noeeprom(HSV_GOLD);
break;
case _03:
rgb_matrix_mode_noeeprom(RGB_MATRIX_SOLID_REACTIVE);
rgb_matrix_sethsv_noeeprom(HSV_CYAN);
break;
case _04:
rgb_matrix_mode_noeeprom(RGB_MATRIX_SOLID_REACTIVE);
rgb_matrix_sethsv_noeeprom(HSV_BLUE);
break;
case _05:
rgb_matrix_mode_noeeprom(RGB_MATRIX_SOLID_REACTIVE);
rgb_matrix_sethsv_noeeprom(HSV_GREEN);
break;
case _06:
rgb_matrix_mode_noeeprom(RGB_MATRIX_SOLID_COLOR);
rgb_matrix_sethsv_noeeprom(HSV_ORANGE);
break;
// case _07:
// rgb_matrix_mode_noeeprom(RGB_MATRIX_SOLID_COLOR);
// rgb_matrix_sethsv_noeeprom(HSV_SPRINGGREEN);
// break;
case _08:
rgb_matrix_mode_noeeprom(RGB_MATRIX_SOLID_REACTIVE);
rgb_matrix_sethsv_noeeprom(HSV_AZURE);
break;
case _09:
rgb_matrix_mode_noeeprom(RGB_MATRIX_SOLID_REACTIVE);
rgb_matrix_sethsv_noeeprom(HSV_CHARTREUSE);
break;
case _10:
rgb_matrix_mode_noeeprom(RGB_MATRIX_SOLID_COLOR);
rgb_matrix_sethsv_noeeprom(HSV_CORAL);
break;
case _11:
rgb_matrix_mode_noeeprom(RGB_MATRIX_SOLID_COLOR);
rgb_matrix_sethsv_noeeprom(HSV_GOLDENROD);
break;
case _12:
rgb_matrix_mode_noeeprom(RGB_MATRIX_SOLID_COLOR);
rgb_matrix_sethsv_noeeprom(HSV_PINK);
break;
case _13:
rgb_matrix_mode_noeeprom(RGB_MATRIX_SOLID_COLOR);
rgb_matrix_sethsv_noeeprom(HSV_PURPLE);
break;
case _14:
rgb_matrix_mode_noeeprom(RGB_MATRIX_SOLID_COLOR);
rgb_matrix_sethsv_noeeprom(HSV_SPRINGGREEN);
break;
case _15:
rgb_matrix_mode_noeeprom(RGB_MATRIX_SOLID_COLOR);
rgb_matrix_sethsv_noeeprom(HSV_TEAL);
break;
case _16:
rgb_matrix_mode_noeeprom(RGB_MATRIX_SOLID_COLOR);
rgb_matrix_sethsv_noeeprom(HSV_TURQUOISE);
break;
case _17:
rgb_matrix_mode_noeeprom(RGB_MATRIX_SOLID_COLOR);
rgb_matrix_sethsv_noeeprom(HSV_WHITE);
break;
case _18:
rgb_matrix_mode_noeeprom(RGB_MATRIX_SOLID_COLOR);
rgb_matrix_sethsv_noeeprom(HSV_YELLOW);
break;
case _19:
rgb_matrix_mode_noeeprom(RGB_MATRIX_SOLID_COLOR);
rgb_matrix_sethsv_noeeprom(HSV_ORANGE);
break;
case _20:
rgb_matrix_mode_noeeprom(RGB_MATRIX_SOLID_COLOR);
rgb_matrix_sethsv_noeeprom(HSV_RED);
break;
default:
rgb_matrix_reload_from_eeprom();
}
return state;
}
#endif

② RGB Lighting
RGB Lightingの場合は「Claw44であそぼ。⑥(LED編)」を参考にされたし。重度のMAXレイヤー中毒症候群の変態仕様を目指すのであれば、必要に応じて呪文を書き換えることをお勧めする。

6.さあ、コンパイルしよう
ここまでくれば最後はQMK MSYSでのコンパイル。呪文のコンパイルの成功は、暗黒世界の中で不便さを克服することにより得られる快楽を求めるVial友の会の修行僧として夢のキーマップ変更ツールであるVialでRGBを存分に楽しむことができる。Vial友の会のコンパイルのお作法についても従来のコマンドとは異なり、ここにVial友の会の会員のみが使用を許されたコンパイル用のコマンドを記載しておく。ここで、[keyboard_name]はVialのソースコードが格納されている任意のフォルダー名で、Claw44であればdailycraft/claw44が考えられる。

cd vial-qmk
make [keyboard_name]:vial 

実際にVialでRGBを利用してみて

VialでRGBを利用してというよりかは、RGB Matrixを利用してという方が正しい気がする。これまでRGB Lightingのネズミ王国の電装行進プログラム(10パターン)で光の魔術師仕様をうたっていたものの、RGB Matrixには実に40以上もの発光パターンがあり、さらにはレイヤーごとにアニメーションが設定できたり、個々のLEDごとに発光パターンを制御できたりとRGB Lightingを遥かに凌駕する超スーパーサイヤ人ともいえるリアル光の絶対王仕様であることが分かった。それゆえRGB Lightingが光の魔術師というのは勘違いで光の道化師がちょうど良いのではないかとも思えてきた。自作キーボードの世界恐るべし。RGB Matrixであれば、北斗の拳に出てくる帝都の総督であるジャコウをも満足させることができるに足る十分な光を放つことができるはずである。
猫山王のClaw44はLEDが左右6個づつの計12個とよちよち歩きの子猫ちゃん仕様であるが、RGB Matrixの操り人形となってからはレイヤーごとにアニメーションを設定してRGB Lightingでは決して実現できなかった発光パターンの光の快楽を満喫している。そのためRGB Matrixの光の快楽を一度でも味わうと、決してRGB Lightingに戻ることができない完全な一方通行の修羅の国での修行である。Claw44はその構造上、Per key RGBでの武装は困難を極める修行であるため猫山王のClaw44愛をもってしても成しえないであろう。とはいえ、今回のRGB Matrixの修業を通じて、プログラミング知識ゼロの初心者が理解できる基本的な部分は習得できたと信じているので、今後はClaw44でLEDの個数を増やしたり、Per key RGB対応の自作キーボードを手に入れることでさらなる光の快楽の高みを目指して精進していきたい。
さて、VialでRGB LightingとRGB Matrixのそれぞれを操って気づいたことは、RGB LightingはQMKのデフォルトのネズミ王国の電装行進プログラムの10パターンに加えて隠しパターンがあるように思えた。猫山王のように全部盛りを指定して、RGB Mode +/- のキーを連打するとTwinkleの次に謎のパターンで発光していた記憶があり、猫山王はこの謎のパターンを好んで選択していた。Twinkleの一種なのか別のパターンなのか、すでにRGB Matrixにどっぷり浸かってしまっていて再現する気にもなれない。また、VialはGUI上のLightingタブで発光パターン・色・輝度・スピードの設定が視覚的に簡単に変更できる。これは、40以上もの発光パターンを有するRGB Matrixの場合は、お好みの光の快楽を探してキーを連打するといったい今はどのパターンで発光しているのか、またお好みの光の快楽に到達するにはあと何回連打する必要があるのか、そもそも過ぎてしまったのかというRGB初心者あるあるの迷子の迷子の子猫ちゃんには一目瞭然で設定が分かる親切設計であるといえる。ちなみに、RGB Matrix界におけるよちよち歩きの子猫ちゃんの猫山王のお好みの光の快楽はRaindropsである。

今回はVialでのRGB Martix対応についてinfo.jsonの記載を含め奮闘記を綴ってみた。Vial特有の呪文を除けばQMK FirmwareでのRGB Martixにも対応しているので、光の魔術師友の会の絶対王を夢見る修行僧にとって一助となれば幸いです。
自作キーボードは敷居が高いと思われている方にとって、一日で一番手に触れているものはキーボードということで、不便さを克服することにより得られる快楽の世界への入門のための勇気づけとなれば幸いです。

この記事が気に入ったらサポートをしてみませんか?