
制御ライブラリを「KMK」へアップグレード
前々回の記事「自作hitbox 小型マイコンで格ゲーコントローラを自作する。-その1 環境構築編-」では、標準的なadafruit_hidライブラリを使ったセットアップをご紹介しました。しかし、実際にゲームを快適に遊ぼうとすると、「もっと柔軟にキーを切り替えたい」「マウスも動かしたい」という欲求が出てきます。
そこで、Pythonで書ける高機能キーボードフレームワーク「KMK Framework」を採用しました。今回は、このkmkでのセットアップからレイヤー切り替えについて紹介していこうと思います。
第1回 セットアップ編
自作hitbox 小型マイコンで格ゲーコントローラを自作する。-その1 環境構築編-【RP2040】
pico互換マイコンで環境構築から『a』が出るまでの手順を丁寧に紹介します。
KMKのセットアップ
導入は非常にシンプルです。
- ダウンロード: KMK公式からファイルを一式入手します。(githubにあるので kmkフォルダを見つける)
- コピー: RP2040をPCに繋ぎ、
libフォルダの中にkmkフォルダをそのままドラッグ&ドロップします。
1.配布場所からダウンロード
KMK: Clackety Keyboards Powered by Python
KMKのgithubページ
github.com2. RP2040にインストール
他のライブラリと同様 “kmk”というフォルダを libフォルダにコピーすることでインストールできます。

詳しい使い方は公式のドキュメントを参照。
- キーコードの一覧や各モジュールの設定方法が網羅されています。
1. ボタンの定義とスキャン
「MODEL 01」は、16個の操作ボタンに加え、背面に2つの切り替え用スイッチ(GP26, GP27)を搭載した計18入力の構成です。 KMKのKeysScannerを使えば、マトリックス配線でなくても、これらのピンを一括で管理できます。
参考コード例:
# GP0-15:ボタン, GP26-27:モード/ロックSW
PINS = [
board.GP0, board.GP1, board.GP2, board.GP3,
board.GP4, board.GP5, board.GP6, board.GP7,
board.GP8, board.GP9, board.GP10, board.GP11,
board.GP12, board.GP13, board.GP14, board.GP15,
board.GP26, board.GP27
]
keyboard.matrix = KeysScanner(
pins=PINS,
value_when_pressed=False, # 押した時に回路が閉じる
pull=True,
)2. アケコンでマウスを動かす:MouseKeysの実装
『ゼンレスゾーンゼロ(ZZZ)』などのARPGを遊んでいて一番困るのが、「報酬受け取りやメニュー選択でマウスが必要になる」こと。 わざわざマウスに持ち替えるのは面倒なので、アケコンのボタンでマウスをエミュレートします。
from kmk.modules.mouse_keys import MouseKeys
keyboard.modules.append(MouseKeys())
# 速度設定:自分の操作感に合わせて調整
mouse_keys = MouseKeys()
mouse_keys.max_speed = 20
keyboard.modules.append(mouse_keys)これだけで、特定のボタン(後述のレイヤー)を押している間、十字キーを「マウスカーソル」として使えるようになります。
#通常キーボタンと同様に以下の様に割り当てるとカーソル移動をさることができます。
KC.MS_UP, # 例 5番: マウスカーソル上
KC.MS_LT, # 例 8番: マウス左
KC.MS_DN, # 例 9番: マウス下
KC.MS_RT, # 例 10番: マウス右3. レイヤー切り替え
「ボタンが足りない!」を解決するのがレイヤー機能です。 今回は「長押し」や「スイッチのON/OFF」で、ボタンの役割を瞬時に切り替える構成にしました。
| レイヤー番号 | レイヤー名 | 主な機能 | トリガー(切り替え条件) | 備考 |
| Layer 0 | 標準モード | ZZZ等の通常戦闘操作 | デフォルト(ベース) | 基本のWASDや攻撃ボタン |
| Layer 1 | モードB | 数字キー・矢印キー | GP27スイッチ をONの間 | 設定やサブ操作用 |
| Layer 2 | マウスモード | マウス移動・クリック | Layer0から11番ボタン をONの間 | マウスカーソルを操作可能 |
| Layer 3 | 拡張モード | 数字・Altキー | Layer 2で12番ボタン を押している間 | マウス操作中の特殊入力 |
| Layer 4 | ソフトOFF | 全ボタン無効化(ロック) | (最上位レイヤーとして定義) | 持ち運び時の誤爆防止用 |
- 長押しで移動 (
KC.MO(n)): 特定のボタンを押している間だけ、裏のレイヤー(マウス操作など)を呼び出します。 - 同時押しでさらに深く: レイヤー2を開きながら別のボタンを押すとレイヤー3へ……といった多段構成も可能です。
- GP27スイッチとGP26スイッチはモード切替用のトグルスイッチを使います。
究極の安全装置「ソフトウェアOFF」
面白い試みとして、背面のスイッチをONにすると全ボタンを無効化(KC.NO)するレイヤーを最優先で読み込むようにしました。ほかのキーボードやマウスで操作中の誤作動を防ぐ「物理的なソフトロック」です。
完成したレイヤー構成でZZZを遊ぶ
これらの機能を組み合わせて、「戦闘時はアケコン、メニュー操作はマウスモード」と切り替えることで、コントローラーから一切手を離さずにプレイできるようになりました。
※前回の記事の動画再掲
実際に動かしてみると、ニコの特殊モーションのような正確な入力が求められる操作も、自作ならではの配置のおかげでミスなく決まります。
最後に
当初は「キー入力ができればいい」と思っていましたが、KMKに乗り換えたことで、アケコンが「マウスにもなり、安全ロックもかかる」デバイスへと進化しました。
現状でも十分遊べるクオリティですが、今回の知見から改善したい点もいくつか見えてきました。
- LEDインジケータの実装: 現在のレイヤーが視覚的にわかるようにしたい。
- 基板の固定: 今はまだ宙ぶらりんなので、しっかり固定できる構造へ。
- 入力ロジックの微調整: 右端キーのコンボ時の挙動をより滑らかに。
良い設計アイデアが浮かんだらMODEL02を作成して今回の内容を改善していこうと思います。
併せて読みたい:前回記事 “キーレイアウト設計”
自作hitbox 小型マイコンで格ゲーコントローラを自作する。-その2 キー配列と試作機01-【RP2040】
自作キーボード(アケコン風)の試作機1号完成。動作検証のためZZZを自作キーボードでプレイ。
ここまで読んでいただきありがとうございます。
では、次の記事で。 lumenHero
Reference: 本プロジェクトの制御には、オープンソースのキーボードファームウェア KMK Framework を使用しています。
- develop chat Site: kmkfw.io
- License: GPLv3