諸々の記録

その時々 興味にある事について

RP2040-ZeroでQMKファームウエアキーボード作成(MachiKania用)

MachiKania Type P/PU ではUSBキーボード接続しての操作もできるわけですが、PC用のゲームコントローラーは接続できません。

で、思ったのが、自作キーボード界隈ではよく作られている片手デバイス的なものを作ってMachiKania Type P/PU に接続すれば良いのでは? と思いました。

もともと、MobiFlight でコントローラーを作ってるときからAruduino(Pro Micro)で片手デバイスを作ってる人がいるのをみて、いつかは作ってみたいなぁとは思っていたのですが、最近はラズパイPicoで作ってる人も多いみたいで情報を集めてみました。

RP2040-Pro で作ろうと思うので、参考にしたサイトは下記。
自作キーボードの作り方(QMK Firmware編) 3 - Special - CeresSoft

ダイヤルを2つ搭載した左手デバイス(自作キーボード) | ProtoPedia
作りたいのは、キーは数個でよいので、キーマトリックスにせずGPIO直接続で、一番オーソドックスなファームウエアであるQMKを使ったものですが、そものもずばりの制作例が見つからず、copilot(AI)にも質問してみたのですが、間違った回答をしたりしてちょっと苦労しました。

(その後。目的のものにかなり近いものを発見 ↓) )https://zenn.dev/nananauno/articles/99a896a5c6baa8


ただ、いったんうまくいけば難しいものではなかったです。
以下、覚え書。

まず、QMKファームウエアの開発環境を構築。
手順は下記の動画がとても参考になりました。

https://www.youtube.com/watch?v=hSFysk9afEQ


ネットで調べると、Ubuntu上に構築とか説明しているのもありますが、Windpwsでexeを実行するだけで開発環境が構築できる QMK MSYS っていうのをインストールすればよいです。

QMK MSYS にアクセスして、Latest Version からインストーラ(exe)をダウンロードしてインストール。



Get Started にインストールからコンパイルの方法まで説明があります。
単純に
 qmk setup 
でインストールすると、C:\Users\<USER_NAME>\qmk_firmware にインストール(git clone)されますので、インストール先を変更する場合は、
  qmk setup --home C:/<path>/qmk_firmware
のようにします。(<path> に任意のフォルダを指定) 

qmk new-keyboard
を実行して、途中の設定で
Default Layout は、
 none of the above
Microcontroller は
 RP2040
Using a Development Board? は n を選択。

インストール後、修正するファイルはQMKをインストールしたフォルダは以下にある下記の2つ。(<key_name>は new-keyboard で指定したキーボード名)

~\qmk_firmware\keyboards\<keyboard_name>\keyboard.json
~\qmk_firmware\keyboards\<keyboard_name>\keymaps\default\keymap.c

例えば、下記のように GP14, GP15, GP26, GP27 にスイッチを接続する場合。


keyboard.json と keymap.c は下記のように修正しました。
(4つのキーをカーソルキーに割り当てる例)

keyboard.json

{
    "manufacturer": "momoji",
    "keyboard_name": "test_key",
    "maintainer": "momoji",
    "bootloader": "rp2040",
    "features": {
        "bootmagic": true,
        "command": false,
        "console": false,
        "extrakey": true,
        "mousekey": true,
        "nkro": true
    },
    "matrix_pins": {
        "direct": [
            ["GP14", "GP15", "GP26", "GP27"]
        ]
    },
    "processor": "RP2040",
    "url": "",
    "usb": {
        "device_version": "1.0.0",
        "pid": "0x0000",
        "vid": "0xFEED"
    },
"layouts": { "LAYOUT": { "layout": [ { "matrix": [0, 0], "x": 0, "y": 0 }, { "matrix": [0, 1], "x": 1, "y": 0 }, { "matrix": [0, 2], "x": 2, "y": 0 }, { "matrix": [0, 3], "x": 3, "y": 0 } ] } } }


keymap.c

// Copyright 2023 QMK
// SPDX-License-Identifier: GPL-2.0-or-later

#include QMK_KEYBOARD_H

#define MATRIX_ROWS 1
#define MATRIX_COLS 4

const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
    /*
     * ┌──┬──┬──┬──┐
     * │LEFT│RGHT│DOWN│ UP │
     * └──┴──┴──┴──┘
     */
    [0] = LAYOUT(
        KC_LEFT,   KC_RGHT,   KC_DOWN,    KC_UP
    )
};


keymap.c の LAYOUT で指定するキーのコードは下記を参照。

Basic Keycodes | QMK Firmware


ファイルを修正したら
 qmk compile -kb <keyboard_name> -km default
コンパイル
最初はすごく時間がかかる。
エラーなく終了したら、qmk_firmware フォルダに uf2ファイルができるので、RP2040-ZeroのBOOTスイッチを押しながらPCに接続して、生成された uf2ファイルをRP2040-Zeroにコピーすれば完了。
そのままPCに接続しておけば、動作確認もできます。
メモ帳等を開いてちゃんと動作するか試しましょう。

最初は各ファイルの修正方法が分からなかったので苦労しましたが、環境さえ作って、修正方法がわかればファイル2つを少し修正するだけで好みのキーボードが作れることが分かりました。

ブレッドボードに6ボタンのものを作って、MachiKania type PU に接続してみて問題なく動作することを確認しました。
これで自由度の高いコントローラーが作れます。