先日作成した、MachiKania 用のキーバット(6ボタンの小型自作キーボード)をWebブラウザでキーマップを自由に変更できるVial に対応させましたが、今度はRP2040-Zeroにオンボードで搭載されているRGBLEDを光るようにしました。
なぜLEDを光らせるようにしたかというと、Vial対応でレイヤーも4つまで自由に設定できるので、現在どのレイヤーなのかをわかるようにRGBLEDを光らせて色でレイヤーが分かるようにしようという目的です。
ただ光らせるだけなら簡単で、下記を参考に各ファイルを修正すれば良いです。
この例では、ラズパイピコでGP16にRGBLEDを接続していますが、RP2040-Zero のオンボードLEDも内部で GP16 に接続されているので、そのまま使えます。
上記の記事中、 info.json は keyboard.json に読み替えます。
keyboard.json の
"features": {
の最後の行以降に下記(~省略~の次の行以降)を追加します。
LEDは1つしかないので、 led_count は 1です。
keyboard.json
そして、単に光らせるだけなら、keyboard.c に下記を追加すればよいです。
void keyboard_post_init_user(void) {
rgblight_sethsv(127, 255, 100)
}
ですが、ここでの目的はレイヤー毎にLEDの色を変えることなのでこれは追加しないでおきます。
レイヤー毎にLEDの色を変える方法をもう少し調べてみました。
参考になったのは、下記。
QMKの環境構築~レイヤ毎にLEDの光り方を変える #C - Qiita
この記事の中ほどにレイヤー毎にLEDの色を変える例がありますが、LEDのマトリックスを組んでいる例なのでLEDが1つの場合どうなるのかが分かりませんでしたが、AI(copilot) の手助けも借りてレイヤー毎に色を変える設定ができました。
まず、 vial\config.h に下記を追加します。
config.h (追加)
そして、vial\keymap.c は下記のようにしました。(4ボタンの場合の例)
修正・追加が多いので1つ1つは説明しないでファイル全部を掲載。
keymap.c
ポイントだけ説明すると、Vial対応まではレイヤーを定義しなくても自動的に4レイヤー使えるようになっていましたが、LEDの色をレイヤー毎に指定しないといけないので、レイヤーを _1ST _2ND _3RD _4TH という名前で作成。(レイヤー名は _ で始めるのが慣例らしい)
/// LED Setting /// 以降は完全にテンプレ。4レイヤーならレイヤー名だけ変えれば動く。
あ、あと RGBLIGHT_LAYER_SEGMENTS の指定は、HSVで指定して好みの色や明るさに設定することができます。
{0, 1, 0,0,100} // WHITE
の最初の {0, 1 は、1番目のLEDから1個目のLEDという意味で、LED1個しかないので全てこれを設定、後の残りの3つの数字がHSV。
HSVの指定方法は AI(copilot) に質問したら、分かりやすい回答だったのでそのまま貼っておく。

これでファイルの修正は完了。
【2025/08/20追記】
QMKをアップデートしたからか、このままだとコンパイルでエラーが発生したので下記を追加したらうまくいきました。
rules.mk に下記を追加
RGBLIGHT_ENABLE = yes
WS2812_DRIVER = vendor
config.h に下記を追加
#define WS2812_DI_PIN GP16
コンパイル( make <keyboard_name>:vial )して RP2040-Zero に転送して動作確認します。
この例だとどのキーにもレイヤー変更をアサインしていないので、vial (https://get.vial.today/)でどれかのキーに Layers タブにある TO(1) とかを設定してレイヤーを変更するキーをアサインしてLEDの色が変わるのを確認します。
これでレイヤー毎にLEDの色を変更することができました。
よかった、よかった。
