Claw44であそぼ。⑦(RP2040編)
はじめに
一日で一番手に触れているものはキーボードという思い込みから、不便さを克服することにより得られる快楽を毎日満喫するために小さなキーボードの導入を思い立ち、2022年12月にClaw44の購入を決意。プログラミングと自作キーボードの知識ゼロから始めた自作キーボード素人によるClaw44カスタマイズの奮闘記を綴っていきたいと思います。
RP2040とは
RP2040とは、MCU「Micro Controller Unit」の一種でマイクロプロセッサをベースとした制御装置のひとつである。自作キーボードの世界でよく利用されているPro MicroはMCUとしてATmega32U4を搭載している。今回の奮闘記はMCUをATmega32U4からRP2040に変更することで、不便さを克服することにより得られる快楽を満喫しようというものである。RP2040化によって得られる容量爆増により、容量オーバーエラーのノーコンパイルのアリ地獄からの脱出を手に入れることができる。ATmega32U4のプログラム領域は32KBで、そのうちブートローダー領域として4KB必要なので、実際にFirmwareとして使用可能な領域は28KB(28,672バイト)と外付けハードディスクがテラテラのご時世には僅少領域であるといえよう。例えば、大人気のTap Danceを有効にしようものならそれだけで約2,000バイトの消費、マウスキーの有効化で約1,000バイトの消費、レイヤーを増やしたりOLEDやLEDの搭載によって湯水のごとく容量を消費してしまい、機能モリモリご機嫌仕様のFirmwareをコンパイルしようものなら即容量オーバーエラーのノーコンパイル劇場となる。まさに天国から地獄に突き落とされた感覚で、QMK MSYSの真っ黒い画面で赤字のエラーを目の当たりにして、頭真っ白お先真っ暗となった修行僧も数多くいることであろう。猫山王もそんな修行僧のひとりで、ここにノーコンパイルのアリ地獄から脱出できる究極のデバイスがRP2040といえる。RP2040を搭載したPro Microも様々な種類があり、容量も2MBや猫山王の使っている16MBもの超大な容量を搭載したものまである。2MBであってもATmega32U4の50倍以上の巨大容量を備えているので、自作キーボードのFirmwareの容量という点では無限大の容量を手に入れらるといえよう。
RP2040の楽しみ方
1.Pro Micro RP2040を購入してキーボードに搭載しよう
RP2040を搭載したPro Microというと、SparkFun Pro MicroやRaspberry Pi Picoが有名どころであるが、今回お勧めはその名も「Pro Micro RP2040」。アリさんマークのAliexpressで16MBが4ドル弱で手に入るので、是非この機会に購入すべきである。アリさんマークのリンクも貼っておく。
なぜPro Micro RP2040の一択かと言うと、とにかく安くPin配置の互換性があるというこの2点につきる。猫山王のClaw44のRP2040化もPro Micro RP2040を使用しており、Pro Micro RP2040を前提とした奮闘記であるという点についてご了承いただきたい。以下にPro Micro RP2040と一般的なPro MicroのPin配列を示しておく。Pro Micro RP2040は13ピンだが、一番上のピンを余らせると一般的なPro MicroのPin配列と互換性があることがお分かりいただけるだろう。
Pro Micro RP2040の一番上のピンは使用しないので、高さ2.5mmの12ピンのコンスルーを購入すると良い。ここでは、Pro Microが文鎮化した場合を想定して、ピンヘッダーではなくコンスルーの使用を強くお勧めする。また、コンスルーは自作キーボード会の萬屋的存在の遊舎工房で販売されている。Pro Micro RP2040とコンスルーを入手したら、Claw44に搭載されているPro Microを落ち着いてゆっくりと外そう。ビルドガイドに忠実に製作された修行僧のClaw44はコンスルーを用いてPro Micro側のみはんだ付けされている。ここで、Pro MicroをピンヘッダーでPCBにはんだ付けしてしまっていたり、コンスルーであっても勢い余ってPCB側もはんだ付けしてしまった修行僧は、時間を巻き戻して当時のご自身にコンスルーを用いてPro Micro側のみはんだ付けするようにアドバイスをして解決する他ないであろう。その他、PCB側にベットリ付いているはんだを外してPro Microを救出するには、相当の技量と不屈の精神力が要求され、失敗した場合には漏れなくPCBがご臨終となる。
さて、幸運にもClaw44に搭載されていたPro Microを外すことができた修行僧は、12ピンのコンスルーを用いてPro Micro RP2040をClaw44のPCBに搭載しよう。猫山王のClaw44とPro Micro RP2040が美しく融合した写真を参考資料として添付しておく。
2.RP2040に命を吹き込もう
Pro Micro RP2040をClaw44に搭載しただけでは、単なるお飾りで無限大の容量を持つ頭脳として全く機能しない。いつものごとくPro Micro RP2040に命を吹き込む必要があり、今回はRP2040用にRemap対応のFirmwareのソースコードを書き換えることになる。ひとまず、猫山王のRP2040用のファイルの構成は以下の通り。ピンクのチェックマークのファイルは今回新たに作成が必要なファイルであるが、OLEDで曼荼羅の世界を表現しないのであれば無視して良いファイルである。また、RP2040でOLEDとLEDを利用する場合はひと手間スパイスを追加する必要があり、それぞれの場合に分けてソースコードを書き換える方法については、猫山王の設定を参考にひとつひとつ解説していきたいと思う。
3.ピン情報を書き換えよう(主に、info.jsonファイル内)
info.jsonファイル内にピン番号が記載されている。これらはもともとATmega32U4に対応するピン番号で、上記のPin配列の対応表を参考にPro Micro RP2040のピン番号に変更("F4" → "GP29")が必要である。以下はMatrix Pin情報の書き換え例であり、漏れなく変更する必要があるので、コンパイルエラーにならないように頑張って探しだす修行が待っている。修行僧のお好みで呪文を追加している場合には、info.jsonファイル以外にもピン番号の記載があるかもしれない。この場合は他のファイルも念のためチェケラーして書き換える。
例)Matrix Pin情報 info.jsonファイル内
ATmega32U4用のピン番号
"matrix_pins": {
"cols": ["F4", "F5", "F6", "F7", "B1", "B3"],
"rows": ["D4", "C6", "D7", "E6", null]
Pro Micro RP2040用のピン番号
"matrix_pins": {
"cols": ["GP29", "GP28", "GP27", "GP26", "GP22", "GP20"],
"rows": ["GP4", "GP5", "GP6", "GP7", null]
4.Processor情報とBootloader情報を書き換えよう(info.jsonファイル内)
info.jsonファイル内のProcessor情報とBootloader情報もPro Micro RP2040用に更新する必要がある。こちらもサクッと更新しておく。
ATmega32U4用の記載
"processor": "atmega32u4",
"bootloader": "caterina",
Pro Micro RP2040用の記載
"processor": "RP2040",
"bootloader": "rp2040",
5.config.hファイルの内容を書き換えよう
keymapsフォルダ下のconfig.hにも手を加える必要がある。まずは、リセットボタンについての呪文である。Pro Micro RP2040にはResetボタンとBootボタンがある自作キーボード素人にはありがたい親切設計といえる。一方で、Claw44にPro Micro RP2040を搭載すると表裏ひっくり返ってしまい、なっ、なっ、なんとResetボタンとBootボタンが押せない残念仕様に早変わりしてしまう。PCBとPro Micro RP2040の隙間から押さないといけない超修行の道しか残されていないのかとご心配の修行僧の皆様、ここはご安心いただきたい。Claw44にはリセットボタンが搭載されているので、これを活用することでFirmwareの書き換えができる。で、そのための呪文が以下の通り。こちらを追加すると、リセットボタンをダブルクリックすることでPro Micro RP2040が外部ストレージとして認識されて、ドラッグ&ドロップでFirmwareを書き換えることができる。
/* define RP2040 boot用 */
#define RP2040_BOOTLOADER_DOUBLE_TAP_RESET // Activates the double-tap behavior
#define RP2040_BOOTLOADER_DOUBLE_TAP_RESET_TIMEOUT 200U // Timeout window in ms in which the double tap can occur.
Claw44などの分割キーボードでは、もうひとつ便利呪文を追加する必要がある。RP2040化した分割キーボードをPCに繋いだまま次回以降起動すると、キーボードが認識されていないんじゃないか現象が発生して、USBを抜き差しすることで再認識されることに気づくであろう。これは、SPLIT_USB_DETECTが有効になっていて、左右のキーボードの通信の検知がなされるまでにタイムアウト(デフォルトでは2秒でタイムアウト)した場合に起こる超常現象である。PC起動の都度USBを抜き差しするという修行で、不便さを満喫することで得られる快楽を求めてこのピストン運動を日常のルーティンとして行う修行僧もいるかと思うが、一応この超常現象を回避する手段がある。回避手段としては、PC起動時に左右の通信が検知されるようにこのタイムアウトの時間を調整する。猫山王のPCでは、7秒あれば高確率で超常現象が起きないことが確認できたので、7000msを設定値としているが、この辺りは各自修行してご自身の最適な値を設定すれば良い。
/* define RP2040 PC起動時認識用(SPLIT_USB_DETECTが有効となっているため) */
#define SPLIT_USB_TIMEOUT 7000 //Default 2000
#define SPLIT_USB_TIMEOUT_POLL 25 //Default 10
6.rules.mkファイルの内容を書き換えよう
keymapsフォルダ下のrules.mkに以下の呪文を追加する。BOARD = GENERIC_RP_RP2040を有効化すると、様々な定義を修行僧自身ですべて完結しないといけないので、とりあえず無効化しておくのが得策といえよう。
#BOARD = GENERIC_RP_RP2040
以上の呪文でFirmwareのRP2040対応はおしまい。続いて、RP2040でOLEDとLEDを利用する場合のひと手間スパイス呪文について、猫山王の設定を参考にひとつひとつ解説していく。OLEDとLEDについては、ATmega32U4からの差分について解説するので、それぞれ「Claw44であそぼ。④(OLED編)」と「Claw44であそぼ。⑥(LED編)」での修行は済ましてファイル書き換えは完了しておくように。
7.RP2040でOLEDを利用する場合
halconf.hファイルとmcuconf.hファイルをキーボード名フォルダー直下に格納する。それぞれのファイル内の呪文は以下になるが、とりあえずファイルを格納しておけばOK。
〈halconf.h〉
#pragma once
/* OLED */
#ifdef OLED_ENABLE
#define HAL_USE_I2C TRUE
#endif
#include_next "halconf.h"
〈mcuconf.h〉
#pragma once
#include_next "mcuconf.h"
/* OLED */
#ifdef OLED_ENABLE
#undef RP_I2C_USE_I2C0
#define RP_I2C_USE_I2C0 FALSE
#undef RP_I2C_USE_I2C1
#define RP_I2C_USE_I2C1 TRUE
#endif
keymapsフォルダ下のconfig.hに以下の呪文を追加する。これでRP2040でも夜光虫仕様のOLEDを利用することができ、曼荼羅の世界を表現することで視覚的なエンターテイメント要素を自作キーボードに加えることができる。
/* OLED driver and pins */
#define HAL_USE_I2C TRUE
#define I2C_DRIVER I2CD1
#define I2C1_SDA_PIN GP2
#define I2C1_SCL_PIN GP3
8.RP2040でLEDを利用する場合
keymapsフォルダ下のrules.mkに以下の呪文を追加する。RP2040ではWS2812関連のドライバーの記載をvendorに変更する必要がある。また、SERIAL_DRIVERは分割キーボードでは追加する必要がある。これらの記載については、info.jsonに記載されているキーボードもあるかと思うので、各修行僧のキーボードのソースコードの巻物に合わせて、info.jsonの呪文を書き換えるか、rules.mkに追記するかの対応が必要となる。
WS2812_DRIVER = vendor # RP2040用に追加
SERIAL_DRIVER = vendor # RP2040用に分割キーボードで追加
keymapsフォルダ下のconfig.hに以下の呪文を追加しましょう。「Claw44であそぼ。⑥(LED編)」「4.config.hファイルの内容を書き換えよう」の項の呪文との違いは、#define WS2812_PIO_USE_PIO1を追加したのと、#define WS2812_DI_PINのピン番号を"D3"から"GP0"に変更しているが、以下の呪文にマルッと書き換えてしまった方が早い。また、RP2040化により無限大の容量を手に入れることができたため、ATmega32U4では諦めていたネズミ王国の電装行進プログラムの全てを唱えることができるようになる。これで七色発行体を自由に操ることができ、ようやく真の夢の光の魔術師仕様の完成形を手に入れることができたといえよう。なお、LEDテープの+5vについては、3V3-pinではなく5V-pinにはんだ付けすると、ネズミ王国の電装行進プログラムが安定する。
/* WS2812B RGB LED */
#ifdef RGBLIGHT_ENABLE
#define RGBLIGHT_LAYERS // レイヤーとの連動機能の有効化
#define RGBLIGHT_MAX_LAYERS 8 // 連動するレイヤー数(最大8)
#define WS2812_PIO_USE_PIO1 // RP2040用に追加
#define WS2812_DI_PIN GP0 // D-inをつなぐTX0の端子
#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 */
#define RGBLIGHT_LED_MAP { 0, 1, 2, 3, 4, 5,
11, 10, 9, 8, 7, 6 }
/* RP2040化により無限大の容量を得たためネズミ王国の電装行進のプログラムはすべて有効 */
#define RGBLIGHT_ANIMATIONS
#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
9.さあ、コンパイルしよう
ここまでくれば最後はQMK MSYSでのコンパイルです。呪文のコンパイルの成功は、暗黒世界の中で不便さを克服することにより得られる快楽を求める修行僧として銀河系の無限大の容量を得たことを意味します。RP2040対応のFirmwareのコンパイルのためのコマンドは特殊なものではなく、従前のVIA/Remap対応のFirmwareのコマンドと同じになります。
cd [qmk_folder_name]
cd keyboards
qmk compile -kb dailycraft/[keyboard_folder_name] -km [keymap_folder_name]
コンパイルしたRP2040のFirmwareはqmk_toolboxを利用しての書き換えではなく、リセットボタンをダブルクリックしてPro Micro RP2040が外部ストレージとして認識されドラッグ&ドロップでの書き換えという方法は、慣れればこちらの方がより快適だと気づくでしょう。
実際にRP2040化してみて
Pro Micro RP2040を用いてRP2040化することで無限大の容量を得ることができ、今までの僅少容量からのノーコンパイルのアリ地獄から脱出するために自身のキーボードの機能を厳選するという不便さからくる快楽を味わうことはできなくなった。一方で、自作キーボードの初心者にとっての最大の悩みのひとつである容量問題を一気に解決することができ、自身のキーボードをさらに個性豊かなものにすることができる無限大の可能性を得ることができた。RP2040化はあくまで物理的な側面での対応がメインで、猫山王の修行経験ではRP2040化によって今まで出来ていたことが出来なくなるということは一切なく、FirmwareについてもRemapの全機能がそのまま利用できる。Pro Micro RP2040を用いることでそれほどコストをかけずにRP2040化でき、猫山王の奮闘記を導きの書とすることで自作キーボードの初心者にとっても簡単に導入できると思う。また、RP2040化することで七色発行体でネズミ王国の電装行進プログラムの全てを唱えることができるようになり、修行僧のテンション爆上がり仕様となる。また、使う使わないは別にして、容量を一切気にせずお好みの機能のトッピングを意味もなくrules.mkに追加することもできる。以下はトッピングのほんの一例。
MOUSEKEY_ENABLE = yes
EXTRAKEY_ENABLE = yes
TAP_DANCE_ENABLE = yes
COMBO_ENABLE = yes
KEY_OVERRIDE_ENABLE = yes
GRAVE_ESC_ENABLE = yes
NKRO_ENABLE = yes
とはいえ、猫山王としてはRP2040化による最大のメリットはレイヤー数の爆増にあるといえる。レイヤー数を増やすことができるのであれば、どんな難行苦行であってもいとわない重度のレイヤー中毒である猫山王にとって、Pro Micro RP2040は喉から手が出るほど欲しい秘薬といえる。で、Pro Micro RP2040によってClaw44のレイヤー数がいくつまで増やすことができるかというと、その数”21”。ENCODER_MAP_ENABLE仕様でレイヤー数を21にすることができるので、これはもうClaw44レイヤー界の絶対王といっても過言ではない。RP2040化によってノーコンパイルのアリ地獄からの脱出という不便さの克服による快楽を満喫し、真の夢の光の魔術師仕様の実現とレイヤー界の絶対王となるための一助となれば幸いです。
自作キーボードは敷居が高いと思われている方にとって、一日で一番手に触れているものはキーボードということで、不便さを克服することにより得られる快楽の世界への入門のための勇気づけとなれば幸いです。
次回
さて次回はFirmwareのVial対応の奮闘記をお届けします。今回のRP2040化により無限大の容量を得て、レイヤー数も爆増とネズミ王国の電装行進プログラムの全てを唱えることができるようになり、さらにはお好みの機能のトッピングも食べ放題と不便さを克服することにより得られる快楽のためのすべての修業が修了した錯覚に陥りがちである。RP2040化は決して自作キーボードの最後の修行ではなく、実はあくまでFirmwareのVial対応の修行の下準備でしかない。ここに、RP2040化により無限大の容量を得ることができた修行僧のみが許されるVial修羅の国での修業が待ち受けています。不便さを克服することにより得られる快楽を求める修業はまだまだ続きます。