- 嵌入式
- 固件
- 驱动开发
- 硬件开发
【免费下载链接】qmk_firmware
Open-source keyboard firmware for Atmel AVR and Arm USB families
导读
craftwalk 是一款面向游戏玩家(尤其 Minecraft 等建造类游戏玩家)的 13 键宏键盘(macro pad),其 QMK 固件支持 Pro Micro 开发板与 WS2812 RGB 灯带。本文以仓库内 keyboards/craftwalk/readme.md 为主干,结合 keyboards/craftwalk/keyboard.json 与 keyboards/craftwalk/keymaps/default/keymap.c 的源码细节,完整讲解该键盘的硬件配置、固件构建、烧录方法与键位定制,让你既能快速点亮这块"craft pad",也能深入理解 QMK 数据驱动配置的底层原理。
1. 键盘概况与硬件信息
craftwalk 是日本开发者 sotoba 设计的一款小型宏键盘,readme 中明确其定位为 "A macro pad for (mine)crafters",即面向 Minecraft(我的世界)等建造类游戏玩家,用于快速触发常用操作或组合键。
| 项目 | 内容 |
|---|---|
| 键盘维护者(Maintainer) | sotoba |
| 硬件支持 | craftWalk PCB(官方 PCB,兼容 Pro Micro) |
| 硬件购买渠道 | BOOTH 平台 stupa-devices 店铺(见 readme 原文) |
| 开发板 | Pro Micro(AVR ATmega32U4) |
| 键位数量 | 13 键 |
| RGB 灯珠 | 19 颗 WS2812 灯珠 |
craftwalk 在 QMK 仓库内的目录结构如下:
keyboards/craftwalk/ ├── keyboard.json # 数据驱动(data-driven)键盘定义 ├── readme.md # 键盘介绍与构建说明 └── keymaps/ └── default/ └── keymap.c # 默认键位映射从文件结构看,该键盘完全采用 QMK 的数据驱动配置(data-driven configuration)模式:硬件定义全部集中在keyboard.json,没有独立的config.h、rules.mk或 C 语言矩阵定义文件。这一点与 QMK 官方 数据驱动配置文档 所描述的演进方向一致。
2. 构建环境与固件编译
2.1 构建前置条件
readme 指引新用户先完成 QMK 构建环境安装。QMK 官方提供了两种主流方式(见 docs/getting_started_introduction.md):
- QMK CLI 方式:安装 Python 3 与 pip 后执行
pip3 install qmk,随后运行qmk setup完成工具链初始化; - Docker 方式:使用官方
qmkfm/qmk_cli镜像,在容器中完成编译,适合不想污染本机环境的用户(见 docs/getting_started_docker.md)。
由于 craftwalk 基于 Pro Micro(ATmega32U4),编译时需要 AVR 工具链(avr-gcc、avr-libc 等),QMK 的qmk setup会自动完成这些依赖的安装。
2.2 编译命令
readme 给出的构建示例命令为:
make craftwalk:default该命令的含义是编译keyboards/craftwalk目录下名为default的键位映射(keymap)。更完整的用法参考 docs/getting_started_make_guide.md:
# 编译并生成 .hex/.bin 固件 make craftwalk:default # 指定编译器(AVR 默认使用 avr-gcc) make craftwalk:default:avr # 编译后直接尝试烧录(需先按住复位进入 bootloader) make craftwalk:default:flash2.3 烧录方式
Pro Micro 板载 bootloader 通常为 Caterina。烧录前需要先按下 Pro Micro 的复位(RST)按钮两次进入 bootloader 模式,随后执行:
make craftwalk:default:flashQMK 会调用avrdude完成烧录。完整的烧录方法论可参阅 docs/flashing.md,其中列出了各芯片对应的 bootloader 与烧录工具对照表。
3. 数据驱动硬件配置深度解析
craftwalk 的硬件定义全部位于 keyboards/craftwalk/keyboard.json,本节逐项拆解其关键配置及其在源码中的含义。
3.1 USB 标识
"usb": { "vid": "0x7364", "pid": "0x2E8F", "device_version": "0.0.1" }vid/pid:USB 供应商 ID 与产品 ID,操作系统据此识别设备。QMK 默认生成的 VID 为0xFEED,此处使用自定义值0x7364;device_version:设备固件版本号,可配合 USB 描述符查询工具查看。
3.2 开发板与矩阵引脚
"development_board": "promicro", "matrix_pins": { "cols": ["B1", "F7", "F5", "F4", "B2", "E6", "B4"], "rows": ["F6", "B3", "B5"] }, "diode_direction": "COL2ROW"development_board: "promicro"让 QMK 自动套用 Pro Micro 的引脚命名映射(见 data/mappings/defaults.hjson),这正是keyboard.json中能直接写"B1"、"F7"等 AVR 引脚名的原因;- 矩阵规模为3 行 × 7 列 = 21 个交叉点,而实际键位只有 13 个,剩余位置未使用(部分交叉点不接二极管);
diode_direction: "COL2ROW"表示二极管方向为列到行,即行引脚作为输入、列引脚作为输出扫描。方向与 PCB 上二极管安装方向一一对应,接反会导致整列或整行失效。
3.3 Bootmagic 配置
"bootmagic": { "matrix": [1, 0] }Bootmagic 允许在键盘上电时按住特定按键进入特殊模式(如进入 bootloader、切换默认层、交换左右 Ctrl 等)。matrix: [1, 0]指定触发键位于矩阵第 1 行第 0 列,即 keyboard.json 布局中左下角的第一个键位(对应默认键位中的KC_LCTL)。
值得注意的是,keyboard.json的features.bootmagic被设为false,同时bootmagic.matrix又定义了触发位置——这意味着构建时 Bootmagic 功能整体关闭(见 data/mappings/info_config.hjson 中BOOTMAGIC_ROW/BOOTMAGIC_COLUMN到bootmagic.matrix的映射关系),但保留位置定义以备未来启用。若想启用完整 Bootmagic Lite(默认模式),只需将features.bootmagic改为true后重新编译。
3.4 功能特性开关
"features": { "bootmagic": false, "command": true, "console": true, "extrakey": false, "mousekey": true, "nkro": false, "rgblight": true }各开关在 data/mappings/info_rules.hjson 中与构建系统变量一一对应,含义如下:
| 特性 | 值 | 说明 |
|---|---|---|
command | true | 启用键盘命令模式(LSFT+RSFT+...),用于调试与运行时控制 |
console | true | 启用调试控制台输出,可配合hid_listen查看日志 |
mousekey | true | 启用鼠标键功能(默认键位中使用了MS_WHLU/MS_WHLD滚轮键) |
extrakey | false | 关闭多媒体/系统键支持 |
nkro | false | 关闭 N 键无冲(默认 6KRO,对宏键盘足够) |
rgblight | true | 启用 RGB 灯效 |
3.5 RGB 灯效配置
"rgblight": { "saturation_steps": 8, "brightness_steps": 8, "led_count": 19, "sleep": true, "animations": { "breathing": true, "rainbow_mood": true, "rainbow_swirl": true, "snake": true, "static_gradient": true, "rgb_test": true, "alternating": true } }, "ws2812": { "pin": "D3" }ws2812.pin: "D3":19 颗 WS2812 灯珠的数据线接在 Pro Micro 的 D3 引脚(AVR 引脚 PD3)。QMK 的 WS2812 驱动通过该引脚按位时序协议驱动灯珠(驱动说明见 docs/features/rgblight.md);led_count: 19:灯珠数量,RGB 底层据此分配 LED 缓冲数组;saturation_steps/brightness_steps:饱和度和亮度的调节步进数,决定了UG_SATU/UG_SATD、UG_VALU/UG_VALD每次按键变化的增量;sleep: true:键盘睡眠时自动关闭灯效以省电;animations:显式启用所需的灯效动画。这也是 QMK 推荐的现代写法——旧的RGBLIGHT_ANIMATIONS总开关已标记为 deprecated,官方建议逐个声明动画以控制固件体积(docs/features/rgblight.md 中注明 "RGBLIGHT_ANIMATIONS is being deprecated and animation modes should be explicitly defined")。
3.6 布局(LAYOUT)定义
layouts.LAYOUT将 13 个物理键位映射到 3×7 矩阵交叉点,并给出每个键的视觉坐标(x/y)与尺寸(h)。坐标以 1U 键帽为单位:
"layouts": { "LAYOUT": { "layout": [ {"matrix": [0, 1], "x": 1.25, "y": 0.25}, {"matrix": [0, 2], "x": 2.25, "y": 0}, {"matrix": [0, 3], "x": 3.25, "y": 0.25}, {"matrix": [1, 0], "x": 0, "y": 1}, ... {"matrix": [2, 5], "x": 5.25, "y": 3, "h": 1.5}, {"matrix": [2, 6], "x": 6.25, "y": 3, "h": 1.5} ] } }布局呈不规则排布:顶部 3 键交错放置,左侧为 2 列 2 行功能键,右侧底部有两个 1.5U 高的大键(h: 1.5)。h表示键帽高度占比,用于在 QMK Configurator 等可视化工具中正确渲染键位形状。
4. 默认键位映射剖析
默认键位定义在 keyboards/craftwalk/keymaps/default/keymap.c,共 3 层:基础层(_BASE)、数字层(_NUM)、调节层(_ADJUST)。
4.1 基础层(Base)
enum layer_names { _BASE, _NUM, _ADJUST }; #define MO_NUM MO(_NUM) #define MO_ADJ MO(_ADJUST) const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { [_BASE] = LAYOUT( KC_Q, KC_W, KC_E, KC_LCTL, KC_A, KC_S, KC_D, KC_LSFT, MO_ADJ, MS_WHLU, MS_WHLD, KC_F, MO_NUM, KC_SPC ),基础层是典型的"左手宏区"布局:Q/W/E/A/S/D/F是常用按键,KC_LCTL、KC_LSFT提供修饰键,MS_WHLU/MS_WHLD是鼠标滚轮上/下(依赖mousekey特性),底部右侧的 1.5U 大键映射为空格(KC_SPC)。MO_NUM和MO_ADJ是按住型层切换键(momentary),按住即切换到对应层,松开即返回。
4.2 数字层(Number)
[_NUM] = LAYOUT( KC_7, KC_8, KC_9, KC_ESC, KC_4, KC_5, KC_6, KC_TRNS, KC_1, KC_2, KC_3, KC_F3, KC_TRNS, KC_TRNS ),数字层将字母区切换为数字键盘区(7/8/9、4/5/6、1/2/3),KC_ESC提供退出键,KC_F3映射到功能键。KC_TRNS(transparent)表示透传:该位置沿用更低层(基础层)的键值,因此本层的空格、滚轮键等继续沿用基础层定义。
4.3 调节层(Adjust)
[_ADJUST] = LAYOUT( UG_HUEU, UG_SATU, UG_VALU, QK_BOOT, UG_HUED, UG_SATD, UG_VALD, RGB_M_T, KC_TRNS, UG_NEXT, UG_PREV, UG_TOGG, KC_TRNS, KC_TRNS ) };调节层集中了 RGB 控制键与重置入口:
UG_HUEU/UG_HUED:色相 +/−;UG_SATU/UG_SATD:饱和度 +/−;UG_VALU/UG_VALD:亮度 +/−(步进值由rgblight.saturation_steps/brightness_steps决定,见 docs/features/rgblight.md 中的QK_UNDERGLOW_*键码表);UG_NEXT/UG_PREV:循环切换灯效模式;UG_TOGG:开关 RGB;RGB_M_T:RGB 测试模式(红/绿/蓝三色轮询显示,用于验证灯珠是否正常工作,对应 docs/features/rgblight.md 中已弃用的RGB_MODE_RGBTEST别名);QK_BOOT:一键进入 bootloader,无需按硬件复位键即可进入烧录模式,配合make craftwalk:default:flash使用非常方便。
由于MO_ADJ位于基础层左下角,使用时按住左下角MO_ADJ键不放,其余按键即切换为 RGB 控制功能,单手即可完成灯效调节。
5. 自定义键位的实战方法
5.1 修改默认键位
craftwalk 默认键位通过make craftwalk:default直接使用。自定义时建议参照 QMK 用户空间(userspace)模式(见 docs/feature_userspace.md),或直接修改keymaps/default/keymap.c后重新编译:
make craftwalk:default make craftwalk:default:flash注意:对仓库内的键位文件仅作本地查看与学习,建议将个人键位放至keyboards/craftwalk/keymaps/<你的名字>/目录(QMK 会自动发现子目录中的 keymap,无需额外注册)。
5.2 自定义键位示例
#include QMK_KEYBOARD_H enum layer_names { _BASE, _GAME }; const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { [_BASE] = LAYOUT( KC_Q, KC_W, KC_E, KC_LCTL, KC_A, KC_S, KC_D, KC_LSFT, MO(_GAME), MS_WHLU, MS_WHLD, KC_F, MO(_GAME), KC_SPC ), [_GAME] = LAYOUT( KC_1, KC_2, KC_3, KC_TRNS, KC_4, KC_5, KC_6, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS ) };将默认键位中MO_ADJ的调节层换成_GAME游戏层,即可在按住时快速切换数字键 1–6,方便 Minecraft 中快速切换物品栏。
5.3 键码速查
- 常用键码:
KC_A–KC_Z、KC_0–KC_9、KC_ESC、KC_SPC、KC_F1–KC_F24; - 修饰键:
KC_LCTL、KC_LSFT、KC_LALT、KC_LGUI及对应的右侧重命名; - 层操作:
MO(x)按住切换、LT(x, kc)单击输出按键/长按切层、TG(x)切换、TO(x)直接跳转、TT(x)点按切换; - 鼠标键:
MS_WHLU/MS_WHLD(滚轮)、MS_BTN1–MS_BTN5(按键); - RGB 控制:
UG_TOGG、UG_NEXT、UG_PREV、UG_HUEU/UG_HUED、UG_SATU/UG_SATD、UG_VALU/UG_VALD(完整键码表见 docs/keycodes.md 与 docs/features/rgblight.md)。
6. 常见问题与排查思路
- 编译报错找不到引脚:确认
keyboard.json中development_board为"promicro",引脚名必须使用 Pro Micro 映射后的名称; - 部分键无响应:检查
matrix_pins中行列与 PCB 实际走线是否一致、diode_direction是否为COL2ROW,以及焊接方向(二极管阴极朝向行或列与方向定义匹配); - RGB 不亮或颜色错乱:先用
RGB_M_T测试模式(调节层左下角MO_ADJ后按RGB_M_T)验证每颗灯珠;确认ws2812.pin与接线一致,且led_count与实际灯珠数量相同; - 无法进入烧录模式:对 Pro Micro 双击 RST 进入 bootloader;若固件已烧入
QK_BOOT键(调节层左上角),直接按该键即可; - 需要查看调试日志:
console: true已启用,配合hid_listen(见 docs/faq_debug.md)可实时查看键盘输出与错误信息。
结语
craftwalk 是一个麻雀虽小五脏俱全的 QMK 宏键盘案例:它同时展示了数据驱动keyboard.json的完整写法、多层级键位设计、WS2812 RGB 灯效配置以及 Pro Micro 平台的构建烧录流程。通过对照 keyboard.json 与 默认键位 的每一处配置,读者不仅能快速点亮这块"craft pad",更能举一反三,将同样的数据驱动配置方法应用到自己的 QMK 键盘项目中。
- 嵌入式
- 固件
- 驱动开发
- 硬件开发
【免费下载链接】qmk_firmware
Open-source keyboard firmware for Atmel AVR and Arm USB families
相关推荐
QMK EB46:一款 40% + 宏键自定义键盘的完整构建与键位解析
QMK EB46:一款 40% + 宏键自定义键盘的完整构建与键位解析 EB46 是由 Elliot Powell(GitHub: e11i0t23)设计的 4
嵌入式固件驱动开发硬件开发QMK 固件编译指南:CannonKeys Vector 60% 键盘从刷写到自定义键位
QMK 固件编译指南:CannonKeys Vector 60% 键盘从刷写到自定义键位 导读 本文以 QMK Firmware 仓库中 CannonKeys
嵌入式固件驱动开发硬件开发Chocofly 60% 人体工学单块键盘:QMK 固件从构建、刷写到自定义键位实战指南
Chocofly 60% 人体工学单块键盘:QMK 固件从构建、刷写到自定义键位实战指南 Chocofly 是一款开源的人体工学单块(monoblock)60%
嵌入式固件驱动开发硬件开发
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考